Organismos HTTP de decodificação on-the-fly no Linux?

2

Meu desejo é monitorar trocas de HTTP entre meu servidor e um navegador. No momento, eu uso o localhost porque estou desenvolvendo o aplicativo. Eu instalei e usei tcpflow e achei bastante útil, mas o corpo da resposta é criptografado (sem https, acredito que seja gzipado se eu me referir ao cabeçalho). Aqui está a troca 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....

E aqui está o código HTML :

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

O que eu gostaria de ver como resposta é:

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

Eu acho que as entradas do cabeçalho Vary: Accept-Encoding e Content-Encoding: gzip são a fonte do meu problema. Existe alguma maneira de se livrar deste embaralhamento e ver o código HTML em claro? Quero dizer, um jeito bem fácil? Na verdade, não terei controle sobre o navegador que solicita com Accept-Encoding: gzip,deflate,sdch . Mas para propósitos de depuração, se a única maneira é definir o navegador para não solicitar Codificação / Compactação, eu posso viver com isso.

Obrigado pela sua ajuda!

    
por dom_beau 05.10.2015 / 06:02

1 resposta

2

O conteúdo codificado com Content-Encoding: gzip pode ser facilmente descompactado com o piping do conteúdo através de gzip -d . Para esvaziar, não conheço um utilitário, mas isso pode ser feito com alguma programação zlib. O SDCH não é tão fácil, porque, para descompactá-lo, você precisaria ter acesso ao dicionário usado para compactação, que pode estar em outro lugar na captura de pacotes ou em nenhum lugar.

O

Gzip e provavelmente o deflate também deve ser tratado de forma transparente pelo wireshark, para que você possa ver os cabeçalhos decodificados lá. Uma ferramenta httpflow que vem com o pacote perl Net :: Inspecionar também pode decodificar o gzip e esvaziar a carga útil para você e também pode pode ser usado para extrair pedidos HTTP / pares de resposta de um arquivo pcap e salvar cada um desses pares como arquivo pcap único com carga já decodificada.

    
por 05.10.2015 / 07:37