Práctica 2: Protocolo HTTP Redes de Ordenadores
PRÁCTICA 2: PROTOCOLO HTTP
Traducido de Computer Networking: A Topdown Approach, 5th ed. v2.0 © 2009 J.F. Kurose, K.W. Ross.
En la práctica anterior ya nos hemos familiarizado con el sniffer Wireshark, así que ya podemos comenzar a
utilizarlo para investigar los protocolos que vamos estudiando durante el curso. En esta segunda práctica
veremos el protocolo HTTP, principalmente: la interacción básica GET/respuesta, los formatos de los mensajes
HTTP, la recuperación de archivos HTML de gran tamaño, la recuperación de archivos HTML con objetos
embebidos, y la autenticación y la seguridad de HTTP.
LA INTERACCIÓN BÁSICA HTTP GET/RESPUESTA
Comencemos a investigar el protocolo HTTP descargando un archivo HTML muy simple (corto y sin objetos
embebidos).
Nosotros en el laboratorio, como siempre, emplearemos las trazas ya
capturadas y almacenadas que se proporcionan en
[Link] Para este
apartado se utilizará el fichero http-ethereal-trace-1, que podrás abrir desde
Wireshark.
Para capturar la traza fuera del laboratorio, sigue los siguientes pasos:
1. Inicia tu navegador web.
2. Inicia el Wireshark y comienza a capturar paquetes.
3. En el navegador introduce la página web: [Link]
[Link].
4. Detén la captura de paquetes del Wireshark.
5. Filtra los paquetes para mostrar únicamente los de protocolo http.
La interfaz de Wireshark debe mostrar algo similar a lo que aparece en la Figura 1, con los dos mensajes HTTP:
el mensaje GET (desde tu navegador al servidor web) y el mensaje de respuesta (OK) desde el servidor web a tu
navegador. En la figura se encuentra seleccionado el mensaje GET, por lo que en la ventana de contenidos del
paquete se muestran detalles de este mensaje. Recuerda que el mensaje HTTP ha sido transportado dentro de
un segmento TCP, a su vez dentro de un datagrama IP y este dentro de una trama Ethernet, por lo que
Wireshark muestra también la información de los paquetes Trama, Ethernet, IP y TCP. Como nos vamos a
centrar en el protocolo HTTP expandimos esta sección para poder ver su contenido y mantenemos minimizadas
las demás.
Nota: Debes ignorar cualquier HTTP GET y respuesta que tenga que ver con [Link], ya que se trata de una
consulta del navegador al servidor web para saber si tiene este fichero con un icono para mostrar al lado de la
URL. A partir de ahora ignoraremos siempre estas peticiones.
Responde a las siguientes preguntas, indicando dónde has encontrado la información que se pide. Recuerda
que puedes exportar los paquetes a ficheros de texto para poder utilizarlos en tus respuestas a las prácticas.
-1-
Práctica 2: Protocolo HTTP Redes de Ordenadores
Figura 1. Interfaz de Wireshark tras una interacción básica HTTP
1. ¿Qué versión del protocolo HTTP utiliza tu navegador, la 1.0 o la 1.1? ¿Y qué versión de HTTP está
ejecutando el servidor web?
2. ¿Qué lenguajes (si hay) le indica tu navegador al servidor como que acepta?
3. ¿Cuál es la dirección IP de tu ordenador? ¿y del servidor web?
4. ¿Cuál es el código de estado que devuelve el servidor a tu navegador?
5. ¿Cuándo se modificó por última vez en el servidor el fichero HTML que estás recuperando?
6. ¿Cuántos bytes de contenido han sido devueltos a tu navegador?
7. Si inspeccionas los datos en bruto en la ventana de contenido del paquete, ¿ves alguna cabecera
dentro de los datos que no se muestre en la ventana de listado de paquetes? Si es así, ¿cuál?
LA INTERACCIÓN HTTP GET CONDICIONAL/RESPUESTA
Recuerda que la mayoría de navegadores realizan un almacenamiento en caché de objetos, por lo que ejecutan
un GET condicional cuando recuperan un objeto HTTP.
-2-
Práctica 2: Protocolo HTTP Redes de Ordenadores
Para este apartado se utilizará el fichero http-ethereal-trace-2, que podrás abrir
desde Wireshark.
Para capturar la traza fuera del laboratorio, sigue los siguientes pasos:
1. Inicia tu navegador web y asegúrate de vaciar su caché.
2. Inicia Wireshark.
3. Introduce la siguiente URL en tu navegador: [Link]
[Link] que se trata de un fichero HTML muy simple de 5 líneas.
4. Vuelve a introducir la misma URL en tu navegador (o simplemente dale al botón de Actualizar de tu
navegador).
5. Detén la captura de paquetes y filtra los resultados por “http” para ver únicamente los mensajes HTTP
en la ventana de listado de paquetes.
Responde a las siguientes preguntas:
8. Inspecciona los contenidos de la primera solicitud HTTP GET desde tu navegador al servidor. ¿Ves una
línea “IF-MODIFIED-SINCE” en el HTTP GET?
9. Inspecciona los contenidos de la respuesta del servidor. ¿Realmente devolvió el servidor los
contenidos del fichero? ¿Cómo puedes saberlo?
10. Ahora inspecciona los contenidos de la segunda solicitud HTTP GET desde tu navegador al servidor.
¿Ves una línea “IF-MODIFIED-SINCE” en el HTTP GET? Si es así, ¿qué información incluye la cabecera
“IF-MODIFIED-SINCE:”?
11. ¿Cuál es el código de estado HTTP y la frase que devuelve el servidor como respuesta a este segundo
HTTP GET? ¿Realmente devolvió el servidor los contenidos del fichero? Justifica tu respuesta.
RECUPERANDO DOCUMENTOS DE GRAN TAMAÑO
Hasta ahora hemos empleado archivos HTML simples y pequeños, veamos qué pasa cuando descargamos un
archivo HTML de mayor tamaño.
Para este apartado se utilizará el fichero http-ethereal-trace-3, que podrás abrir
desde Wireshark.
Para capturar la traza fuera del laboratorio, sigue los siguientes pasos:
1. Inicia tu navegador web y asegúrate de vaciar su caché.
2. Inicia Wireshark.
3. Introduce la siguiente URL en tu navegador: [Link]
[Link] que se trata de un fichero HTML de mayor tamaño.
4. Detén la captura de paquetes y filtra los resultados por “http” para ver únicamente los mensajes HTTP
en la ventana de listado de paquetes.
En la ventana de listado de paquetes verás ahora tu mensaje HTTP GET, seguido de una respuesta de múltiples
paquetes. Recuerda que un mensaje de respuesta HTTP consiste en una línea de estado seguida de líneas de
cabecera, una línea en blanco y finalmente el cuerpo del mensaje. En el caso de nuestro HTTP GET, el cuerpo
del mensaje es el archivo HTML entero, y como ahora el archivo es demasiado largo para entrar en un único
paquete TCP, el mensaje HTTP de respuesta es fraccionado en varios trozos por TCP, cada uno de ellos
-3-
Práctica 2: Protocolo HTTP Redes de Ordenadores
contenido en un segmento TCP por separado. Cada segmento TCP se registra en Wireshark como un paquete
independiente, y el hecho de que la respuesta HTTP se haya fragmentado en múltiples paquetes TCP es
indicado por Wireshark con la palabra “Continuation”. Observa que no hay mensaje de “Continuation” en
HTTP, sino en TCP.
Responde a las siguientes preguntas y justifica tus respuestas:
12. ¿Cuántos mensajes de solicitud HTTP GET fueron enviados por tu navegador?
13. ¿Cuántos segmentos TCP que contenían datos fueron necesarios para transportar la respuesta HTTP?
14. ¿Cuál es el código de estado y la frase asociada con la respuesta a la solicitud HTTP GET?
15. ¿Hay alguna línea de estado HTTP en los datos transmitidos asociados con la “Continuation” de TCP?
DOCUMENTOS HTML CON OBJETOS EMBEBIDOS
Ahora que hemos visto cómo muestra Wireshark los paquetes capturados de archivos grandes HTML, podemos
ver qué pasa cuando tu navegador descarga un archivo con objetos embebidos, como por ejemplo un
documento HTML que incluye imágenes que están alojadas en otro servidor.
Para este apartado se utilizará el fichero http-ethereal-trace-4, que podrás abrir
desde Wireshark.
Para capturar la traza fuera del laboratorio, sigue los siguientes pasos:
1. Inicia tu navegador web y asegúrate de vaciar su caché.
2. Inicia Wireshark.
3. Introduce la siguiente URL en tu navegador: [Link]
[Link] que se trata de un pequeño fichero HTML con referencias a dos imágenes, es decir, las
imágenes no están incluidas en el archivo HTML sino las URLs para poder encontrarlas. Será el
navegador, por tanto, el que recupere esas imágenes de los sitios web que indican las URLs.
4. Detén la captura de paquetes y filtra los resultados por “http” para ver únicamente los mensajes HTTP
en la ventana de listado de paquetes.
Responde a las siguientes preguntas y justifica tus respuestas:
16. ¿Cuántos mensajes de solicitud HTTP GET fueron enviados por tu navegador? ¿A qué direcciones IP se
enviaron estas solicitudes GET?
17. ¿Puedes saber si tu navegador descargó las dos imágenes en serie o si las descargó de los dos sitios
web en paralelo?
AUTENTICACIÓN HTTP
Finalmente, visitemos un sitio web que tenga protección por contraseña y examinemos la secuencia de
mensajes HTTP intercambiados. La URL [Link]
[Link] está protegida con contraseña (nombre de usuario: wireshark-students y contraseña:
network).
Para este apartado se utilizará el fichero http-ethereal-trace-5, que podrás abrir
desde Wireshark.
-4-
Práctica 2: Protocolo HTTP Redes de Ordenadores
Para capturar la traza fuera del laboratorio, sigue los siguientes pasos:
1. Inicia tu navegador web y asegúrate de vaciar su caché.
2. Inicia Wireshark.
3. Introduce la siguiente URL en tu navegador: [Link]
labs/protected_pages/[Link] e introduce el nombre de usuario y contraseña
indicados.
4. Detén la captura de paquetes y filtra los resultados por “http” para ver únicamente los mensajes HTTP
en la ventana de listado de paquetes.
1
Veamos ahora lo que ha capturado Wireshark y responde a las siguientes preguntas justificando tu respuesta .
18. ¿Cuál es la respuesta del servidor (código de estado y frase) en respuesta al mensaje inicial HTTP GET
de tu navegador?
19. Cuando tu navegador envía el mensaje HTTP GET por segunda vez, ¿qué campo nuevo se incluye en el
mensaje HTTP GET?
El nombre de usuario (wireshark-students) y la contraseña (network) que has introducido son codificadas en la
cadena de caracteres (d2lyZXNoYXJrLXN0dWRlbnRzOm5ldHdvcms=) que aparece a continuación de la cabecera
“Authorization: Basic” en el mensaje del cliente HTTP GET. Puede parecer que el nombre de usuario y
contraseña estén encriptados, pero simplemente están codificados en un formato conocido como Base64, por
lo que ¡NO están encriptados!. Puedes comprobarlo en alguna herramienta de conversión de formatos (como
por ejemplo, la página [Link] y cuando introduzcas la cadena codificada y
pulses a “Decode” verás cómo se transforma a texto (formato ASCII) y puedes ver tu nombre de usuario y
contraseña en claro… Recuerda que cualquiera puede descargarse Wireshark e inspeccionar los paquetes que
circulan por su adaptador de red (no únicamente los que van destinados a ellos), y como cualquiera puede
traducir de Base64 a ASCII como acabas de hacer, está claro que la protección mediante simples contraseñas
de los sitios web no es seguro a no ser que se complemente con otras medidas adicionales.
1
Puede serte de utilidad consultar el material sobre “HTTP Authentication Schemes” disponible en la página
web [Link]
-5-