Überwachen des HTTP-Verkehrs mit tcpdump

42

Zur Überwachung des HTTP-Verkehrs zwischen einem Server und einem Webserver verwende ich derzeit tcpdump. Dies funktioniert einwandfrei, aber ich möchte einige überflüssige Daten in der Ausgabe entfernen (ich weiß über tcpflowund Bescheid wireshark, aber sie sind in meiner Umgebung nicht ohne weiteres verfügbar).

Von der tcpdumpManpage:

Alle IPv4-HTTP-Pakete an und von Port 80 drucken, dh nur Pakete drucken, die Daten enthalten, z. B. keine SYN- und FIN-Pakete und nur ACK-Pakete.

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

Dieser Befehl

sudo tcpdump -A 'src example.com und tcp port 80 und (((ip [2: 2] - ((ip [0] & 0xf) << 2)) - ((tcp [12] & 0xf0) >> 2) )! = 0) '

liefert folgende Ausgabe:

19: 44: 03.529413 IP 192.0.32.10.http> 10.0.1.6.52369: Flags [P.], seq 918827135: 918827862, ack 351213824, win 4316, options [nop, nop, TS val 4093273405 ecr 869959372], length 727

E ..... @ ....... .... P..6.0 ......... D ...... __ .. e = 3 ...__ HTTP / 1.1 200 OK Server: Apache / 2.2.3 (Red Hat) Inhaltstyp: text / html; Zeichensatz = UTF-8 Datum: Samstag, 14. November 2009 um 18:35:22 Uhr GMT Alter: 7149
Länge des Inhalts: 438

<HTML> <HEAD> <TITLE> Beispiel-Webseite </ TITLE> </ HEAD> <body>
<p> Sie haben diese Webseite erreicht ... </ p> </ BODY> </ HTML>

Dies ist fast perfekt, mit Ausnahme des hervorgehobenen Teils. Was ist das, Ende - was noch wichtiger ist - wie werde ich es los? Vielleicht ist es nur eine kleine Änderung des Ausdrucks am Ende des Befehls?

otto.poellath
quelle

Antworten:

39

tcpdump druckt komplette Pakete. "Garbage", wie Sie sehen, sind eigentlich TCP-Paket-Header.

Sie können die Ausgabe sicherlich mit einem Perl-Skript massieren, aber warum nicht stattdessen tshark, die Textversion von wireshark, verwenden?

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

Es verwendet dieselben Argumente wie tcpdump (dieselbe Bibliothek), aber da es sich um einen Analysator handelt, kann es eine eingehende Paketprüfung durchführen, damit Sie Ihre Filter noch weiter verfeinern können, d. h

tshark 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' -R'http.request.method == "GET" || http.request.method == "HEAD"'

Aleksandar Ivanisevic
quelle
1
Vielen Dank - nachdem Sie alle Vorschläge ausprobiert haben, scheint tshark das beste Werkzeug für diesen Job zu sein. Ich verwende derzeit "tshark -d tcp.port == 8070, http -R 'http.request oder http.response'". Wenn ich jetzt nur tshark dazu bringen könnte, "dem tcp-Stream zu folgen", genau wie wireshark es kann (Dies wird oft gefragt, aber ich habe immer noch keine Antwort gefunden). "-V" zeigt Informationen zu den TCP- und IP-Paketen usw. an, an denen ich nicht interessiert bin. Aber ich denke, ich kann dies mithilfe eines Skripts entfernen.
otto.poellath
4
Sie können auch durch Anpassen der ASCII - Werte für jedes Zeichen für „GET“ in einem Capture - Filter suchen: tcp port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420. Ich habe vor einiger Zeit eine Seite zur Wireshark-Website hinzugefügt, die Ihnen hilft, Capture-Filter für Zeichenfolgen zu erstellen: wireshark.org/tools/string-cf.html
Gerald Combs
18

Schauen Sie sich ngrep an - es könnte für Sie von Nutzen sein.

als referenz für andere httpry [server scheint derzeit nicht verfügbar zu sein, aber ich hoffe, es ist nur vorübergehend] und tshark sind auch nützlich für die passive Protokollanalyse - erstens nur für http, zweitens - für vieles mehr.

pQd
quelle
2
+1 für ngrep. Sehr nützliches Werkzeug.
tylerl
ngrep und httpry sehen auf jeden Fall nützlich aus, aber ngrep kennt HTTP und AFAIK nicht, httpry funktioniert nur mit HTTP-Headern und kann die Nutzdaten nicht anzeigen.
otto.poellath
@sapporo - sure - ngrep ist protokollunabhängig, aber Sie können den pcap-Filter "port 80" hinzufügen und in den meisten Fällen nur http-Verkehr abrufen.
pQd 18.11.09
Imo, ngrep ist 100000x besser als tcpdump
Daniel W.
5

Versuchen Sie es mit httpry oder justniffer

Justniffer eignet sich gut für TCP-Pakete, die Retrasmissionen und IP-Fragmentierungen neu anordnen

Mole24
quelle
1
Vielen Dank! Ich habe nach justniffer gesucht (ich denke, es ist das einzige erwähnte Tool, das sehr einfach ist und die Anforderungsdauer misst).
gkop
1

Ich würde vorschlagen, eine heruntergekommene tcpdump-Befehlszeile zu verwenden, die alles in einer pcap-Datei für den Postprozess speichert. Je nachdem, was genau Sie bei der Diagnose von tcpflow betrachten, können Sie die Kommunikation zur Analyse auf kohärente Weise wieder zusammenstellen.

Einige andere gute Informationen, einschließlich einiger Verwendungszwecke für httpry, finden Sie unter: http://taosecurity.blogspot.com/2008/06/logging-web-traffic-with-httpry.html

ScottZ
quelle
0

Produziert der von Ihnen verwendete Webserver keine Protokolle? Sicherlich wäre das eine viel bessere Möglichkeit, den HTTP-Verkehr zu überwachen. Es gibt eine Vielzahl von Tools zur Analyse der Daten, und jeder kompetente Webserver sollte zuverlässige Protokolle erstellen.

JamesHannah
quelle
4
Deutlich. Ich kann mir aber vorstellen, dass er bereits darüber nachgedacht hat. Manchmal ist es nützlich, die tatsächlichen Daten zu überwachen, die zwischen Punkt A und Punkt B
gesendet werden
0

Auf dem Markt sind verschiedene Tools erhältlich, die speziell für die Überwachung des HTTP-Datenverkehrs entwickelt wurden. Fiddler2 ( http://www.fiddler2.org ) und HTTP Debugger Pro sind Beispiele für solche Tools.


quelle
4
Vielen Dank für Ihre Anregungen. Leider scheinen beide Tools nur unter Windows zu funktionieren. Ich hatte es nicht erwähnt, aber ich suche nach etwas, das unter Linux funktioniert.
otto.poellath