Hace ya un mes comencé a trabajar en un proyecto nuevo para la compañía en la cual trabajo, el cual consiste en crear una aplicación en donde los analistas de mercado reciben transacciones de los corredores de bolsa. Dado que el número de nombres que la compañía maneja en esta categoría ha crecido de manera substancial, hay que automatizar el proceso.
La bolsa de valores con la cual hacemos las transacciones tiene una especificación del protocolo, escrita originalmente en C, usando “Structs” y sockets con UDP/TCP. La aplicación requiere (por razones demasiados numerosas para explicar aquí) que el código sea escrito en Java.
¿Todo bien verdad? Bueno, lo más difícil fué implementar todo el protocolo (pese a que nosotros requeríamos solamente una pequeña parte). Además como ustedes se imaginan, los bancos de inversiones están fortificados detrás de varios niveles de protección como “Firewalls”, “IDS” y demás y la conectividad entre nuestro entorno de desarrollo y en nuestro caso la bolsa de valores no fué bien configurada.
Para rematar, no tenia manera de usar tcpdump en la máquina en donde corria el servidor (convertirse en root usando SUDO es un proceso laaargo y burocrático) así que mis opciones eran esperar ayuda del grupo de redes, o mientras tanto depurar yo mi protocolo.
Las especificaciones del protocolo requieren que inicialmente nos conectemos usando UDP, para luego usar TCP, lo cual hace inefectivo el truco de conectarse al puerto de la máquina usando telnet (sólo trabaja con TCP el cual es orientado a conexión) . Otro detalle es que el saludo inicial es una conexión pasiva (la bolsa de valores enviaba un broadcast cada 30 segundos).
¿Qué hacer?
Bueno, Linux de nuevo salva el día con su ejercito de herramientas gratuitas. En eso caso utilicé NetCat (nc) y dado que el protocolo era ASCII pude ver con claridad que al menos ellos estaban enviando sus paquetes y que nosotros estabamos filtrando información. En mi caso escribí algo como esto:
auyan:~ josevnz$ nc -n -v -v -v -u -p 12345 -s 127.0.0.1 -l
listening on [127.0.0.1] 12345 …
¡Super fácil!. Con esta información me ahorré tiempo y resolvimos el problema en cuestión de minutos en vez de horas…
Así que ya sabe, la próxima vez que necesite enviar o recibir paquetes arbitrarios en TCP o UDP dele un vistazo a NetCat 🙂
Buscar en otros sitios:
Blogalaxia:netcat, linux, udp, tcp/ip, protocol
Technorati:netcat, linux, udp, tcp/ip, protocol
To2blogs:netcat, linux, udp, tcp/ip, protocol
Del.icio.us:netcat, linux, udp, tcp/ip, protocol