it-swarm.com.de

Kann ich tcpdump verwenden, um HTTP-Anforderungen, Antwortheader und Antworttext abzurufen?

Ich verwende tcpdump, um HTTP-Daten durch Ausführen des folgenden Befehls abzurufen:

Sudo tcpdump -A -s 1492 dst port 80

Das Ergebnis des obigen Befehls:

  1. Header, ich denke Anfrage- und Antwortheader.
  2. Nicht lesbare Daten.
  3. Die URL GET /modules/mod_news_pro_gk1/cache/stories.ilbalad.ajayeb.strange-tractor.jpg.

Ich benötige ein eindeutigeres Ergebnis, z. B. lesbare Anfrage> Antwortheader> Antworttext usw. Wie kann ich meine Ergebnisse filtern?

59
kimo

Es gibt tcpdump-Filter für HTTP GET & HTTP POST (oder für beide plus Nachrichtentext):

  • Lauf man tcpdump | less -Ip examples um einige Beispiele zu sehen

  • Hier ist ein tcpdump-Filter für HTTP GET:

    Sudo tcpdump -s 0 -A 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'
    
  • Hier ist ein tcpdump-Filter für HTTP POST:

    Sudo tcpdump -s 0 -A 'tcp dst port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354)'
    
  • Überwachen Sie den HTTP-Datenverkehr einschließlich der Anforderungs- und Antwortheader und des Nachrichtentexts ( source ):

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

Weitere Informationen zum Bit-Twiddling im TCP Header finden Sie unter: String-Matching Capture Filter Generator (Link zu Sake Bloks Erklärung).

171
paulz

Ich würde die Verwendung von Wireshark empfehlen, das eine "Follow TCP Stream" -Option hat, die es sehr einfach macht, die vollständigen Anfragen und Antworten für ein bestimmtes zu sehen TCP connection. Wenn Sie lieber die Befehlszeile verwenden möchten, können Sie tcpflow ausprobieren, ein Tool, mit dem der Inhalt von TCP) erfasst und wiederhergestellt werden kann Streams.

Andere Optionen wären die Verwendung eines HTTP-Debugging-Proxys wie Charles oder Fiddler , wie EricLaw vorschlägt. Diese bieten den Vorteil, dass HTTP spezifisch unterstützt wird, um den Umgang mit verschiedenen Arten von Codierungen und anderen Funktionen wie dem Speichern von Anforderungen zum Wiedergeben oder dem Bearbeiten von Anforderungen zu vereinfachen.

Sie können auch ein Tool wie Firebug (Firefox), Web Inspector (Safari, Chrome und andere WebKit-basierte Browser) oder Opera Dragonfly verwenden =, die alle die Möglichkeit bieten, die Anforderungs- und Antwortheader und -körper anzuzeigen (obwohl die meisten von ihnen nicht den genauen Bytestream anzeigen, sondern nur, wie die Browser die Anforderungen analysiert haben).

Und schließlich können Sie Anforderungen immer von Hand erstellen, indem Sie etwas wie telnet, netcat oder socat verwenden, um eine Verbindung zu Port 80 herzustellen und die Anforderung manuell einzugeben, oder ein Tool wie htty zur einfachen Erstellung einer Anfrage und Überprüfung der Antwort.

34
Brian Campbell

Hier ist eine andere Wahl: Chaosreader

Ich muss also eine Anwendung debuggen, die XML an eine Drittanbieteranwendung sendet. Ich habe ein geniales kleines Perl-Skript gefunden, das die ganze harte Arbeit erledigt - Sie werfen es einfach in eine tcpdump-Ausgabedatei, und es erledigt alle Manipulationen und gibt alles aus, was Sie brauchen ...

Das Skript heißt chaosreader0.94. Siehe http://www.darknet.org.uk/2007/11/chaosreader-trace-tcpudp-sessions-from-tcpdump/

Es hat wunderbar geklappt, ich habe folgendes gemacht:

tcpdump Host www.blah.com -s 9000 -w outputfile; Perl chaosreader0.94 outputfile
6
thinker007