Sofortige Überwachung von HTTP-Anforderungen auf einer Netzwerkschnittstelle?


79

Zu Debugging-Zwecken möchte ich die http-Anforderungen auf einer Netzwerkschnittstelle überwachen.

Bei Verwendung einer naiven tcpdumpBefehlszeile erhalte ich zu viele Informationen auf niedriger Ebene, und die benötigten Informationen sind nicht sehr klar dargestellt.

Das Ablegen des Datenverkehrs über tcpdumpeine Datei und die anschließende Verwendung wiresharkhat den Nachteil, dass der Datenverkehr nicht im laufenden Betrieb ausgeführt wird.

Ich stelle mir eine Werkzeugnutzung wie diese vor:

$ monitorhttp -ieth0 --only-get --just-urls
2011-01-23 20:00:01 GET http://foo.example.org/blah.js
2011-01-23 20:03:01 GET http://foo.example.org/bar.html
...

Ich benutze Linux.


Es ist die gleiche Frage auf beantwortet superuser.com/questions/67428/possible-to-catch-urls-in-linux
AlexD

Antworten:


100

Versuchen Sie tcpflow:

tcpflow -p -c -i eth0 port 80 | grep -oE '(GET|POST|HEAD) .* HTTP/1.[01]|Host: .*'

Die Ausgabe ist wie folgt:

GET /search?q=stack+exchange&btnI=I%27m+Feeling+Lucky HTTP/1.1
Host: www.google.com

Sie können der grep-Anweisung natürlich zusätzliche HTTP-Methoden hinzufügen und seddie beiden Zeilen zu einer vollständigen URL kombinieren.


Ein Vorteil von tcpflowist, dass es bereits in den Standard-Repositories von Ubuntu 10.04 verfügbar ist (justsniffer, httpry nicht). In den Paketinformationen wird angegeben, dass IP-Fragmente nicht ordnungsgemäß aufgezeichnet werden. Sie wissen nicht, ob dies für diesen Anwendungsfall von Bedeutung ist. Vielleicht kann justsniffer sie besser verarbeiten.
maxschlepzig

Da Sie nur die URL abrufen, scheint es nicht wichtig zu sein. Tcpflow zeigt die Pakete in der Reihenfolge an, in der sie auf der Schnittstelle eingegangen sind. Wenn Sie also versuchen, Dateiinhalte zu erfassen, erhalten Sie Pakete, die nicht in der richtigen Reihenfolge eintreffen und eine beschädigte Datei erzeugen. Aber Ihr Anwendungsfall, der in der Frage aufgeführt ist, wird meiner Meinung nach für Sie funktionieren. Sie können auch Ihr grep erweitern (oder das -o entfernen), um mehr von den Paketdaten zum Sortieren oder was nicht später zu sehen.
Bahamat

@bahamat Kann "tcpflow" mit der https-URL funktionieren?
Maulik Patel

Zunehmend lautet die Antwort nein. In der Vergangenheit war SSL schwach genug, um bei Zugriff auf den für den Datenfluss verwendeten Schlüssel den mit diesem Schlüssel verwendeten Datenverkehr zu entschlüsseln. Heutzutage verwenden die meisten Sites die Geheimhaltung der Weiterleitung und handeln kurzlebige Schlüssel aus. Die beste Option ist heute ein sogenannter "Bump in the Wire" -Transparent-Proxy.
Bahamat

1
habe beim Browsen nichts von wifi mitbekommen: sudo tcpflow -p -c -i wlo2 port 80 | grep -oe '(GET | POST | HEAD) * HTTP / 1 [01] | Host:... *'
ses

23

Sie können dazu httpry oder Justniffer verwenden.

httpry ist zB über das Fedora-Paket-Repository verfügbar.

Beispielaufruf:

# httpry -i em1

(wobei em1ein Netzwerkschnittstellenname bezeichnet wird)

Beispielausgabe:

2013-09-30 21:35:20    192.168.0.1     198.252.206.16    >    POST    unix.stackexchange.com    /posts/6281/editor-heartbeat/edit    HTTP/1.1
2013-09-30 21:35:20    198.252.206.16  192.168.0.1       < HTTP/1.1   200    OK
2013-09-30 21:35:49    192.168.0.1     198.252.206.16    >    POST    unix.stackexchange.com    /posts/validate-body                 HTTP/1.1
2013-09-30 21:35:49    198.252.206.16  192.168.0.1       < HTTP/1.1   200    OK
2013-09-30 21:33:33    192.168.0.1      92.197.129.26    >    GET     cdn4.spiegel.de    /images/image-551203-breitwandaufmacher-fgoe.jpg    HTTP/1.1

(Ausgabe ist etwas gekürzt)


Wie kann ich den Header oder den Text der Anfrage oder Antwort anzeigen?
Mohammed Noureldin

habe nichts sudo httpry -i wlo2 (wo wlo2 ist von wifi Gerätenamen)
ses

7

Ich suchte nach etwas ähnlichem, mit der zusätzlichen Anforderung, dass es auch für https funktionieren sollte .

pcap-basierte tools wie tcpflow httpry urlsnarfund andere tcpdump kung fu funktionieren gut für http, aber für sichere anfragen haben sie kein glück.

Ich habe mir urldump ausgedacht , eine kleine Hülle um mitmproxy .
iptableswird verwendet, um den Datenverkehr zum Proxy umzuleiten, damit er transparent funktioniert.

$ sudo urldump   
http://docs.mitmproxy.org/en/stable/certinstall.html
http://docs.mitmproxy.org/en/stable/_static/js/modernizr.min.js
https://media.readthedocs.org/css/sphinx_rtd_theme.css
https://media.readthedocs.org/css/readthedocs-doc-embed.css
https://media.readthedocs.org/javascript/readthedocs-doc-embed.js
...

Weitere Informationen finden Sie in der README- Datei.


1

Ich denke, Wireshark kann tun, was Sie wollen

Positiv zu vermerken ist, dass es sehr leistungsfähig ist. Sie können es über apt-get installieren und es wird mit einer grafischen Benutzeroberfläche geliefert.

Das Filtersystem ist jedoch kompliziert - es sind jedoch gute Tutorials integriert, mit denen Sie eine Live- oder Start / Stopp-Übersicht über den Datenverkehr erhalten.

Wenn Sie das Wort "http" in den Filter eingeben, erhalten Sie wahrscheinlich das, wonach Sie suchen (dh den von den Benutzern generierten Hauptverkehr).


Ich würde gerne wissen, warum dies abgelehnt wurde. Wireshark kann die Schnittstelle im laufenden Betrieb lesen und nach nur http-Verkehr filtern.
Kevin M

@ Kevin M, Nun, ich habe deine Antwort nicht abgelehnt. Aber um fair zu sein, Ihre Antwort ist ein bisschen unvollständig und falsch. 1) Es fehlen Angaben darüber, wie genau wireshark verwendet werden soll, dh dass ein Filter verwendet werden soll, der genaue Filterausdruck usw. 2) Die in der Frage skizzierte Verwendung der Befehlszeile ist nicht möglich - auch wenn ich damit einverstanden bin Im GUI-Ansatz werden in der Standardansicht GET-Anforderungen angezeigt, bei denen der Domänenname nicht nebeneinander angezeigt wird. Dies ist für den skizzierten Anwendungsfall nicht besonders praktisch.
Maxschlepzig

Ich meine: s / deine Antwort /
Phobias


1

Es gibt auch das Kommandozeilenprogramm, urlsnarfdas Teil des dsniff- Pakets ist (das auch mit zB Fedora 19 mitgeliefert wird).

Beispiel:

# urlsnarf -i em1
urlsnarf: listening on em1 [tcp port 80 or port 8080 or port 3128]
jhost - - [29/May/2014:10:25:09 +0200] "GET http://unix.stackexchange.com/questions HTTP/1.1" - - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0"
jhost - - [29/May/2014:10:25:36 +0200] "GET http://www.spiegel.de/ HTTP/1.1" - - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0"
jhost - - [29/May/2014:10:25:36 +0200] "GET http://www.spiegel.de/layout/css/style-V5-2-2.css HTTP/1.1" - - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0"
jhost - - [29/May/2014:10:25:36 +0200] "GET http://www.spiegel.de/layout/jscfg/http/global-V5-2-2.js HTTP/1.1" - - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0"
jhost - - [29/May/2014:10:25:36 +0200] "GET http://www.spiegel.de/layout/js/http/javascript-V5-2-2.js HTTP/1.1" - - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0"
jhost - - [29/May/2014:10:25:36 +0200] "GET http://www.spiegel.de/layout/js/http/interface-V5-2-2.js HTTP/1.1" - - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0"
jhost - - [29/May/2014:10:25:36 +0200] "GET http://www.spiegel.de/layout/js/http/netmind-V5-2-2.js HTTP/1.1" - - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0"
jhost - - [29/May/2014:10:25:36 +0200] "GET http://www.spiegel.de/favicon.ico HTTP/1.1" - - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0"
jhost - - [29/May/2014:10:25:36 +0200] "POST http://ocsp.thawte.com/ HTTP/1.1" - - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0"
jhost - - [29/May/2014:10:25:36 +0200] "POST http://ocsp.thawte.com/ HTTP/1.1" - - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
[..]

(beim Surfen erst nach SE und dann nach spiegel.de)

Einschränkungen: dsnarf unterstützt kein IPv6 . Ich kann diesen Fehlerbericht mit 0.17 auf Fedora 19 reproduzieren. Scheint auch unter Ubuntu Trusty ATM kaputt zu sein (funktioniert einwandfrei unter Lucid).

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.