Monitorando o tráfego HTTP usando o tcpdump

42

Para monitorar o tráfego HTTP entre um servidor e um servidor da Web, atualmente estou usando tcpdump . Isso funciona bem, mas eu gostaria de me livrar de alguns dados supérfluos na saída (eu sei sobre tcpflow e wireshark , mas eles não estão prontamente disponíveis no meu ambiente).

Na página tcpdump man:

To print all IPv4 HTTP packets to and from port 80, i.e. print only packets that contain data, not, for example, SYN and FIN packets and ACK-only packets.

tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

Este comando

sudo tcpdump -A 'src example.com and tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

fornece a seguinte saída:

19:44:03.529413 IP 192.0.32.10.http > 10.0.1.6.52369: Flags [P.], seq 918827135:918827862, ack 351213824, win 4316, options [nop,nop,TS val 4093273405 ecr 869959372], length 727

E.....@....... ....P..6.0.........D...... __..e=3...__HTTP/1.1 200 OK Server: Apache/2.2.3 (Red Hat) Content-Type: text/html; charset=UTF-8 Date: Sat, 14 Nov 2009 18:35:22 GMT Age: 7149
Content-Length: 438

<HTML> <HEAD> <TITLE>Example Web Page</TITLE> </HEAD> <body>
<p>You have reached this web page ...</p> </BODY> </HTML>

Isso é quase perfeito, exceto pela parte destacada. O que é isso, fim - mais importante - como me livrar dele? Talvez seja apenas um pequeno ajuste na expressão no final do comando?

    
por otto.poellath 14.11.2009 / 19:58

6 respostas

39

O tcpdump imprime pacotes completos. "Garbage" que você vê são na verdade cabeçalhos de pacotes TCP.

você pode certamente massagear a saída com, por exemplo, um script perl, mas por que não usar tshark, a versão textual de wireshark?

tshark 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

ele pega os mesmos argumentos que o tcpdump (mesma biblioteca), mas como é um analisador, ele pode fazer inspeção profunda de pacotes para que você possa refinar ainda mais seus filtros, ou seja,

tshark 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' -R'http.request.method == "GET" || http.request.method == "HEAD"'

    
por 14.11.2009 / 22:29
18

Dê uma olhada no ngrep - ele pode ser de alguma utilidade para você.

como referência para outros link [o servidor parece estar inativo agora, mas espero que seja temporário] e tshark também são úteis para análise de protocolo passivo - primeiro apenas para http, segundo - para muito mais.

    
por 14.11.2009 / 22:56
5

Experimente o link ou o justniffer

Justniffer funciona bem em pacotes tcp reordenando retrasmissões e fragmentação ip

    
por 13.09.2011 / 20:22
1

Gostaria de sugerir o uso de uma linha de comando tcpdump simplificada que armazena tudo em um arquivo pcap para o processo de pós-produção. Dependendo do que exatamente você está analisando, o tcpflow funciona muito bem para reunir as comunicações de maneira coerente para análise.

Algumas outras boas informações, incluindo alguns usos para o httpry, podem ser encontradas em: link

    
por 15.11.2009 / 04:24
0

O servidor da web que você está usando não produz logs? Certamente que seria uma maneira muito melhor de monitorar o tráfego HTTP, há uma infinidade de ferramentas para analisar os dados e qualquer servidor da Web competente deve produzir registros confiáveis.

    
por 14.11.2009 / 22:31
0

Existem várias ferramentas disponíveis no mercado projetadas especialmente para monitorar o tráfego HTTP. Fiddler2 ( link ) e HTTP Debugger Pro são exemplos dessas ferramentas.

    
por 03.07.2010 / 09:46