Hora de ver una peli, luces! / by Sebastian Morales

Extracto
Usando wireshark para monitorear trafico y apagar las luces del cuarto cada vez que visito Netflix. Tercera tarea par la clase de Understanding Networks en ITP, dirigida por Tom Igoe. 

WAIT... WHAT'S WITH THE SPANISH?

En esta ocasión aprendimos un poco sobre herramientas de diagnostico como wireshark y hervibore. Ambas son herramientas que nos permiten observar paquetes y el flujo en nuestra red. 

Wire shark también tiene una interface desde terminal por lo que puede ser programado para interactuar con otros programas. En este caso, lo conecté de tal manera que cada vez que visito el sitio de netflix, las luces de mi cuarto se apagan. 

luces.gif

Pero no nos adelantemos...

Que es Wireshark?
Wireshark es un analizador de protocolos, no solamente internet aunque en este caso para eso lo vamos a usar. El programa es open source y también tiene una versión (tshark) para operar desde la terminal.

 https://es.wikipedia.org/wiki/Modelo_OSI

https://es.wikipedia.org/wiki/Modelo_OSI

Se cierta forma Wireshark puede interpretar y desenvolver distintas capas del modelo OSI (modelo de interconexión de sistemas abiertos).

No tanto al grado de poder leer los 0 y 1 en los cables, sino empezando por la capa de Datos, nombrando las direcciones MAC y switches. Después podemos entrar en la capa de la red, ver las direcciones IP e información acerca de la información que vamos a pasar. Después viene la capa de transporte; puertos y protocolos, TCP, UDP, DNS?  Sigue el nivel de sesión, aquí podemos ver info sobre nuestra connexion con otra computadora (servidor). Por fin llegamos al nivel presentación, esta capa se encarga de que no importa como la información fue generada o transmitida, siga teniendo significado para quien la recibe (aquí ya estamos hablando del contenido de la información), ni siquiera estamos hablando de lenguajes de programación, más bien tipos de info (image, audio, ascii o Unicode?). Por fin llegamos al nivel de la aplicación, aquí nos enfocamos hacia como la información se relaciona con la aplicación que estamos usando, en este caso sería nuestro navegador y la información probablemente esta en un formato de javascript y html.

Ok, hora de aterrizar esto un poco. Vamos a ver un ejemplo de como usar wireshark. 
Wireshark te permite analizar tu conexión usando el modo promiscuo, lo que significa que te permite analizar todo el trafico que circula por tu red local. Como te puedes imaginar esto puede representar un gran riesgo para todos, por lo que ciertas redes estan configuradas de tal manera que no soportan este modo de promiscuidad. Las redes de NYU están configuradas de dicha forma, por lo que desde la escuela solo podremos observar nuestro propio tráfico. 

Wireshark te permite observar mucho tipos distintos de protocolos a la vez, a veces esto se puede volver demasiado por lo que también podemos usar filtros para solo ver ciertos tipos de paquetes. En la siguiente imagen tengo el siguiente filtro: "http.response.code" esto solo va a mostrar las interacciones que respondieron con http. Podría combinar filtros, por ej: "http.response.code && ip.dst == 172.16.250.205" para ver solamente el trafico http dirigido a mi. En este caso, como las redes de NYU no permiten el modo promiscuo, se de entrada que el trafico de respuesta es solo para mi. Pero te puedes imaginar como esto puede ser útil si estas administrando multiples dispositivos.  

 WIreshark http response sample

WIreshark http response sample

Antes de que me salte a lo siguiente quiero mencionar dos cosas:
1. En la parte inferior derecha, podemos ver que solo estamos observando el 0.0% de el trafico total, o 254 de 6,461,980 de los paquetes registrados, esto es por que muy poco trafico es una respuesta en http.
2. Hablando de http, aqui podemos ver por que no es la mejor idea. Si nos fijamos en la linea subrayada, donde dice "Line-based text data:" podemos leer el texto css tal cual. En este caso es solamente info del estilo, pero podría ser info más importante, incluyendo passwords y usuarios. Esto es lo que vería cualquier extraño analizando el trafico de la red (de no ser por que la red de NYU no esta configurada de esa manera). En otras palabras, usa https de ser posible.

Ok, ok, pero como se conecta esto con las luces?
El primer paso es deshacernos de wireshark version gráfica para poder fácilmente conectarlo con otros programas y tener un poco mas de control. Wireshark tiene una versión de terminal llamada tshark. La sintaxis en tshark es un poco distinta, en mi opinion es mas sencilla, por ejemplo: 

Screenshot 2017-10-16 22.24.41.png

"-i" quiere decir que vamos a escuchar en una interface, "en0" es la interface que queremos escuchar. ' -f" ' quiere decir que estamos apunto de nombrar los filtros de captura que queremos usar. Aquí podemos separar los filtros por lineas, en el caso de la derecha, ejecutando en siguiente comando va a listar todos los paquetes entre mi compu (172.16...) y facebook.com.

 

Screenshot 2017-10-16 22.30.40.png

Si quieres usar condicionales dobles puedes hacerlo nombrándolos en la misma linea, por ejemplo: "host www.facebook.com or www.adorevolution.com". Esto va a escuchar a todo trafico entre mi compu (172.16...) y fb, o entre mi compu y adorevolution.com 

 

Ok, ok, pero como se conecta esto con las luces??
Hasta ahora sabemos como filtrar un poco el tráfico para solo ver lo que queremos. En realidad en el caso de las luces no estamos tan interesados en el contenido del trafico sino en el hecho de que existe cierto tráfico. En pocas palabras, si detectamos tráfico podemos inmediatamente detener el program y encender las luces. Para detener el programa podemos usar la bandera (flag??) "-c". Tenemos que acompañarla con el número de paquetes que queremos escuchar antes de terminar. En mi caso decidí usar "-c 10". 

Screenshot 2017-10-16 22.58.27.png

Ok, ok, pero como se conecta esto con las luces??
Antes de seguir, debería confesarte de que no voy a entrar mucho en detalle. Quizás uno de estos días escriba una guía mas a detalle.

Mientras tanto, mis luces están conectadas a unos switches "inteligentes". Normalmente, los switches se controlan con el control remoto. Pero con una arduino y un radio fácilmente se puede leer y replicar las señales del control. Si conectamos esto a una raspberry Pi zero, tenemos una casa inteligente! 

En la rpi0 hice un servidor local, si visitas ciertas URLs (por ejemplo: 192.168.1.10:8000/luzPrendida) el arduino prende o apaga las luces. De esta forma tambien se puede conectar a Siri o a Google Home/okgoogle. 

Ok, ok, pero como se conectan las luces con wireshark?
Hasta ahora, tenemos un programa de wireshark que ejecuta desde la terminal, monitorea nuestro trafico y cuando visitamos cierta pagina web se cierra de manera automática. También tenemos un servidor que cuando recibe ciertas solicitudes prende o apaga las luces. 

shellscript.png

Para conectar los dos procesos simplemente escribí un shell script. Si te fijas, también use el filtro de mac address, esto para prevenir que mi roommate apague mis luces cada vez que vaya a netflix. 

 

Me salté un par de pasos, sobre todo al final, pero creo que si me meto en los detalles esto ya no tendría mucho que ver con wireshark o con la tarea en general.

Y la verdad, tengo ganas de ver una película...