42 votes

Surveillance du trafic HTTP à l'aide de tcpdump

Pour surveiller le trafic HTTP entre un serveur et un serveur web, j'utilise actuellement tcpdump. Cela fonctionne bien, mais j'aimerais me débarrasser de certaines données superflues dans la sortie (je connais tcpflow et wireshark, mais ils ne sont pas facilement disponibles dans mon environnement).

Depuis la page de manuel de tcpdump:

Pour imprimer tous les paquets IPv4 HTTP vers et depuis le port 80, c'est-à-dire n'imprimer que les paquets contenant des données, et non, par exemple, les paquets SYN et FIN et les paquets ACK uniquement.

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

Cette commande

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

fournit la sortie suivante:

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

Example Web Page

You have reached this web page ...

C'est presque parfait, sauf pour la partie surlignée. Qu'est-ce que c'est, et surtout, comment m'en débarrasser? Peut-être que c'est juste un petit ajustement à l'expression à la fin de la commande?

39voto

TonyB Points 2482

Tcpdump imprime des paquets complets. Les "déchets" que vous voyez sont en réalité des en-têtes de paquets TCP.

vous pouvez certainement filtrer la sortie avec par exemple un script perl, mais pourquoi ne pas utiliser tshark, la version textuelle de wireshark à la place?

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

il prend les mêmes arguments que tcpdump (même bibliothèque) mais étant un analyseur, il peut faire une inspection approfondie des paquets pour affiner davantage vos filtres, par exemple.

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"'

18voto

pQd Points 29251

Prenez un coup d'oeil à ngrep - cela pourrait vous être utile.

Comme référence pour d'autres, httpry [le serveur semble être hors service maintenant mais j'espère que c'est temporaire] et tshark sont également utiles pour l'analyse passive des protocoles - le premier juste pour http, le second - pour beaucoup plus.

5voto

Mole24 Points 51

Essayez httpry ou justniffer

Justniffer fonctionne bien sur le réordonnancement des paquets TCP, les retransmissions et la fragmentation IP

1voto

Tdawg Points 11

Je suggérerais d'utiliser une ligne de commande tcpdump simplifiée qui stocke tout dans un fichier pcap pour un post-traitement. En fonction de ce que vous cherchez à diagnostiquer, tcpflow fonctionne très bien pour remettre en ordre les communications de manière cohérente pour l'analyse.

Quelques autres bonnes informations, y compris quelques utilisations pour httpry, peuvent être trouvées à l'adresse : http://taosecurity.blogspot.com/2008/06/logging-web-traffic-with-httpry.html

0voto

JamesHannah Points 1712

Votre serveur web n'enregistre-t-il pas de journaux ? Ce serait sûrement un bien meilleur moyen de surveiller le trafic HTTP, il existe une pléthore d'outils pour analyser les données et tout serveur web compétent devrait produire des journaux fiables.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X