Frage Überwachen des HTTP-Datenverkehrs mit tcpdump


Um den HTTP-Datenverkehr zwischen einem Server und einem Webserver zu überwachen, verwende ich derzeit tcpdump. Das funktioniert gut, aber ich möchte einige überflüssige Daten in der Ausgabe loswerden (ich weiß davon tcpflow und wireshark, aber sie sind in meiner Umgebung nicht ohne weiteres verfügbar).

Von dem tcpdump man seite:

Um alle IPv4-HTTP-Pakete zu und von Port 80 zu drucken, d. H. Nur Pakete zu drucken, die Daten enthalten, zum Beispiel 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) '

stellt die folgende Ausgabe bereit:

19: 44: 03.529413 IP 192.0.32.10.http> 10.0.1.6.52369: Flags [P.], seq. 918827135: 918827862, ack 351213824, Gewinn 4316, Optionen [nop, nop, TS val 4093273405 ecr 869959372], Länge 727

E ..... @ ....... .... P..6.0 ......... D ......   __ .. e = 3 ...__ HTTP / 1.1 200 OK   Server: Apache / 2.2.3 (Roter Hut)   Inhaltstyp: text / html; Zeichensatz = UTF-8   Datum: Sa, 14 Nov 2009 18:35:22 GMT   Alter: 7149
  Inhaltslänge: 438

<HTML>   <Kopf>     <TITLE> Beispiel Webseite </ TITLE>   </ Kopf>   <Körper>
  <p> Sie haben diese Webseite erreicht ... </ p>   </ BODY>   </ HTML>

Dies ist fast perfekt, außer für den hervorgehobenen Teil. Was ist das, Ende - noch wichtiger - wie kann ich es loswerden? Vielleicht ist es nur eine kleine Änderung am Ausdruck am Ende des Befehls?


41
2017-11-14 18:58


Ursprung




Antworten:


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

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

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

Es benötigt die gleichen Argumente wie tcpdump (gleiche Bibliothek), aber da es ein Analysator ist, kann es Deep Packet Inspection durchführen, so dass Sie Ihre Filter noch mehr 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"'


38
2017-11-14 21:29



Danke - nachdem Sie alle Vorschläge ausprobiert haben, scheint Tshark das beste Werkzeug für den Job zu sein. Ich verwende derzeit "tshark -d tcp.port == 8070, http -R 'http.request oder http.response'". Nun, wenn ich nur Tshark dazu bringen könnte "dem tcp-Stream zu folgen", so wie wireshark das kann (Das wird oft gefragt, aber ich habe die Antwort immer noch nicht gefunden). "-V" zeigt Informationen über die TCP- und IP-Pakete usw. an, an denen ich nicht interessiert bin. Aber ich denke, dass ich das mit einem Skript entfernen kann. - otto.poellath
Sie können auch in einem Capture-Filter nach "GET" suchen, indem Sie die ASCII-Werte für jedes Zeichen vergleichen: tcp port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420. Ich habe vor einer Weile eine Seite zur Wireshark-Website hinzugefügt, mit der Sie String-passende Capture-Filter erstellen können: wireshark.org/tools/string-cf.html - Gerald Combs


Sieh dir das an ngrep - Es wird dir nützlich sein.

als Referenz für andere httpry [Server scheint jetzt herunterzufallen, aber ich hoffe, es ist vorübergehend] und tshark sind auch nützlich für die passive Protokollanalyse - erstens nur für http, zweitens für viel mehr.


18
2017-11-14 21:56



+1 für ngrep. Sehr nützliches Werkzeug. - tylerl
ngrep und httpry sehen definitiv nützlich aus, aber ngrep ist sich nicht über HTTP und AFAIK im Klaren, httpry arbeitet 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 erhalten. - pQd
Imo, ngrep ist 100000x besser als tcpdump - DanFromGermany


Versuchen httpry oder Justniffer

Justniffer arbeitet gut mit TCP-Paketen, die Retrommissions und IP-Fragmentierung neu anordnen


5
2017-09-13 18:22



Vielen Dank! Justniffer ist, was ich gesucht habe (ich denke, es ist das einzige Tool erwähnt, das ist sehr einfach und misst die Anfragedauer). - gkop


Ich würde vorschlagen, eine verdummte down 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 suchen, können Sie die Kommunikation auf kohärente Art und Weise für die Analyse wiederherstellen.

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


1
2017-11-15 03:24





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


0
2017-11-14 21:31



Deutlich. Ich kann mir vorstellen, dass er schon daran gedacht hat. Manchmal ist es nützlich, die tatsächlichen Daten zwischen Punkt A und Punkt B zu überwachen. - tylerl


Es gibt verschiedene Tools auf dem Markt, 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 Werkzeuge.


0
2017-07-03 07:46



Danke für deine Vorschläge. 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