jueves, 15 de septiembre de 2011

Análisis de una transferencia HTTP

Ahora que se tiene algo de familiaridad con el modo en que opera el protocolo HTTP es tiempo de capturar una transferencia completa con el fin de analizarla.

El procedimiento a seguir es similar al usado en el experimento anterior, se iniciara la captura de paquetes en Wireshark, tras lo cual se accederá a una pagina web por medio del navegadory se esperara a que cargue por completo, una vez que eso ocurra se detendrá la captura de paquetes.

Para este ejemplo el sitio que se visitara es el del Web Consortium, esto es debido a la sencillez del sitio y a que cumple con la totalidad del estándar HTML, lo que hará mas clara la transferencia, la dirección del sitio es http://www.w3.org/ .

Una vez que halla realizado la captura obtendrá una pantalla similar a la figura 1.

Figura 1: Paquetes capturados.
Ahora necesitamos la dirección IP del sitio, para obtenerla hay que filtrar los paquetes DNS, para esto escriba "dns" en el campo de filtros y aplique, esto le mostrara los paquetes DNS, examine el contenido de los paquetes "Standart Querry Response" hasta encontrar la dirección IP del sitio www.w3.org, como muestran las figuras 2 y 3.
Figura2: Paquetes DNS.

Figura 3: Paquete de respuesta a www.w3.org.
Como se puede observar la dirección IP de www.w3.org es 128.30.52.37, con ese dato ya es posible filtrar los paquetes enviados a y desde esa dirección, para hacer esto basta aplicar el filtro
"ip.adrr == 128.30.52.37" en el campo de filtros, tras hacer esto la pantalla solo mostrara los paquetes que se enviaron a y desde esa dirección IP, consiguiendo una pantalla similar a la figura 4.
Figura 4: Paquetes enviados a y desde 128.30.52.37
Puede observarse que la columna "Protocol" indica que protocolo sigue un paquete en particular, y que hay paquetes que siguen varios protocolos enviados a y desde la dirección de w3.org, como solo deseamos examinar los paquetes de un protocolo en particular haremos uso de una característica de los filtros de Wireshark, el poder usar conectores lógicos.

Estos se comportan de manera similar a los conectores en lenguajes de programación permitiendo expresar varias condiciones que deben de cumplirse, para este ejemplo en particular utilizaremos el conector AND, el cual se indica escribiendo "&&" en el campo de filtros.

El filtro que aplicaremos deberá mostrar los paquetes enviados y recibidos desde 128.30.52.37 y que sean del protocolo HTTP, esto se expresa de la siguiente manera "ip.adrr == 128.30.52.37 && http", basta con escribir esa expresión en el campo de filtro y aplicar para conseguir el resultado, como muestra la figura 5.

Figura 5: Paquetes HTTP enviados/recibidos desde 128.30.52.37.

Ahora se puede observar como el cliente solicito cada elemento de la pagina con la solicitud GET y el servidor respondió con el código 200 OK, como se detallo en el post anterior.

Los datos que pueden obtenerse con este análisis son diversos, analizando el contenido de las solicitudes GET puede saberse con precisión que elementos de una pagina y que versión de estos fueron solicitados,  de modo que puede detectarse con facilidad algún desperfecto en el código HTML.

Simultáneamente el analizar las respuestas del servidor permite identificar con precisión cualquier error que halla ocurrido y examinando los tiempos puede descubrirse algún cuello de botella en el trafico del servidor.