It's Gotta Be the Ugliest Hack I Have Ever Done
Categories: GNU/Linux, Programacion, Hacks, Ubuntu[ debido a algun NDA, no puedo revelar ciertos detalles, pero contare los importantes ]
Intentando mejorar ciertos aspectos de [ censura ], se me ocurrio implementar un sistema de alarmas rapido, eficaz, economico y audaz. Ahora, el asunto es que jugar con protocolos de comunicacion no es uno de mis fuertes pero si lo es el [ censura ] y tambien [ censura ]. Despues claro de intentar hacer funcionar rancios programas hechos en C o Python.

Snowy day here at the end of the world
De pasadita, encontre un bug que afecta a finch y pidgin, pero los contare otro dia. Ya esta el bug en Launchpad :B
A lo que ibamos.
Empece primero usando XMPP, ya que [ censura ] y ya estaba corriendo, asi que fue mi primera eleccion. Debido a que el servidor estaba corriendo con [ censura ] y no dejaba conectarse por otra cosa que no fuera pidgin...
Despues de reintentos varios donde tuve cosas como hostMistmatch y cepillandome un par de bibliotecas en Python decidi abortar mision. Aunque claro, instalando un XMPP server local, incluso con negociacion con TLS, andaba de peluches.

Some friends call this a quick action photo
Recorde que hace tiempo me mostraron que Pidgin era compatible con Bonjour. Bonjour (antiguamente Zeroconf) permite mostrar servicios a traves de la red usando (inserte su magia favorita aqui) y los programas que sean capaces de entender estos mensajes, pues los interpretan.
Veamos un ejemplito, sin censura, claro.
Resolved service: fullname = boba\032\09100\05821\0589b\0586a\058a6\058a6\093._workstation._tcp.local. hosttarget = boba.local. port = 9 Service added; resolving Resolved service: fullname = lacantina\032\09100\05821\0589b\05872\058ac\05828\093._workstation._tcp.local. hosttarget = lacantina.local. port = 9
Que carajos es esto? Pues bien, un mensaje que indica solamente la presencia de una workstation en la red local. Es todo.
Ah, lo interesante. Es manejado todo por debajo del capo usando Avahi. Si no saben que es, apliquense un google. Y 1000 internets menos.
Todos los que son hosttarget son las maquinas que mDns resuelve de forma economica y audaz. Si quieren mirar la forma de resolucion de estos nombres...
jci@socrates:~/Build/pybonjour-1.1.1/examples$ more /etc/nsswitch.conf # /etc/nsswitch.conf # # Example configuration of GNU Name Service Switch functionality. # If you have the `glibc-doc-reference' and `info' packages installed, try: # `info libc "Name Service Switch"' for information about this file. passwd: compat group: compat shadow: compat hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4 # <- LOOKIE HERE! networks: files protocols: db files services: db files ethers: db files rpc: db files netgroup: nis
Cierto. Primero mira /etc/hosts, de ahi usa mDns para la resolucion de hosts. Si no lo encuentra, usa una version mas completa. Y de ahi mDns en IPV4. Nota : este detalle de IPV4 es super importante en un problema que tuve haciendo pruebas.
Ahora miremos lo que necesitamos : Bonjour. Afortunadamente, este servicio tambien se registra en la red con el nombre de "presence". Y como Bonjour tambien identifica el tipo de conexion (tcp, en este caso), lo unico que nos queda es preguntar en la red local quienes tienen corriendo el servicio presence.
Y voila!
jci@socrates:~/Build/pybonjour-1.1.1/examples$ python browse_and_resolve.py _presence._tcp Service added; resolving Resolved service: fullname = jci\064socrates._presence._tcp.local. hosttarget = socrates.local. port = 5298 Service added; resolving Resolved service: fullname = user1\064lacantina._presence._tcp.local. hosttarget = lacantina.local. port = 5298 Service added; resolving Resolved service: fullname = user2\064muldernix._presence._tcp.local. hosttarget = asterix.local. port = 5298
Asi que lo que me queda : conectarme directo a cada uno de esos "hosts" (nota : los .local son agregados de la resolucion de mDns) y lanzarles un mensaje.

Weird collection of weird toys
Spamming time!
#!/bin/bash
for i in `cat listahosts.txt`
do
echo '<message type="chat"><body>'Feed me a stray cat'</body></message> ^] quit' \
| telnet $i 5298
done
Les dije que el hack era algo feo.
Por supuesto que el mensaje de ejemplo de aca es bastante burdo. El real mensaje que debo enviar es [ censura ].
Si, yo tambien odio los NDA. Pero a fin de cuentas, lo importante no esta censurado. [ censura ]. Creo.

That's not fog. It's a freaking cloud
Ah, y el problema que tuve con IPV4. Pues bien, al usar Bonjour con Pidgin, si esta habilitado IPV6, va a intentar resolver...con errores. Deshabilitar IPV6 con
# echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6
Dije que esto se veia feo.










