web-dev-qa-db-fra.com

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 je voudrais me débarrasser de certaines données superflues dans la sortie (je connais tcpflow et wireshark, mais elles ne sont pas facilement disponibles dans mon environnement).

Depuis la page de manuel tcpdump:

Pour imprimer tous les paquets HTTP IPv4 vers et depuis le port 80, c'est-à-dire imprimer uniquement les paquets qui contiennent des données, pas, 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 et port tcp 80 et (((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: drapeaux [P.], seq 918827135: 918827862, ack 351213824, win 4316, options [nop, nop, TS val 4093273405 ecr 869959372], longueur 727

--- (E ..... @ ........... P..6.0 ......... D ...... __ .. e = 3 ...__ HTTP/1.1 200 OK Serveur: Apache/2.2.3 (Red Hat) Type de contenu: text/html; charset = UTF-8 Date: sam, 14 nov 2009 18:35:22 GMT Âge: 7149
Longueur du contenu: 438

<HTML> <HEAD> <TITLE> Exemple de page Web </TITLE> </HEAD> <body>
<p> Vous avez atteint cette page Web ... </p> </BODY> </HTML>

C'est presque parfait, sauf pour la partie en surbrillance. Qu'est-ce que c'est, fin - plus important encore - comment puis-je m'en débarrasser? Peut-être que c'est juste un petit ajustement à l'expression à la fin de la commande?

42
otto.poellath

tcpdump imprime des paquets complets. Les "ordures" que vous voyez sont en fait TCP.

vous pouvez certainement masser la sortie avec, par exemple, un script Perl, mais pourquoi ne pas utiliser à la place tshark, la version textuelle de wirehark?

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 comme c'est un analyseur, il peut effectuer une inspection approfondie des paquets afin que vous puissiez affiner encore plus vos filtres, c'est-à-dire.

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

39

jetez un oeil à ngrep - il peut être utile pour vous.

comme référence pour les autres httpry [le serveur semble être en panne maintenant mais j'espère que c'est temporaire] et tshark sont également utiles pour l'analyse de protocole passive - la première juste pour http, la seconde - pour bien plus.

18
pQd

Essayez httpry ou justniffer

Justniffer fonctionne bien sur les paquets TCP réorganisant les retrasmissions et la fragmentation IP

5
Mole24

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

D'autres bonnes informations, y compris certaines utilisations de httpry, peuvent être trouvées sur: http://taosecurity.blogspot.com/2008/06/logging-web-traffic-with-httpry.html

1
ScottZ

Il existe plusieurs outils disponibles sur le marché spécialement conçus pour surveiller le trafic HTTP. Fiddler2 ( http://www.fiddler2.org ) et HTTP Debugger Pro sont des exemples de tels outils.

0
Web developer

Le serveur Web que vous utilisez ne produit-il pas de journaux? Ce serait certainement une bien meilleure façon 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.

0
JamesHannah

Votre "problème" lors de l'utilisation de TCPDUMP est qu'il vous montre le contenu de l'en-tête du package.

Si vous souhaitez toujours utiliser TCPDUMP, supprimez simplement le - A. Cela devrait supprimer cela de la sortie.

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