Wie überprüfe ich ausgehende HTTP-Anforderungen einer einzelnen Anwendung?

69

Meine Anwendung sendet HTTP-Anforderungen an einen Server und ich möchte die tatsächlichen Daten sehen, die gesendet werden. Einige Besonderheiten, die ich gerne sehen würde:

  • Anforderungsmethode (GET / POST / PUT usw.)
  • Inhaltstyp
  • Körper

Was ist der beste und einfachste Weg, um dies zu erreichen?

Mega
quelle
"Anforderungsmethode, Inhaltstyp, Text und etc." Sprechen Sie über HTTP-spezifische Inspektion? Ist es zufällig HTTPS (gesichert)?
gertvdijk
Ja, Sie haben Recht, aber es wird nicht per Browser
gesendet
Sorry, es ist nur HTTP-Anfragen
Mega
3
Okay, dann ist das in Ordnung. Ist es nur ein oder eine kleine Gruppe von Servern, mit denen er spricht? Und keine anderen Anwendungen sprechen mit diesen Servern? Wenn beide ja, dann ist die Antwort über Wireshark, was ich gehen würde. Erfahren Sie, wie es funktioniert. Es ist nicht so schwer.
gertvdijk

Antworten:

71

Nun, für all diese tcpdump Fans =)

FÜHREN SIE ALLE DIESEN BEFEHLE ALS WURZEL AUS !!!

Beziehen Sie root in einem Terminal mit

sudo -i

So erfassen Sie die RAW-Pakete ...

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

Dadurch werden alle Rohpakete an allen Ports und Schnittstellen erfasst und in eine Datei geschrieben /tmp/http.log.

Führen Sie Ihre Anwendung aus. Es ist natürlich hilfreich, wenn Sie keine anderen Anwendungen ausführen, die HTTP (Webbrowser) verwenden.

Töten tcpdump

killall tcpdump

Verwenden Sie zum Lesen des Protokolls das -AFlag und leiten Sie die Ausgabe weiter an less:

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

Das -AFlag druckt den "Payload" - oder ASCII-Text in den Paketen aus. Dadurch wird die Ausgabe an gesendet less. Sie können die Seite nach oben und unten verschieben. Geben Sie zum Beenden lessFolgendes ein Q.

Wenn ich zu Google gehe, sehe ich (in den Rohpaketen):

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

tcpdumpEs stehen zahlreiche Optionen zur Verfügung, mit denen die Datenerfassung von der Angabe der Netzwerkschnittstellen zu den Ports für Quell- und Ziel-IP-Adressen verfeinert werden kann. Es kann NICHT entschlüsselt werden (daher funktioniert es nicht mit HTTPS).

Sobald Sie wissen, woran Sie interessiert sind, können Sie eine Reihe von Optionen verwenden tcpdump, um nur die Daten von Interesse aufzuzeichnen. Die allgemeine Strategie besteht darin, zuerst alle Pakete aufzuzeichnen, die Rohdaten zu überprüfen und dann nur die interessierenden Pakete zu erfassen.

Einige hilfreiche Flags (Optionen):

-i Specify an interface
-i eth0

tcp port xx
tcp port 80

dst 1.2.3.4
specify a destination ip address

Es gibt eine Lernkurve zum Verwenden tcpdumpund Analysieren der von Ihnen gesammelten Daten. Für die weitere Lektüre empfehletcpdump ich Daniel Miesslers Primer mit Beispielen .

Panther
quelle
1
dies erfasst nichts auf meinem Ubuntu 14.04. Mein Laptop verbindet sich über einen WLAN-Router mit dem Internet. Würde das die Verwendung von tcpdump beeinflussen? Wenn ich es töte, heißt es nur, 0 packets captured 0 packets received by filter 0 packets dropped by kernel aber ich habe eine Reihe von Websites im Chrome-Browser geöffnet, als tcpdump überwacht wurde.
Faizal
1
ahh der verlinkte artikel hat geholfen. tcpdump -i any -w /tmp/http.log &hat funktioniert.
Faizal
22

Zuerst tcpflowvon den offiziellen Ubuntu-Repositories installieren :

sudo apt-get install tcpflow

Führen Sie dann diesen Befehl aus, um alle HTTP-Anforderungen am Standardport zu überprüfen:

sudo tcpflow -p -c port 80
Vanni Totaro
quelle
1
und wo kann man die Ergebnisse sehen? Danke!
Gediminas
2
@Gediminas Sie können die Ausgabe im Terminal sehen. Bitte beachten Sie, dass der HTTPS-Verkehr nicht angezeigt wird. Besuchen Sie einen HTTP- Server
Vanni Totaro
1
Viel praktischer als der tcpdump, wenn Sie nur die Anfragen sehen möchten und nicht mit allen TCP-Details (syn, ack ...)
fertig werden müssen
13

Ich würde vorschlagen, dass Sie Wireshark versuchenInstallieren Sie Wireshark

Bitte beachten Sie, dass Wireshark ziemlich weit fortgeschritten ist und daher etwas gewöhnungsbedürftig sein kann. Ich habe es ein paar Jahre nicht benutzt, aber es sollte immer noch perfekt für das sein, was Sie suchen - wenn nicht ein bisschen zu voll mit Funktionen.

Informationen zu Wireshark und seiner Verwendung finden Sie auf der Wireshark-Homepage .

CruzBishop
quelle
1
Dies funktioniert nicht für einen einzelnen Prozess. Sie werden den gesamten Verkehr auf der Schnittstelle erhalten und Sie werden es von IP - Filter müssen / Protokoll usw. wireshark - Filter nach Prozess / pid
gertvdijk
ja, aber es ist leicht mit der Wireshark-Schnittstelle zu bewerkstelligen.
Panther
2
Ich habe schon einmal Wireshark ausprobiert und es ist zu fortgeschritten für mich. Ich suche nach einer anderen Option
Mega
4
Die andere Option ist tcpdump. tcpdump ist ein Kommandozeilen-Tool, das problemlos funktioniert, jedoch eine steilere Lernkurve aufweist. danielmiessler.com/study/tcpdump
Panther
1
@gertvdijk - wie Sie möchten;) Fühlen Sie sich frei, um die Grundlagen hinzuzufügen
Panther
5

Auch mit Kommando möglich, das auch für SSL eine ordentliche Ausgabe liefert:

sudo tcpdump dst port 80
Gediminas
quelle