So geben Sie mit Apache vollständige HTTP-Anforderungen aus

27

Ist es möglich, ganze HTTP-Anfragen per Apache zu sichern? Ich muss alle HTTP-Header eingehender Anfragen nachverfolgen. Wie geht das?

Alex
quelle

Antworten:

30

Ich denke, was Sie anstelle von Apache wollen, könnte ein Paketanalysator sein , auch als Paket-Sniffer bekannt. Zwei der beliebtesten sind wahrscheinlich TCPDump und Wireshark . Beide sind kostenlos und haben Versionen für Windows und * nix. Diese zeigen Ihnen den gesamten eingehenden Datenverkehr auf einer Benutzeroberfläche, nicht nur das, was Apache sieht. Sie können jedoch Filter verwenden, um die Beschränkung auf einen bestimmten Port vorzunehmen, z. B. 80 für http.

tcpdump:
Der folgende Befehl, der vom Server ausgeführt wird, zeigt Ihnen alle Pakete an, die für Port 80 bestimmt sind:

sudo tcpdump -s 0 -X 'tcp dst port 80'

Der Capital X-Switch speichert die Nutzdaten in Hex und ASCII. Der Schalter s mit 0 bedeutet, dass das gesamte Paket abgerufen wird. "tcp dst port 80" bedeutet, dass im tcp-Header nur für Port 80 bestimmte Pakete gefiltert und angezeigt werden.

Wireshark:
Für die benutzerfreundlichere Version, wenn Sie eine grafische Benutzeroberfläche verwenden, sollten Sie wireshark (formal als ethereal bezeichnet) in Betracht ziehen.

Kyle Brandt
quelle
1
Danke Kyle, wie extrahiere ich HTTP-Header-Informationen aus tcpdumps Ausgabe?
Alex
1
Alex: Weißt du was, Wireshark wird das viel einfacher machen. Sie können den Speicherauszug mit dem Dateinamen -r in einer Datei speichern und dann mit wireshark auf Ihrem Desktop öffnen.
Kyle Brandt
Oh, und lassen Sie das "dst" fallen, wenn Sie die Antworten auch wollen.
Kyle Brandt
1
-ANur für Text (kein Hex-Dump):sudo tcpdump -A -s 0 'tcp dst port 80'
Brent Faust
12

vielleicht Kekse wegwerfen ? ansonsten - schau dir mod_dumpio an .

pQd
quelle
1
mod_dumpio klingt cool! Wahrscheinlich der einfachere Weg, die Informationen mit SSL zu sichern (obwohl wirehsark das auch kann). +1 :-)
Kyle Brandt
8

Mit ngrep, einem Hybrid aus tcpdump und grep, ist das einfache Packet Sniffing einfach. In bestimmten Szenarien möchten Sie sehen, wie Webbrowser mit Webservern kommunizieren, und die HTTP-Header überprüfen.
Führen Sie in diesem Beispiel ein ngrep auf einem Webserver wie folgt aus:

$ ngrep port 80

Sie können auch festlegen, dass die http-Anforderung nach "GET /" -Anforderung für Port 80 gefiltert wird, indem Sie:

$ ngrep -q '^GET .* HTTP/1.[01]'

Clientseitig gibt es ein nützliches Tool namens Tamper Data, eine Firefox-Erweiterung, mit der Sie ausgehende HTTP-Anforderungen anzeigen, aufzeichnen und sogar ändern können.
Weitere Informationen finden Sie hier

Ali Mezgani
quelle
7

Verwenden Sie tcpflow, anstatt tcpdump oder wireshark zu verwenden. Dies ist ein Ersatz für tcpdump, erstellt jedoch eine Datei für jede Seite jeder Verbindung, sodass Sie nicht versuchen müssen, den Stream selbst zu dekodieren.

David Pashley
quelle
Danke dafür. Ich benutze mod_negotiate und meine curl () hat .bak-Dateien gegenüber .php vorgezogen, während Browser die .php gefunden haben. Eine harte Nuss.
McKenzm
0

Apache hat diese Funktionalität eingebaut; Erhöhen Sie einfach die Protokollebene auf trace7oder trace8:

LogLevel trace8

Beachten Sie, dass dadurch viele Daten gesichert werden. Du wurdest gewarnt.

Wouter Verhelst
quelle