Professional Documents
Culture Documents
Figura 1.
Se tiene una conexión directa cliente-servidor, el cliente tiene como sistema operativo Windows
7, y para el servidor se implementa Apache 2.4 sobre Mac OS.
El servidor implementado utiliza http 1.1, y en el mismo se configuran dos hosts virtuales,
ingresando a www.virtual1.com se pretende analizar el método GET e ingresando a
www.virtual2.com se analizara el método POST.
Resultados Esperados
Resultados Obtenidos
Figura 2.
Método GET
En los datos de la captura podemos observar los campos que contiene HTTP, primero especifica
el método seguido de la pagina a recuperar, en este caso index.php, y la versión de http.
En la segunda línea se observa que envía el nombre del host al que quiere acceder el cliente, en
este caso es importante ya que en el servidor la misma IP contiene a dos hosts diferentes.
Connection: keep-alive, Al ser http 1.1, la conexión TCP se mantiene abierta por un tiempo, de
este modo no se necesita una conexión tcp por cada recurso a recuperarse del servidor como en
el caso de http 1.0.
Frame 9: 474 bytes on wire (3792 bits), 474 bytes captured (3792 bits) on interface 0
Ethernet II, Src: Parallel_a8:67:fd (00:1c:42:a8:67:fd), Dst: Parallel_00:00:09 (00:1c:42:00:00:09)
Internet Protocol Version 4, Src: 192.168.2.3, Dst: 192.168.2.2
Transmission Control Protocol, Src Port: 53496, Dst Port: 80, Seq: 1, Ack: 1, Len: 420
Hypertext Transfer Protocol
GET /index.php HTTP/1.1\r\n
Host: www.virtual1.com\r\n
Connection: keep-alive\r\n
Cache-Control: max-age=0\r\n
Upgrade-Insecure-Requests: 1\r\n
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like
Gecko) Chrome/69.0.3497.100 Safari/537.36\r\n
Accept:
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8\r\n
Accept-Encoding: gzip, deflate\r\n
Accept-Language: es-419,es;q=0.9\r\n
\r\n
[Full request URI: http://www.virtual1.com/index.php]
[HTTP request 1/1]
[Response in frame: 12]
Método POST
Para el método POST se utilizo una pequeña aplicación en PHP, que consiste en un formulario, y
una vez enviado, responde con un texto como se puede observar en la figura 3 y 4
Figura 3.
Figura 4.
En los datos que contiene la captura HTTP del paquete, se observa que envía el método POST
seguido de la URI de la aplicación, en el campo host se encuentra www.virtual2.com, que es el
host virtual 2.
Al final se puede observar también los datos que fueron ingresados en el formulario, en este caso
las palabras “Hello” y “World”.
Frame 49: 636 bytes on wire (5088 bits), 636 bytes captured (5088 bits) on interface 0
Ethernet II, Src: Parallel_a8:67:fd (00:1c:42:a8:67:fd), Dst: Parallel_00:00:09 (00:1c:42:00:00:09)
Internet Protocol Version 4, Src: 192.168.2.3, Dst: 192.168.2.2
Transmission Control Protocol, Src Port: 53498, Dst Port: 80, Seq: 1, Ack: 1, Len: 582
Hypertext Transfer Protocol
POST /php-example.php HTTP/1.1\r\n
Host: www.virtual2.com\r\n
Connection: keep-alive\r\n
Content-Length: 18\r\n
Cache-Control: max-age=0\r\n
Origin: http://www.virtual2.com\r\n
Upgrade-Insecure-Requests: 1\r\n
Content-Type: application/x-www-form-urlencoded\r\n
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like
Gecko) Chrome/69.0.3497.100 Safari/537.36\r\n
Accept:
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8\r\n
Referer: http://www.virtual2.com/\r\n
Accept-Encoding: gzip, deflate\r\n
Accept-Language: es-419,es;q=0.9\r\n
\r\n
[Full request URI: http://www.virtual2.com/php-example.php]
[HTTP request 1/1]
[Response in frame: 51]
File Data: 18 bytes
HTML Form URL Encoded: application/x-www-form-urlencoded
Form item: "say" = "Hello"
Form item: "to" = "Wolrd"
Respuesta:
En la respuesta el servidor envía el código 200 OK, junto con la respuesta de la aplicación que se
observa en las dos ultima líneas, texto html con las palabras ingresadas en el formulario.
Frame 51: 433 bytes on wire (3464 bits), 433 bytes captured (3464 bits) on interface 0
Ethernet II, Src: Parallel_00:00:09 (00:1c:42:00:00:09), Dst: Parallel_a8:67:fd (00:1c:42:a8:67:fd)
Internet Protocol Version 4, Src: 192.168.2.2, Dst: 192.168.2.3
Transmission Control Protocol, Src Port: 80, Dst Port: 53498, Seq: 1, Ack: 583, Len: 379
Hypertext Transfer Protocol
HTTP/1.1 200 OK\r\n
Date: Mon, 01 Oct 2018 22:29:59 GMT\r\n
Server: Apache/2.2.34 (Unix) mod_wsgi/3.5 Python/2.7.13 PHP/7.2.8 mod_ssl/2.2.34
OpenSSL/1.0.2o DAV/2 mod_fastcgi/mod_fastcgi-SNAP-0910052141 mod_perl/2.0.9
Perl/v5.24.0\r\n
X-Powered-By: PHP/7.2.8\r\n
Content-Length: 11\r\n
Keep-Alive: timeout=5, max=100\r\n
Connection: Keep-Alive\r\n
Content-Type: text/html; charset=UTF-8\r\n
\r\n
[HTTP response 1/1]
[Time since request: 0.084347000 seconds]
[Request in frame: 49]
File Data: 11 bytes
Line-based text data: text/html (1 lines)
Hello Wolrd
Mensajes HTTP
Con la misma maqueta antes expuesta en la figura 1, se pretende capturar los mensajes HTTP
mas frecuentes
Resultados Esperados
Resultados Obtenidos
200 OK
Indica que la petición fue correcta, es la respuesta estándar del servidor para una petición
completada.
Figura 6
Significa que la pagina solicitada a sido movida a otra URL, generalmente este mensaje no se
visualiza en el navegador ya que es re direccionada automáticamente a la nueva URL.
Figura 7
403 Forbidden
Significa que el cliente no tiene los permisos necesarios para acceder a esa pagina, la captura fue
obtenida con la implementación de un servidor proxy http que será explicado en el siguiente
escenario.
Figura 8.
Figura 9.
500 Internal Server Error
Es un mensaje de error genérico que no provee detalles específicos de del mismo, se puede
encontrar la razón del error haciendo un debug al servidor.
Figura 10.
Escenario 2.
Figura 11.
En este escenario se tiene un cliente que se conecta al servidor proxy, el cual filtra las paginas
que residen en el servidor web y que pueden ser accedidas por el cliente.
Resultados Esperados.
Resultados Obtenidos
Figura 12.
Figura 13.
Capturas en el Cliente
En la figura 14 se observa la conexión TCP entre el cliente y el servidor proxy, en este caso la
conexión se da desde el puerto efímero 53706 del cliente con el puerto 3128 del servidor proxy,
a diferencia del primer escenario que se conecta directamente con el puerto 80 del servidor, al
estar permitido el acceso del cliente, el servidor proxy responde con la pagina contenida en
www.virtual1.com.
Se observa que las respuestas http desde el servidor proxy utilizan http 1.0, esto debido a que el
programa utilizado Squid utiliza http 1.0.
Figura 14.
Frame 58: 66 bytes on wire (528 bits), 66 bytes captured (528 bits) on interface 0
Ethernet II, Src: Parallel_a8:67:fd (00:1c:42:a8:67:fd), Dst: Parallel_4c:19:38 (00:1c:42:4c:19:38)
Internet Protocol Version 4, Src: 192.168.2.3, Dst: 192.168.2.4
Transmission Control Protocol, Src Port: 53706, Dst Port: 3128, Seq: 0, Len: 0
Source Port: 53706
Destination Port: 3128
[Stream index: 10]
[TCP Segment Len: 0]
Sequence number: 0 (relative sequence number)
[Next sequence number: 0 (relative sequence number)]
Acknowledgment number: 0
1000 .... = Header Length: 32 bytes (8)
Flags: 0x002 (SYN)
Window size value: 8192
[Calculated window size: 8192]
Checksum: 0x857e [unverified]
[Checksum Status: Unverified]
Urgent pointer: 0
Options: (12 bytes), Maximum segment size, No-Operation (NOP), Window scale, No-
Operation (NOP), No-Operation (NOP), SACK permitted
En el caso del acceso a www.virtual2.com, el establecimiento de la conexión se da igual que en
caso anterior desde el puerto efímero del cliente al puerto 3128 del servidor proxy.
Al estar bloqueado el acceso el servidor proxy devuelve el mensaje HTTP 403 Forbidden.
Mostrando la pagina de la figura 13.
Figura 15.
Frame 45: 468 bytes on wire (3744 bits), 468 bytes captured (3744 bits) on interface 0
Ethernet II, Src: Parallel_a8:67:fd (00:1c:42:a8:67:fd), Dst: Parallel_4c:19:38 (00:1c:42:4c:19:38)
Internet Protocol Version 4, Src: 192.168.2.3, Dst: 192.168.2.4
Transmission Control Protocol, Src Port: 53820, Dst Port: 3128, Seq: 1, Ack: 1, Len: 414
Hypertext Transfer Protocol
GET http://www.virtual2.com/ HTTP/1.1\r\n
Host: www.virtual2.com\r\n
Proxy-Connection: keep-alive\r\n
Upgrade-Insecure-Requests: 1\r\n
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like
Gecko) Chrome/69.0.3497.100 Safari/537.36\r\n
Accept:
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8\r\n
Accept-Encoding: gzip, deflate\r\n
Accept-Language: es-419,es;q=0.9\r\n
\r\n
[Full request URI: http://www.virtual2.com/]
[HTTP request 1/1]
[Response in frame: 48]
El servidor proxy realiza dos conexiones, primero establece una conexión TCP con el cliente
mediante el puerto efímero del cliente y el puerto 3128 del servidor proxy, luego el cliente pide
mediante un GET request la pagina web, (Figura 17) paquete 17.
El servidor proxy establece una conexión tcp con el servidor web, con un puerto efímero contra
el puerto 80 del servidor web, y realiza un GET request de la pagina. (Figura 16)
En este caso el servidor responde con el mensaje 304 Not modified, que significa que la pagina
que el servidor proxy tiene en su cache no fue modificada por lo tanto puede enviársela al cliente.
De inmediato a través de la primera conexión tcp el servidor proxy envía la pagina al cliente.
Figura 16.
Figura 17.
Figura 18.
No. Time Source Destination Protocol Info
40 2.857148 192.168.2.4 192.168.2.3 HTTP HTTP/1.0 403 Forbidden
(text/html)
Frame 40 (1514 bytes on wire, 1514 bytes captured)
Ethernet II, Src: Parallel_4c:19:38 (00:1c:42:4c:19:38), Dst: Parallel_a8:67:fd (00:1c:42:a8:67:fd)
Internet Protocol, Src: 192.168.2.4 (192.168.2.4), Dst: 192.168.2.3 (192.168.2.3)
Transmission Control Protocol, Src Port: ndl-aas (3128), Dst Port: 53886 (53886), Seq: 1, Ack:
385, Len: 1460
Hypertext Transfer Protocol
HTTP/1.0 403 Forbidden\r\n
Server: squid/2.6.STABLE18\r\n
Date: Tue, 02 Oct 2018 00:58:59 GMT\r\n
Content-Type: text/html\r\n
Content-Length: 1092
Expires: Tue, 02 Oct 2018 00:58:59 GMT\r\n
X-Squid-Error: ERR_ACCESS_DENIED 0\r\n
X-Cache: MISS from WebServer.localdomain\r\n
X-Cache-Lookup: NONE from WebServer.localdomain:3128\r\n
Via: 1.0 WebServer.localdomain:3128 (squid/2.6.STABLE18)\r\n
Proxy-Connection: close\r\n
\r\n
Conclusiones
Se pudo observar que los mensajes HTTP, y el conocimiento de los mismos son de gran
ayuda para el administrador de un servidor web, ya que permiten localizar los errores
fácilmente para su reparación y un buen mantenimiento, así también ayudan al usuario
a saber que es lo que podría pasar con una pagina a la que se intenta acceder.
El uso de virtual hosts permite tener varias paginas web en diferentes dominios en un
mismo servidor con una misma IP.