Comment inspecter les requêtes HTTP sortantes d'une seule application?

60

Mon application envoie des requêtes HTTP à certains serveurs et je souhaite voir les données réelles qu’elle envoie. Quelques détails que j'aimerais voir:

  • Méthode de requête (GET / POST / PUT, etc.)
  • Content-type
  • Corps

Quelle est la manière la plus simple et efficace d’y parvenir?

    
posée megas 07.02.2013 - 00:27
la source

4 réponses

57

Eh bien, pour tous les fans de tcpdump =)

EXÉCUTEZ TOUTES CES COMMANDES COMME ROOT !!!

Obtenir la racine dans un terminal avec

sudo -i

Pour capturer les paquets RAW ...

sudo tcpdump -i any -w /tmp/http.log &

Cela va capturer tous les paquets bruts, sur tous les ports, sur toutes les interfaces et les écrire dans un fichier, /tmp/http.log .

Exécutez votre application. Cela aide évidemment si vous n'exécutez aucune autre application utilisant HTTP (navigateurs Web).

Tuez tcpdump

killall tcpdump

Pour lire le journal, utilisez l’indicateur -A et dirigez la sortie vers less :

tcpdump -A -r /tmp/http.log | less

L’indicateur -A imprime le texte "payload" ou ASCII dans les paquets. Cela enverra la sortie à less , vous pouvez page précédente et suivante. Pour quitter less , tapez Q .

Quand je vais sur Google, je vois (dans les paquets bruts):

20:42:38.179759 IP ufbt.local.56852 > sea09s02-in-f3.1e100.net.www: Flags [P.], seq 1:587, ack 1, win 913, options [nop,nop,TS val 25523484 ecr 492333202], length 586
[email protected]@..q......!#...P.(.gS.c..............u..Xh.GET /generate_204 HTTP/1.1
Host: clients1.google.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.34 (KHTML, like Gecko) rekonq Safari/534.34
Referer: http://www.google.com/
Accept: */*
Accept-Encoding: gzip, deflate, x-gzip, x-deflate
Accept-Charset: utf-8,*;q=0.5
Accept-Language: en-US, en-US; q=0.8, en; q=0.6
Cookie: PREF=ID=dd958d4544461998:FF=0:TM=1323842648:LM=1360205486:S=Fg_QCDsLMr4ZepIo; NID=67=OQJWjIDHG-B8r4EuM19F3g-nkaMcbvYwoY_CsOjzvYTOAxwqAos5kfzsk6Q14E70gIfJjHat8d8PuQIloB12BE-JuSHgsKHR2QSpgN12qSWoxeqhdcSQgzw5CHKtbR_a

tcpdump dispose d'un long ensemble d'options pour affiner la collecte de données en spécifiant les interfaces réseau vers les ports vers les adresses IP source et de destination. Il ne peut pas décrypter (il ne fonctionnera donc pas avec HTTPS).

Une fois que vous savez ce qui vous intéresse, vous pouvez utiliser plusieurs options avec tcpdump pour enregistrer uniquement les données qui vous intéressent. La stratégie générale consiste à enregistrer tous les paquets, à examiner les données brutes et à ne capturer que les paquets d’intérêt.

Quelques indicateurs utiles (options):

-i Specify an interface
-i eth0

tcp port xx
tcp port 80

dst 1.2.3.4
specify a destination ip address

Il y a une courbe d'apprentissage, à la fois pour utiliser tcpdump et pour apprendre à analyser les données que vous collectez. Pour plus de lecture, je vous suggère fortement Introduction à tcpdump avec des exemples de Daniel Miessler .

    
réponse donnée Panther 07.02.2013 - 05:37
la source
16

Installez d'abord tcpflow à partir des dépôts officiels d'Ubuntu:

sudo apt-get install tcpflow

Ensuite, exécutez cette commande pour inspecter toutes les requêtes HTTP sur le port standard:

sudo tcpflow -p -c port 80
    
réponse donnée Vanni Totaro 31.07.2015 - 12:47
la source
12

Je vous suggère d’essayer Wireshark

Veuillez noter que Wireshark est assez avancé et qu’il faudra peut-être un peu de temps pour s’y habituer. Je ne l'ai pas utilisé depuis quelques années, mais il devrait toujours être parfait pour ce que vous recherchez, sinon un peu trop de fonctionnalités.

Vous trouverez des informations sur Wireshark et son utilisation sur la page d'accueil de Wireshark .

    
réponse donnée CruzBishop 07.02.2013 - 00:34
la source
2

Aussi possible avec la commande, qui donne une sortie ordonnée, même pour SSL:

sudo tcpdump dst port 80
    
réponse donnée Gediminas 29.03.2018 - 10:30
la source

Lire d'autres questions sur les étiquettes