web-dev-qa-db-fra.com

Puis-je utiliser tcpdump pour obtenir des requêtes HTTP, un en-tête de réponse et un corps de réponse?

J'utilise tcpdump pour obtenir des données HTTP en exécutant la commande ci-dessous:

Sudo tcpdump -A -s 1492 dst port 80

Le résultat de la commande ci-dessus:

  1. En-têtes, je pense aux en-têtes de requête et de réponse.
  2. Données illisibles.
  3. L'URL GET /modules/mod_news_pro_gk1/cache/stories.ilbalad.ajayeb.strange-tractor.jpg.

J'ai besoin d'un résultat plus clair, par exemple, demande lisible> en-tête de réponse> corps de la réponse, etc. Comment puis-je filtrer mes résultats?

59
kimo

Il existe des filtres tcpdump pour HTTP GET et HTTP POST (ou pour les deux corps du message plus)):

  • Courir man tcpdump | less -Ip examples pour voir quelques exemples

  • Voici un filtre tcpdump pour HTTP GET:

    Sudo tcpdump -s 0 -A 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'
    
  • Voici un filtre tcpdump pour HTTP POST:

    Sudo tcpdump -s 0 -A 'tcp dst port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354)'
    
  • Surveiller le trafic HTTP, y compris les en-têtes de requête et de réponse et le corps du message ( source ):

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

Pour plus d'informations sur le bricolage dans l'en-tête TCP, voir: Générateur de filtres de capture à correspondance de chaînes) (lien vers l'explication de Sake Blok).

171
paulz

Je recommanderais d'utiliser Wireshark , qui dispose de l'option "Suivre TCP Stream", qui permet de voir facilement toutes les demandes et réponses d'un TCP particulier connexion. Si vous préférez utiliser la ligne de commande, vous pouvez essayer tcpflow , un outil dédié à la capture et à la reconstruction du contenu des flux TCP.

D'autres options consisteraient à utiliser un proxy de débogage HTTP, tel que Charles ou Fiddler comme le suggère EricLaw. Celles-ci présentent l'avantage de prendre en charge HTTP pour faciliter la gestion de divers types d'encodages et d'autres fonctionnalités telles que l'enregistrement des demandes pour les relire ou l'édition des demandes.

Vous pouvez également utiliser un outil tel que Firebug (Firefox), Web Inspector (Safari, Chrome et autres navigateurs WebKit), ou Opera Dragonfly =, qui permettent tous de visualiser les en-têtes et les corps de requête et de réponse (bien que la plupart d'entre eux ne vous permettent pas de voir le flux d'octets exact, mais comment les navigateurs analysent les requêtes).

Et enfin, vous pouvez toujours créer des requêtes à la main, en utilisant quelque chose comme telnet, netcat , ou socat pour vous connecter au port 80 et taper la demande manuellement, ou un outil comme htty pour aider à construire facilement une requête et inspecter la réponse.

34
Brian Campbell

Voici un autre choix: Chaosreader

J'ai donc besoin de déboguer une application qui publie le code XML sur une application tierce. J'ai trouvé un brillant petit script Perl qui fait tout le travail - vous venez de le jeter à un fichier de sortie tcpdump, et il effectue toutes les manipulations et génère tout ce dont vous avez besoin ...

Le script s'appelle chaosreader0.94. Voir http://www.darknet.org.uk/2007/11/chaosreader-trace-tcpudp-sessions-from-tcpdump/

Cela a fonctionné comme un régal, j'ai fait ce qui suit:

tcpdump Host www.blah.com -s 9000 -w outputfile; Perl chaosreader0.94 outputfile
6
thinker007