Como despejar solicitações HTTP inteiras com o apache

27

É possível despejar solicitações HTTP inteiras pelo apache? Preciso rastrear todos os cabeçalhos HTTP de solicitações recebidas. Como fazer isso?

Alex
fonte

Respostas:

30

Eu acho que o que você deseja, em vez do Apache, pode ser um analisador de pacotes , também conhecido como sniffer de pacotes. Dois dos mais populares são provavelmente o TCPDump e o Wireshark , ambos gratuitos e com versões para os sistemas operacionais Windows e * nix. Eles mostrarão todo o tráfego que entra em uma interface, não apenas o que o Apache vê. Mas você pode usar filtros para restringir a uma porta especificada, como 80 para http.

tcpdump:
O seguinte comando executado no servidor mostrará todos os pacotes destinados à porta 80:

sudo tcpdump -s 0 -X 'tcp dst port 80'

O comutador capital X despeja a carga útil em hexadecimal e ASCII. O interruptor s com 0 significa obter todo o pacote. 'tcp dst port 80' significa filtrar e mostrar apenas pacotes destinados à porta 80 no cabeçalho tcp.

Wireshark:
Para uma versão mais amigável, se você tiver uma GUI em execução, considere o wireshark (formalmente conhecido como etéreo).

Kyle Brandt
fonte
11
Obrigado Kyle, como faço para extrair informações de cabeçalho HTTP da saída do tcpdump?
7288 Alex
11
Alex: Quer saber, o Wireshark tornará isso muito mais fácil. Você pode usar o nome do arquivo -r para salvar o dump em um arquivo e abri-lo com o wireshark na área de trabalho.
Kyle Brandt
Ah, e solte o 'dst' se você quiser as respostas também.
Kyle Brandt
11
-Apara somente texto (sem dump hexadecimal):sudo tcpdump -A -s 0 'tcp dst port 80'
Brent Faust
12

talvez despejar biscoitos ? caso contrário - veja mod_dumpio .

pQd
fonte
11
mod_dumpio parece legal! Provavelmente, a maneira mais fácil de despejar as informações se estiver usando SSL (embora o wirehsark também possa fazer isso). 1 :-)
Kyle Brandt
8

A detecção básica de pacotes é fácil com o ngrep, um híbrido do tcpdump e grep. Em certos cenários, se você deseja ver como os navegadores da Web se comunicam com os servidores da Web e inspecionar os cabeçalhos HTTP.
Neste exemplo, execute um ngrep em um servidor da web como este:

$ ngrep port 80

você também pode optar por filtrar a solicitação http na solicitação "GET /" da porta 80:

$ ngrep -q '^GET .* HTTP/1.[01]'

No lado do cliente, há uma ferramenta útil chamada Tamper Data; é uma extensão do Firefox que permite visualizar, gravar e até modificar solicitações HTTP de saída.
Você pode encontrar mais informações aqui

Ali Mezgani
fonte
7

Em vez de usar tcpdump ou wireshark, use tcpflow. É uma queda no substituto do tcpdump, mas cria um arquivo para cada lado de cada conexão, para que você não precise decodificar o fluxo sozinho.

David Pashley
fonte
Obrigado por isso. Estou usando mod_negotiate e meu curl () pegou arquivos .bak em vez de .php enquanto os navegadores encontravam o .php. Uma noz difícil de quebrar.
Mckenzm 5/05
0

O Apache possui essa funcionalidade embutida; basta aumentar o nível de log para trace7ou trace8:

LogLevel trace8

Observe que isso irá despejar muitos dados. Você foi avisado.

Wouter Verhelst
fonte