¿Decodificación sobre la marcha de cuerpos HTTP en Linux?

¿Decodificación sobre la marcha de cuerpos HTTP en Linux?

Mi deseo es monitorear los intercambios HTTP entre mi servidor y un navegador. Actualmente, uso localhost porque estoy desarrollando la aplicación. Lo instalé y uséflujo tcpy lo encontré bastante útil, pero el cuerpo de la respuesta está cifrado (no https, creo que está comprimido si me refiero al encabezado). Aquí está el intercambio de tcpflow -i lo -c -e:

127.000.000.001.59549-127.000.000.001.00080: GET /dom/test.html HTTP/1.1
Host: localhost
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/37.0.2062.120 Chrome/37.0.2062.120 Safari/537.36
Referer: http://localhost/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4


127.000.000.001.00080-127.000.000.001.59549: HTTP/1.1 200 OK
Date: Mon, 05 Oct 2015 03:44:53 GMT
Server: Apache/2.2.22 (Ubuntu)
Last-Modified: Mon, 05 Oct 2015 03:06:42 GMT
ETag: "36031e-8e-52152cd86200d"
Accept-Ranges: bytes
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 118
Keep-Alive: timeout=5, max=98
Connection: Keep-Alive
Content-Type: text/html

...........Qt.w....qU.(......Q..)v\

6..%.
...E..%.J.%i..J.`.....T;....|......E.}....>D.MR~J%Xq.!.J..P.D....
.r..0....

Y aquí está elHTMLcódigo:

<!DOCSTYLE html>
<html>
<head>
  <meta charset="utf-8"/>
  <title>Hello World!</title>
</head>
<body>
  <h1>Hello World!</h1>
</body>
</html>

Lo que me gustaría ver comorespuestaes bastante:

...
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 118
Keep-Alive: timeout=5, max=98
Connection: Keep-Alive
Content-Type: text/html

<!DOCSTYLE html>
<html>
<head>
  <meta charset="utf-8"/>
  <title>Hello World!</title>
</head>
<body>
  <h1>Hello World!</h1>
</body>
</html>

Supongo que las entradas del encabezado Vary: Accept-Encodingson Content-Encoding: gzipla fuente de mi problema. ¿Hay alguna manera de deshacerse de esta confusión y ver elHTMLcódigo en claro? ¿Me refiero a una manera bastante fácil? En realidad, no tendré control sobre el navegador que solicite Accept-Encoding: gzip,deflate,sdch.Pero para fines de depuración, si la única forma es configurar el navegador para que no solicite codificación/compresión, puedo vivir con eso.

¡Gracias por tu ayuda!

Respuesta1

El contenido codificado con Content-Encoding: gzipse puede descomprimir fácilmente canalizando el contenido a través de gzip -d. Para desinflar no conozco una utilidad, pero se puede hacer con algo de programación zlib. SDCH no es tan fácil porque para descomprimirlo necesitaría tener acceso al diccionario utilizado para la compresión, que podría estar en algún otro lugar de su captura de paquetes o en ninguna parte.

Gzip y probablemente también deflate deberían ser manejados de forma transparente por Wireshark, para que puedas ver los encabezados decodificados allí. Una herramienta httpflow que viene con elRed::InspeccionarEl paquete perl también puede decodificar la carga útil gzip y deflate y también puede usarse para extraer pares de solicitudes/respuestas HTTP de un archivo pcap y guardar cada uno de estos pares como un único archivo pcap con la carga útil ya decodificada.

información relacionada