You are on page 1of 16

Escenarios

Métodos GET y POST, Virtual Hosts

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

1. Establecimiento de la sesión TCP


2. Envío de un GET request al virtual host 1
3. El servidor responde con el código http correspondiente
4. El cliente visualiza la pagina
5. Se termina la conexión
6. Se repite el proceso enviando un POST request al virtual host 2

Resultados Obtenidos

En la figura 2. Se puede observar el establecimiento de la sesión TCP en los paquetes del 1 al 4,


conectándose del puerto efímero del cliente 53496 al puerto 80 del servidor, seguido de esto, el
cliente envía un GET request, pidiendo la pagina index.php contenida en el host virtual
www.virtual1.com.
En el paquete 12 el servidor responde con la pagina y con el código 200 OK, y al final el servidor
envía un FIN ACK, seguido del ACK del cliente, y lo mismo desde el cliente al servidor, cerrando
la conexión tcp

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.

No. Time Source Destination Protocol Length Info


9 0.001548 192.168.2.3 192.168.2.2 HTTP 474 GET /index.php HTTP/1.1

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 la figura 5, se observa la captura al ingresar a www.virtual2.com, se establece la conexión TCP


desde el puerto efímero 53498 del cliente al puerto 80 del servidor.
Una vez completados los datos del formulario, al hacer click en Send my greetings, el cliente envía
un POST request, en el paquete 49 de la figura, y el servidor le responde en el paquete 51, con el
código 200 OK, el cual contiene el texto de respuesta que aparece en la figura 4.
Figura 5.

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”.

No. Time Source Destination Protocol Length Info


49 16.436334 192.168.2.3 192.168.2.2 HTTP 636 POST /php-example.php
HTTP/1.1 (application/x-www-form-urlencoded)

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.

No. Time Source Destination Protocol Length Info


51 16.520681 192.168.2.2 192.168.2.3 HTTP 433 HTTP/1.1 200 OK (text/html)

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

1. Generar y capturar los mensajes HTTP mas frecuentes


2. Analizar su formato y funcionamiento.

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

301 Moved Permanently

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.

404 Not Found


El servidor envía esta respuesta cuando la pagina no existe en el servidor.

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.

Servidor Proxy HTTP

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.

1. Establecer la conexión entre el cliente y el servidor pasando por el servidor proxy


2. Permitir el acceso del cliente al virtual host 1
3. Denegar el acceso del cliente al virtual host 2
4. Analizar las capturas obtenidas en el cliente
5. Analizar las capturas en el servidor proxy

Resultados Obtenidos

En la figura 12 podemos observar que el servidor proxy permite el acceso a www.virtual1.com, y


deniega el acceso a www.virtual2.com.
A pesar de las dos estar en el mismo servidor y en la misma IP, el servidor proxy permite hacer el
filtrado de las URL.

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.

No. Time Source Destination Protocol Length Info


58 5.544919 192.168.2.3 192.168.2.4 TCP 66 53706 → 3128 [SYN] Seq=0
Win=8192 Len=0 MSS=1460 WS=4 SACK_PERM=1

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.

No. Time Source Destination Protocol Length Info


45 6.339579 192.168.2.3 192.168.2.4 HTTP 468 GET http://www.virtual2.com/
HTTP/1.1

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]

No. Time Source Destination Protocol Length Info


48 6.339935 192.168.2.4 192.168.2.3 HTTP 60 HTTP/1.0 403 Forbidden
(text/html)
Frame 48: 60 bytes on wire (480 bits), 60 bytes captured (480 bits) on interface 0
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 Version 4, Src: 192.168.2.4, Dst: 192.168.2.3
Transmission Control Protocol, Src Port: 3128, Dst Port: 53820, Seq: 1461, Ack: 415, Len: 3
[2 Reassembled TCP Segments (1463 bytes): #47(1460), #48(3)]
Hypertext Transfer Protocol
HTTP/1.0 403 Forbidden\r\n
Server: squid/2.6.STABLE18\r\n
Date: Tue, 02 Oct 2018 00:10:22 GMT\r\n
Content-Type: text/html\r\n
Content-Length: 1070\r\n
Expires: Tue, 02 Oct 2018 00:10:22 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
[HTTP response 1/1]
[Time since request: 0.000356000 seconds]
[Request in frame: 45]
File Data: 1070 bytes
Line-based text data: text/html (32 lines)
Captura desde el Servidor Proxy

Caso 1. Acceso Permitido

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.

CLIENTE – SERVIDOR PROXY

No. Time Source Destination Protocol Info


17 11.841344 192.168.2.3 192.168.2.4 HTTP GET http://www.virtual1.com/
HTTP/1.1

Frame 17 (544 bytes on wire, 544 bytes captured)


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, Src: 192.168.2.3 (192.168.2.3), Dst: 192.168.2.4 (192.168.2.4)
Transmission Control Protocol, Src Port: 53867 (53867), Dst Port: ndl-aas (3128), Seq: 1, Ack: 1,
Len: 490
Hypertext Transfer Protocol
GET http://www.virtual1.com/ HTTP/1.1\r\n
Request Method: GET
Request URI: http://www.virtual1.com/
Request Version: HTTP/1.1
Host: www.virtual1.com\r\n
Proxy-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
If-Modified-Since: Mon, 01 Oct 2018 20:47:25 GMT\r\n
\r\n

SERVIDOR PROXY – SERVIDOR HTTP

No. Time Source Destination Protocol Info


25 11.843787 192.168.2.4 192.168.2.2 HTTP GET / HTTP/1.0

Frame 25 (615 bytes on wire, 615 bytes captured)


Ethernet II, Src: Parallel_4c:19:38 (00:1c:42:4c:19:38), Dst: Parallel_00:00:09 (00:1c:42:00:00:09)
Internet Protocol, Src: 192.168.2.4 (192.168.2.4), Dst: 192.168.2.2 (192.168.2.2)
Transmission Control Protocol, Src Port: 57136 (57136), Dst Port: http (80), Seq: 1, Ack: 1, Len:
549
Hypertext Transfer Protocol
GET / HTTP/1.0\r\n
Request Method: GET
Request URI: /
Request Version: HTTP/1.0
Host: www.virtual1.com\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
If-Modified-Since: Mon, 01 Oct 2018 20:47:25 GMT\r\n
Via: 1.1 WebServer.localdomain:3128 (squid/2.6.STABLE18)\r\n
X-Forwarded-For: 192.168.2.3\r\n
Cache-Control: max-age=0\r\n
Connection: keep-alive\r\n
\r\n

Caso 2. Acceso Denegado.

Al estar bloqueado el host www.virtual2.com, el servidor proxy simplemente responde a la


petición con el código HTTP 403 Forbidden y envía al cliente la pagina que se muestra en la figura
13.

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

 A partir de los resultados obtenidos se pudo analizar el funcionamiento de los métodos


GET y POST y su formato, siendo métodos que se utilizan a diario cada vez que
accedemos a una pagina web, este informe permite ver lo que pasa detrás de nuestro
navegador.

 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.

 Se puede restringir el acceso a diferentes paginas mediante un servidor proxy, a pesar


de que las paginas estén en la misma IP lo puede hacer a nivel de hosts, lo cual permite
mas control en la administración de la red.

You might also like