<body>

Sitios web relacionados: PingBlog | Fotos

lunes, junio 30, 2008

Trucos UNIX: Depurando protocolos a mano: ¿Qué usar?

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:, , , ,
Technorati:, , , ,
To2blogs:, , , ,
Del.icio.us:, , , ,

Etiquetas: , , , ,

viernes, junio 06, 2008

Aprendiendo a programar Sockets con Java: TCP/IP Sockets in Java

El libro "TCP/IP Sockets in Java Practical Guide For Programmers", de Menneth L. Calvert y Michael J. Donahoo es compacto, con buenos ejemplos y sobre todo va al grano. Comparado con otros libros que solamente se pasean por al API de Java (y se enfocan en HTTP y RMI) este se va por lo básico y bien.

Si tiene el dinero, de verdad que vale tenerlo en la biblioteca de su casa. Muy útil.

Buscar en otros sitios:

Blogalaxia:, , ,
Technorati:, , ,
To2blogs:, , ,
Del.icio.us:, , ,

Etiquetas: , , ,

sábado, mayo 24, 2008

Extendiendo el alcance de Sentilla: Escribiendo un cliente y servidor TCP/IP

Bueno, juego un poquito más con Sentilla. Como ustedes recordaran de un articulo anterior, yo ya tenia un pequeño hola mundo corriendo en la máquina que tiene el Gateway de Sentilla y los sensores, el principal problema es que el "Gateway" (la parte que va conectada a al puerto USB) solamente funciona bajo Windows (prometen que Linux y OSX saldran pronto), así que me senté a escribir un cliente y servidor con UDP.

El articulo completo está en el blog de la Cara Oscura del Desarollo de Software.

Espero les guste, ya les traeré otros juguetes en próximos artículos.

Buscar en otros sitios:

Blogalaxia:, , , , ,
Technorati:, , , , ,
To2blogs:, , , , ,
Del.icio.us:, , , , ,

Etiquetas: , , , , ,