## Documentación Tarea Nº3
Programación de Sistemas

Profesor: Agustín González V. Ayudante: Alejandro Alviña | Autores: Juan Pablo Lorca. Diego del Valle.

Nombre: mtb: Monitor de tráfico para Browser. Sintaxis: mtb <puerto_local> <IP_proxy> <puerto_proxy> Descripción:
La tarea de su servidor es efectuar una conexión al proxy por cada conexión que a él le soliciten. Éste traspasa los paquetes TCP de un lado a otro sin modificarlos, registrando así el número de conexiones y la tasa de bytes transferidos tanto de subida como de bajada. La salida de este servidor entrega tres gráficos mostrando el número de conexiones, la tasa de tráfico de subida y la tasa del tráfico de bajada. Los gráficos son móviles en el sentido que muestran la situación de los últimos dos minutos de actividad.

Problema Panteado .

Monitor de Tráfico Web .

Diagrama de Flujo .
Estructura de la solución ideada : La solución a esta tarea se compone de un cliente browser (mozilla) encargado de conectarse a un programa servidor, corriendo en una dirección ip y puerto especificado como argumento y solicitar la pagina web deseada por el usuario y un programa servidor (mtb), encargado de monitorear el tráfico web pedido por el programa cliente a un servidor intermediador proxy ubicado en una máquina de el profesor Agustín González en la ip y puerto también entregados como argumento al programa.

Programa servidor (mtb) :

Sintaxis: ppw <puerto_local> <IP_proxy> <puerto_proxy>

Principalmente, este programa trabaja como un servidor de páginas web, para el cliente al que espera por conexiones que un cliente efectúe a el, a un puerto definido por el administrador que ejecuta "mtb", este puerto es el "Puerto_Local" definido en la línea de comandos. Este servidor dentro de una función "alarm_cb", crea un socket para la comunicación con los posibles clientes (socket "sc") y guarda la información concerniente a la dirección y puertos en donde corre el servidor (en estructura "server") y donde corre el proxy (estructura "proxy"), al llegar un requerimiento de un cliente por el puerto especificado, este realiza la conexión con el cliente y guarda el descriptor de archivo de esa conexión en el arreglo "ClientList", para luego crear un nuevo socket para la comunicación con el proxy (socket "sp") para efectuar los requerimientos del cliente al proxy, estas conexiones se guardan en el arreglo "ProxyList". Una vez que las conexiones están establecidas (conexión servidor-cleinte y conexión servidor-proxy), se procede a realizar el inicio del tráfico entre el cliente y el proxy, para obtener la página requerida por el cliente y realizar las mediciones de bytes tranferidos de bajada y de subida, todo esto se realiza en la función "SocketConnector", ya que se le ingresan como argumentos los descriptores de conexión guardados en "ClientList" y "ProxyList" ,y este dependiendo si el tráfico es de bajada o de subida, lee los requerimientos del cliente y los manda al proxy o lee la información del proxy requerida y la manda al cliente, cerrando las conexiones al terminar la transferencia. Luego el servidor muestra por pantalla, valores de conexión y tasa de transferencia de conexiones. Finalmente se implementa la pipa para monitorear el tráfico y mostrarlo en pantalla graficamente por el programa scilab, para esto se implementan arreglos de estructuras para los bytes recibidos, transmitidos y de conexiones y luego se le pasan a un descriptor de archivo "sd". Para aquello se crea un una pipa y un hijo al inicio del main para luego emigrar del programa principal al programa scilab (con execl) en donde se le ingresan los datos obtenidos cada dos minutos de actividad. los datos fueron adquiridos por la funcion antes mencionada (alarm_cb) cada un segundo con signal (SIGALRM, alarm_cb) y se implementó también signal (SIGINT, interrupt), en donde se emigra a la función interrupt para cerrar el programa hijo scilab.

Los argumentos que van en la línea de comando son los siguientes:

Puerto_local: numero del puerto elegido por el usuario para correr el programa servidor; debe ser un puerto no privilegiado (numero mayor 1024), este mismo úumero de puerto debe ser especificado en el programa cliente (mozilla) para que este sepa en que puerto esta funcionando el servidor (mtb)

IP_proxy: dirección IP de la maquina servidor intermediario (proxy) al que se conectara el programa servidor (ppw) solicitándole la pagina web pedida por el cliente (mozilla); en nuestro caso la dirección es 200.1.17.17 (dirección de la maquina proxy del profesor Agustín González).

Puerto_proxy: numero del puerto en el cual esta corriendo el servidor proxy (y al cual deberá conectarse el programa servidor) de la maquina a la que se conecta el programa servidor (mtb) para solicitar las paginas deseadas por el cliente (mozilla); en nuestro caso este número es 8118, que es el numero de puerto en el cual funciona el servidor proxy de la maquina del profesor Agustín González.

Consideraciones:

Es importante especificar el directorio actual ./ para la ejecución del programa si este no se encuentra en el PATH.

Se debe tener en cuenta que primero se debe tener un servidor X instalado en el sistema operativo que se trabajando. En el archivo Readme.txt se encuentra detallada la forma de instalarlo en diferentes plataformas OS.

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. 8568).Este puerto debe ser el mismo que se especifica en el parámetro <puerto_local> al invocar a mtb.

La idea de esta tarea es motirorear el tráfico Web, por lo que inicialmente se debe esperar a tomar muestras de los últimos 2 minutos de actividady luego se desplegará el gráfico del monitor, luego este se refrescará cada dos minutos por mtb, el cual también despliega por pantalla el tráfico pedido por el enunciado de la tarea.

Problemas enfrentados:

El primer problema que nos encontramos fue el de limpiar la pantalla del grafico de monitoreo para actualizar con los dos últimos mnutos de actividad. Luego de leer el manual de scilab encontramos la opcion xclear(), con lo que se resolvió el problema.
Como último y gran problema que no pudimos resolver, fue el que al ingresar los datos al scilab y poder rellenar la matriz con con los datos obtenidos, al llegar a los 10 datos antes de terminar el llenado el programa se caía. Se trato de diversas formas el problema y no se encontro ninguna solución. Solo se pudo identificar el problema de llenado, problema exlusivamente de resticción por el programa scilab.

Se optó por graficar los últimos 110 segundos con actualización de 2 minutos.

©2006. Tarea efectuada por Juan Pablo Lorca y Diego del Valle.