sábado, 7 de enero de 2012

Tutorial: guardar un stream http con Wireshark

Para todos aquellos que querais obtener un stream de datos con Wireshark, este tutorial espero que os ayude:

A mi personalmente me resulta útil para depurar recursos generados dinámicamente en mis páginas: podemos guardarlos a disco y ver que está mal para no andar a dar palos de ciego, si bien variando ligeramente los pasos podemos estudiar un sinfin de protocolos por si teneis problemas implementándolos.

El proceso es:

1) Arrancamos Wireshark con los parámetros de captura que nos interesan: yo optaría por unos relativamente laxos para que capturemos todos los datos necesarios. Es importante arrancar la captura antes de hacer la petición y pararla después de que esta halla terminado. Cuantos menos datos estemos transfiriendo o recibiendo de la red, mejor, así que es mejor reducir la actividad de red de nuestro equipo, y quitar la opción "promiscua".

2) Buscamos la petición, para ello lo ideal es filtrar con las cadenas:

http.request.method == "GET"

o bien

http.request.method == "POST"

3) Una vez que hemos localizado la petición pulsamos botón derecho y luego escogemos "Follow TCP Stream". Esto abrirá una nueva ventana.

4) Por último escogemos en lugar de entire conversation, sólo la parte de la recepción (habitualmente será la que más bytes tenga).

5) Escogemos RAW y pulsamos Save As

6) Si queremos guardar otro stream podemos pulsar Filter Out This Stream, que nos ayudará a encontrar otros, repitiendo los pasos desde el 2 / 3 en adelante, si no vamos a procesar el fichero que hemos guardado.

6) Abrimos el fichero con un editor que soporte ficheros binarios, por ejemplo con Ultraedit.

7) Ahora ya sólo queda comprender un poco el protocolo HTTP: si la respuesta es única (propiedad Connection a close) basta con que busquemos el final de la cabecera de la respuesta HTTP, o sea \n\r\n\r, esto es 0x0D 0x0A 0x0D 0x0A y borramos toda la cabecera, incluyendo estos 4 carácteres, guardamos y ya tenemos el fichero en la mayoría de las ocasiones.

8) En caso contrario debemos jugar con los content-length, aunque independientemente del caso, es siempre bueno anotarlos en todo caso, ya que podría darse el caso de haber datos extra por algún lado. Para ello buscamos algo tal que Content-Length: 1799788 por ejemplo.

Eso es todo. Normalmente que conste que los datos sobrantes al final de un fichero suelen no molestar, pero si tenemos problemas, siempre podemos intentar pegar el tijeretazo.

No hay comentarios: