85 votes

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

Je suis l'aide d' tcpdump pour obtenir l'adresse HTTP de données en exécutant la commande ci-dessous:

sudo tcpdump -A -s 1492 dst port 80

Le résultat de la commande ci-dessus:

  1. Les en-têtes, je pense que la demande et les en-têtes 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 clair, par exemple, lisible à la demande > en-tête de réponse > le corps de la réponse etc. Comment puis-je filtrer les résultats?

212voto

paulz Points 501

Il y a tcpdump filtres pour HTTP GET et de HTTP POST (ou pour les deux, plus le corps du message):

  • Exécutez man tcpdump | less -Ip examples pour voir quelques exemples

  • Voici un tcpdump filtre pour HTTP GET:

    sudo tcpdump -s 0 -A 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'
    
  • Voici un tcpdump filtre 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 la demande et la réponse des en-têtes 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 bit-tourner dans l'en-tête TCP, voir: Correspondance de chaînes Filtre de Capture Générateur (lien vers le Saké Blok de l'explication).

34voto

Brian Campbell Points 101107

Je vous conseille d'utiliser Wireshark, qui a un "Follow TCP Stream" l'option qui le rend très facile de voir l'ensemble des demandes et des réponses pour une connexion TCP. Si vous préférez utiliser la ligne de commande, vous pouvez essayer de tcpflow, un outil dédié à la capture et à la reconstruction du contenu de flux TCP.

D'autres options pourraient être en utilisant un HTTP debugging proxy, comme Charles ou Fiddler comme EricLaw suggère. Ceux-ci ont l'avantage d'avoir un support spécifique pour le protocole HTTP pour le rendre plus facile de traiter avec toutes sortes de codages, et d'autres fonctionnalités telles que l'enregistrement des requêtes de lecture ou d'édition de demandes.

Vous pouvez également utiliser un outil comme Firebug (Firefox), Inspecteur Web (Safari, Chrome, et d'autres basé sur WebKit navigateurs), ou Opera Dragonfly, qui fournissent la capacité de la demande et de la réponse, en-têtes et corps (bien que la plupart d'entre eux ne vous permettra pas de voir exactement flux d'octets, mais plutôt comment les navigateurs analysé les demandes).

Et enfin, vous pouvez toujours construire des demandes par la main, en utilisant quelque chose comme telnet, netcat, ou socat à connecter sur le port 80 et le type de la requête à la main, ou un outil comme htty pour aider à construire facilement une demande et d'inspecter la réponse.

6voto

thinker007 Points 118

Voici un autre choix: Chaosreader

J'ai donc besoin de déboguer une application qui affiche xml pour une application 3ème partie. J'ai trouvé un excellent petit script perl qui fait tout le dur travail que vous venez de chuck un tcpdump fichier de sortie, et il fait toutes les manipulations et les sorties de tout ce dont vous avez besoin...

Le script est appelé chaosreader0.94. Voir http://www.darknet.org.uk/2007/11/chaosreader-trace-tcpudp-sessions-from-tcpdump/

Il a travaillé comme un régal, j'ai fait la suivante:

tcpdump host www.blah.com -s 9000 -w outputfile; perl chaosreader0.94 outputfile

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X