# Documentación Tarea nº2

## Programación de Sistemas - ELO 330

Por:
- Luis Fuentes Weber 2503026-5

## Introducción

Programa que crea un gráfico con el número de todas las conexiones TCP establecidas en la máquina versus tiempo en segundos, el que muestra la actividad del último minuto, la cual es refrescada cada 2 segundos. Cuando el número de conexiones establecidas supera el umbral dado, el monitor envía un correo electrónico usando los datos de la cuenta de correo dados en la línea de comando, donde en el subject señala "Monitor detectó X conexiones establecidas" y en el cuerpo del correo indica "El umbral configurado es de Y conexiones establecidas. Lo saluda cordialmente, El Monitor"

##

## Algoritmo y/o Estrategia usada

La estrategia usada para cumplir con los requisitos del programa fue el uso de hebras o hilos para cada una de las funciones de este, estas son:

- Hebra principal: Crea una hebra plot y mediante un correcto seteo de señal de alarma, realiza la lectura del número de conexiones establecidas cada 2 segundos usando una pipa simple, la cual ejecuta netstat -s. Posteriormente actualiza tanto el tiempo como los valores del arreglo de número de conexiones usados para el refresco del grafico, y se le indica a la hebra plot que los valores están listos para ser graficados. Si el número de conexiones leído supera el estipulado en los argumentos del programa, además crea una hebra mail, entregándole como argumento una estructura con los datos requeridos para el envió del correo.

Debido a la imposibilidad de ejecutar la tarea en aragorn (por problemas con openssl), el lenguaje del sistema operativo, requerido para leer el retorno del comando netstat, se dejó en ingles. Para cambiarlo a español hay que comentar la línea 75 y des comentar la 74 del archivo mc_tcp.c

- Hebra plot: Hebra encargada refrescar el grafico cada 2 segundos. Para esto se crea una pipa y un proceso hijo, y luego la pipa es redirigida a la entrada estándar del hijo, el que posteriormente ejecuta el programa requerido para la creación del grafico, ya sea matlab u octave. Debido a que se requiere el refresco de un grafico y que este sea siempre visible, esta hebra corre en paralelo a la hebra principal desde el comienzo, esperando una señal en una variable de conexión, la cual es dada por la hebra principal.

Por defecto el programa usado para el grafico es matlab, pero si se desea utilizar octave basta con des comentar la línea 35 y comentar la 36 en el archivo plot.c o viceversa, si se desea pasar de octave a matlab.

- Hebra mail: Hebra encargada del envío de un correo electrónico. De forma parecida a la hebra plot, crea 2 pipas y un hijo, en el que la entrada y salida estándar son redirigidas hacia las pipas para luego ejecutar openssl con los argumentos necesarios para establecer una conexión tsl. Luego desde el proceso padre se envían los comandos hacia openssl indicando la cuenta de destino, los datos del remitente y el cuerpo del correo electrónico.

Debido a que cada vez que se lee un número de conexiones mayor que el umbral se crea una hebra mail, pueden haber varias de estas en paralelo si el tiempo requerido para enviar el email es demasiado largo. Esta fue la principal razón de optar por el uso de hebras, ya que en conexiones lentas o congestionadas el tiempo de envío es mayor a 2 segundos, por lo que el programa no estaría listo para realizar la próxima lectura de numero de conexiones, pudiendo obtener un valor diferente al deseado cuando esta se realize.

##

## Ejecución y compilación del programa

## Para la compilación del programa se creó un makefile, por lo que basta con escribir make en consola para que los archivos necesarios sean compilados. Para la ejecución del programa la sintaxis requerida es la siguente:

## mc_tcp [SMTP SERVER] [EMAIL] [AUTH IN BASE64] [CONNECTION THRESHOLD]

## Donde:

## - [SMTP SERVER]: Servidor smtp desde donde se quiere enviar el correo electrónico. En este argumento se espera tanto la dirección del servidor como el puerto a utilizar en el siguiente formato smtp.servidor.com:puerto, por ejemplo stmp.gmail.com:587.

## - [EMAIL]: Email al que se desea que lleguen los mensajes de alerta.

## - [AUTH IN BASE64]: Autentificación del remitente codificada en base 64, debe contener el correo electrónico y la contraseña.

## - [CONNECTION THRESHOLD]: Numero entero que es el umbral de conexiones para el envío de los mensajes de alerta. Si las conexiones leídas en un periodo son mayores al número dado, se envía un correo electronico.

## Conclusiones

## Se logro manejar la creación de procesos, comunicándolos a través de de pipas en sus 2 formas, tanto simples, con popen, como en su forma más compleja es decir creando las pipas, creando el hijo, conectando las pipas a la entrada y/o salida según corresponda y, utilizando la función exec, ejecutar un programa externo el cual era controlado por este programa. También se consiguió integrar 2 de los ejemplos vistos en clases: el envío de correo electrónico usando openssl para conectarse al servidor smtp de gmail y la posibilidad de automatizar gráficos usando algún programa que se pueda controlar por consola, en este caso matlab u octave.

## Por último, se utilizo exitosamente contenidos que estaban por sobre los objetivos requeridos para la tarea, como el uso de hebras y métodos de sincronización entre ellas.

##