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

70

Mon application envoie des requêtes HTTP à un serveur 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.)
  • Type de contenu
  • Corps

Quel est le moyen le plus simple et le meilleur pour accomplir cela?

mégas
la source
"méthode de requête, type de contenu, corps, etc." Parlez-vous de l'inspection spécifique à HTTP? Est-ce que c'est HTTPS (sécurisé) par hasard?
Gertvdijk
Oui, vous avez raison, mais l'envoi n'est pas effectué par le navigateur
megas.
Désolé, ce sont juste des requêtes HTTP
megas
3
Ok, c'est bon alors. S'agit-il d'un seul ou d'un petit ensemble de serveurs? Et aucune autre application ne parle à ces serveurs? Si les deux répondent par l'affirmative, la réponse à propos de Wireshark est ce que je choisirais. Apprenez comment cela fonctionne. Ce n'est pas si dur.
gertvdijk

Réponses:

71

Eh bien, pour tous ces fans de tcpdump =)

LANCEZ TOUTES CES COMMANDES COMME RACINE !!!

Obtenir la racine dans un terminal avec

sudo -i

Pour capturer les paquets RAW ...

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

Cela 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 est évidemment utile si vous n'exécutez aucune autre application utilisant HTTP (navigateurs Web).

Tuer tcpdump

killall tcpdump

Pour lire le journal, utilisez l' -Aindicateur et dirigez la sortie vers less:

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

Le -Adrapeau imprime la "charge utile" ou le texte ASCII dans les paquets. Cela enverra la sortie à less, vous pouvez page en haut et en bas. Pour sortir 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
E..~.v@[email protected]......!#...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

tcpdumpa une longue série d’options pour affiner la collecte de données en spécifiant des interfaces réseau aux ports en adresses IP source et de destination. Il ne peut PAS déchiffrer (donc cela ne fonctionnera pas avec HTTPS).

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

Quelques drapeaux 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 existe une courbe d'apprentissage, à la fois pour utiliser tcpdumpet apprendre à analyser les données que vous collectez. Pour plus de lecture, je suggère fortement l’ tcpdumpAbécédaire de Daniel Miessler avec exemples .

Panthère
la source
1
cela ne capture rien sur mon Ubuntu 14.04. Mon ordinateur portable se connecte à Internet via un routeur wifi. Est-ce que cela ferait une différence dans l'utilisation de tcpdump? Quand je le tue, cela signifie simplement que 0 packets captured 0 packets received by filter 0 packets dropped by kernel j'ai ouvert un tas de sites dans le navigateur Chrome lorsque tcpdump surveillait.
Faizal
1
ahh l'article lié a aidé. tcpdump -i any -w /tmp/http.log &travaillé.
Faizal
22

Première installation à tcpflowpartir des dépôts officiels Ubuntu:

sudo apt-get install tcpflow

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

sudo tcpflow -p -c port 80
Vanni Totaro
la source
1
et où voir les résultats? Je vous remercie!
Gediminas
2
@Gediminas vous pouvez voir la sortie dans le terminal. Veuillez noter que le trafic HTTPS n'est pas affiché. Essayez de visiter un site Web
Vanni Totaro
1
Beaucoup plus pratique que le tcpdump si vous êtes simplement intéressé à voir les demandes et ne pas traiter tous les détails TCP (syn, ack ...)
Herm
13

Je vous suggère d'essayer WiresharkInstaller Wireshark

S'il vous plaît noter que Wireshark est assez avancé, et peut donc prendre un peu de temps pour s'y habituer. Je ne l'utilise pas depuis quelques années, mais il devrait quand même être parfait pour ce que vous voulez, sinon un peu trop de fonctionnalités.

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

CruzBishop
la source
1
Cela ne fonctionne pas pour un seul processus. Vous obtiendrez tout le trafic sur l'interface et vous devrez le filtrer par IP / protocole, etc. wireshark - filtrer par processus / pid
gertvdijk
oui, mais cela se fait facilement avec l’interface Wirehark.
Panther
2
J'ai déjà essayé WireShark et c'est trop avancé pour moi, je cherche une autre option
megas
4
L'autre option est tcpdump. tcpdump est un outil en ligne de commande, fera facilement le travail, mais a une courbe d'apprentissage plus abrupte. danielmiessler.com/study/tcpdump
Panther
1
@gertvdijk - comme vous le souhaitez;) N'hésitez pas à ajouter à l'essentiel
Panther
5

Également posible avec la commande, ce qui donne une sortie ordonnée, même pour SSL:

sudo tcpdump dst port 80
Gediminas
la source