Servidor
de pesaje de páginas Web
-
Descripción:
El objetivo es registrar el número
de conexiones y la cantidad total de bytes transferidos a un cliente cuando
este solicita una página Web, ya sea mediante un Browser o el programa
alimentador. Para llevar a cabo esta
tarea se usa el programa ppw, que es un servidor que corre en
aragorn.elo.utfsm.cl, el cual recibe como parámetros de entrada el puerto local
de aragorn sobre el que aceptarán conexiones de clientes, además de la IP y
puerto del proxy que contactará para satisfacer los requerimientos de páginas
Web.
Para este caso en particular, el
proxy utilizado posee la IP 200.1.28.8 y se usará el puerto 3128. Este proxy se
encuentra ubicado en el ATMLAB.
-
Salida:
Habiendo ejecutado el servidor ppw, después de cada retorno de carro
ingresado por teclado, el programa retornará cuatro valores. Estos son: el número de bytes transferidos desde el último retorno de carro,
el número de conexiones nuevas establecidas, el número total de bytes desde el inicio
y el número total de conexiones establecidas desde el inicio (se incluyen las
que ya no están activas). Los datos son
visualizados en este orden.
El cliente que
está navegando a través de su Browser obtendrá la página Web solicitada. El proceso de comunicación es transparente
para él, pero internamente toda la conexión se realiza a través del Proxy.
Cuando se llama
al alimentador, este no retorna ningún valor a la consola desde el cual fue
llamado. Su función es solicitar la
página a través del servidor ppw para que éste pueda pesarla.
-
Funcionamiento:
Este servidor (ppw) realizará una
conexión con el proxy por cada conexión que un cliente le solicite. Su función es traspasar los paquetes TCP de
un lado a otro, sin realizar modificaciones sobre ellos. Así podrá obtener el número de conexiones y
la cantidad de bytes transferidos desde el proxy, datos que pueden ser
solicitados en cualquier momento vía teclado mediante un retorno de carro. Esto se logra implementando la comunicación
a través de sockets. Usando la
función select se monitorean los descriptores creados, de manera de
poder saber cuándo se solicitan nuevas conexiones de parte de los clientes o
cuándo el Proxy devuelve las páginas solicitadas. Como es el servidor ppw el que se encarga de traspasar los datos
de un lado a otro, es en este proceso cuando realiza la contabilidad del número
de bytes transferidos y el número de conexiones establecidas (ver figura 1).
Por
otro lado, alimentador es un cliente encargado de solicitar la página definida
en el URL dado. Esto lo
realiza contactando al servidor de pesaje, especificando la IP y Proxy, tal
como si el servidor actuara como un proxy para él (ver figura 2). A través de
este mecanismo el servidor de pesaje obtendrá nuevamente las estadísticas
mencionadas
anteriormente. La implementación del
alimentador resulta bastante sencilla.
Se construyó un fichero script, en el cual se hace uso del
comando wget para descargar el URL requerido. Puesto que es necesario pasar primero por Proxy, wget
dispone de una variable de ambiente llamada http-proxy, en la cual se le
puede especificar la IP y el puerto del host que actuará de Proxy para él (wget
-p http_proxy=200.1.17.195:2345). Con
la opción –p se descarga la página,
junto con los demás agregados que la componen, tales como imágenes,
sonido, etc. Por último se usaron las
opciones --directory-prefix=./dir y --output-file=logfile, para indicar el
directorio y el archivo en que se copiará la página Web y la salida del
comando, respectivamente. Esto con el
fin de poder eliminar todo lo que se haya bajado producto del pesaje y dejar
“limpio” el directorio de trabajo.
-
Consideraciones:
Es importante especificar el
directorio actual ./ para la ejecución del programa si este no se encuentra en
el PATH.
Cuando se abre un cliente para contactar una página Web a través de un Browser,
éste debe ser configurado para realizar la conexión a través de Aragorn. Por
ejemplo, para el caso de Mozilla (navegador en el cual se probó este programa),
los pasos son los siguientes. Menú Edit ->
Preferences -> Advanced -> Proxies. En
el campo HTTP proxies escribir la dirección de
aragorn (200.1.17.195) y en "Port" el puerto que se usará para
la conexión (ej. 2345).Este puerto debe ser el mismo que se especifica en el
parámetro <puerto_local> al invocar a ppw.
La idea de esta tarea es pesar una
página Web a la vez, por lo que su uso se debe restringir a abrir una página,
esperar que esta sea cargada completamente, y ahí verificar las estadísticas
devueltas por ppw. Después de esto se
puede abrir una página Web distinta y repetir el proceso anterior. El abrir múltiples Browsers con páginas
distintas en forma simultánea arrojará resultados inciertos. Este aspecto no es cubierto por los requerimientos
de la tarea.