Wireshark: Besuchte URLs anzeigen (HTTP und HTTPS)

Wireshark 2.0 Icon

Ein Leser fragte mich, ob es mit Hilfe von Wireshark möglich ist, alle aufgerufenen Webseiten in einem Paketmitschnitt anzeigen zu lassen. Die kurze Antwort lautet ja. Allerdings ist dies nicht ganz so einfach zu realisieren, wie zunächst angenommen. Aus diesem Grund habe ich mich dazu entschlossen, einen eigenen Artikel für die Beantwortung dieser Frage zu verfassen. Darüber hinaus gibt es sicherlich mehrere Personen im Internet, welche die gleiche Frage stellen und sich über meinen Artikel freuen dürften.

Als Grundlage für das weitere Vorgehen setze ich einen vorhandenen Paketmitschnitt und eine aktuelle Version von Wireshark voraus. Beim Einsatz einer FRITZ!Box könnt ihr schnell und einfach einen Paketmitschnitt direkt am Router anfertigen. Dies funktioniert über die URL http://fritz.box/support.lua. Beim Anfertigen des Artikels kam Wireshark in Version 2.2.7 zum Einsatz.

HTTP-URLs

Hier ist anzumerken, dass alle HTTP-URLs angezeigt werden, wodurch es schnell unübersichtlich werden kann. Jeder Webseitenaufruf besteht aus mehreren HTTP-Requests, d.h. es wird nicht nur die URL des initialen Aufrufs angezeigt, sondern die URLs aller Requests. Heutzutage laden Webseiten viele Ressourcen von externen URLs nach, die dann ebenfalls in Wireshark auftauchen.

Das Anzeigen der HTTP-URLs ist relativ schnell erledigt. Wenn der Paketmitschnitt geladen wurde, reicht es aus, im Menü “Statistiken”, “HTTP” und “Anfragen” zu öffnen.

Wireshark HTTP-Anfragen

Jetzt erscheint ein Fenster, in welchem alle URLs angezeigt werden.

Wireshark HTTP-Anfragen

Die URLs können allerdings auch als Spalte im Hauptfenster von Wireshark angezeigt werden, was meiner Meinung nach komfortabler ist. Dazu sollte im Anzeigefilter zunächst nach HTTP-Requests gefiltert werden:

http.request

Anschließend einfach das erste Paket markieren und in der Detailansicht “Hypertext Transfer Protocol” aufklappen. Dort einen Rechtsklick auf die Zeile “Host: ” ausführen und dann im Menü “Als Spalte anwenden” klicken.

Wireshark HTTP-Hosts als Spalte setzen

Schon erscheint die neue Spalte “Host” und zeigt neben jedem HTTP-Paket die entsprechende Host-URL an. Mit einem Klick auf die Spalte können die Ergebnisse übersichtlich sortiert werden.

Wireshark HTTP-Hosts als Spalte

HTTPS-URLs

Immer mehr Webseiten wechseln auf HTTPS, weshalb die HTTPS-URLs selbstverständlich auch benötigt werden. Ohne HTTPS kann es heutzutage durchaus sein, dass man nicht mal die Hälfte der besuchten URLs erwischt. Durch die Verschlüsselung können die aufgerufenen URLs allerdings nicht eingesehen werden.

Glücklicherweise gibt es einen Workaround, der in den allermeisten Fällen die gewünschten Informationen auf einem anderen Weg beschaffen kann. Das Stichwort lautet “Server Name Indication (SNI)“. Durch diese Technik senden Clients beim Aufruf von HTTPS-Webseiten den Hostnamen im Klartext mit, was wir in Wireshark verwenden können.

Wir beginnen mit folgendem Anzeigefilter:

ssl.handshake.extensions_server_name

Anschließend ein Paket auswählen und in der Detailansicht “Secure Sockets Layer” aufklappen. Dann nacheinander “TLSv1.2 Record Layer: Handshake Protocol: Client Hello”, “Handshake Protocol: Client Hello”, “Extensions: server_name”, und “Server Name Indication extension” ebenso aufklappen. Auf den Eintrag “Server Name: ” rechtsklicken und “Als Spalte anwenden” auswählen.

Wireshark HTTPS-Host als Spalte setzen

Als Ergebnis erscheint die Spalte “Server Name”, die bei entsprechenden TLS-Paketen die Host-URL anzeigen.

Wireshark HTTPS-Host als Spalte

URLs automatisch exportieren

Falls der Paketmitschnitt sehr groß ist und eine Menge URLs zu erwarten sind, können alle URLs in einem Rutsch exportiert werden. Dies geschieht mit dem Kommandozeilenprogramm TShark, welches bei der Installation von Wireshark als separate Komponenten mitinstalliert werden kann. Folgender Befehl exportiert alle HTTPS-URLs in einem Paketmitschnitt:

tshark -r <Pfad_zum_Paketmitschnitt> -T fields -e ssl.handshake.extensions_server_name -R ssl.handshake.extensions_server_name

Für HTTP-URLs funktioniert das analog:

tshark -r <Pfad_zum_Paketmitschnitt> -T fields -e http.request -R http.request

DNS

Eine dritte Möglichkeit alle besuchten URLs herauszufinden ist DNS. Beim Aufruf einer Webseite wird der Hostname in eine IP-Adresse umgewandelt. Dies erfolgt via DNS, welches nicht verschlüsselt ist und somit ausgewertet werden kann. Sofern die IP-Adresse auf dem Client gecached oder in der HOSTS-Datei eingetragen ist, entfällt die DNS-Nachfrage.

Wie bei HTTP oder HTTPS beginnen wir wieder mit dem Anzeigefilter:

dns

Anschließend ein Paket auswählen, “Domain Name System”, “Queries” und die URL aufklappen. Dann einen Rechtsklick auf “Name: ” machen und “Als Spalte anwenden” auswählen.

Wireshark DNS als Spalte setzen

Die per DNS aufgelösten Hostnamen werden nun in der Spalte “Name” angezeigt.

Wireshark DNS als Spalte

Tobi

Hallo, mein Name ist Tobias und ich habe diesen Blog im April 2009 ins Leben gerufen. Seitdem blogge ich hier über Software, Internet, Windows und andere Themen, die mich interessieren. SSDblog ist mein zweiter Blog, indem es rund um das Thema SSDs geht. Ich würde mich freuen, wenn ihr meinen Feed abonniert oder mir auf Twitter und Facebook folgt.

11 Antworten

  1. Burnsy sagt:

    Hallo Tobi,
    Danke für die Arbeit und Erläuterungen. So kann man sich als Neuling zumindest einigermaßen dem Thema nähern :)

    Mittlerweile kenne ich wirklich viele Leute die am verzweifeln sind weil die Einbindung ihrer IP-Kameras in irgendwelche Visualisierungen (z.B. Edomi etc.) nicht funktionieren. Der Grund ist dabei immer wieder der gleiche und auch ich dreh da mittlerweile schon am Rad. Du kannst einen Stream der Kamera über den jeweiligen HTTP-Aufruf im Browser direkt erreichen. Dann folgt die Nutzer und Passwort abfrage und das Bild/der Stream läuft. Sobald ich allerdings versuche den User/Passwort der IP voranzustellen (z.B. admin:1234@192.168.1.100 ….) klappt der Aufruf nicht. Ich würde deshalb gerne über Wireshark mitschneiden was genau im HTTP-Aufruf mit übergeben wird und mit welcher Schreibweise damit ich dies dann nachher genauso machen kann. Geht das mit Wireshark überhaupt und wie müßte man sich hier anstellen.

    • Tobi sagt:

      Hallo, ja das würde grundsätzlich funktionieren, allerdings kann ich mir gut vorstellen, dass dir das nicht weiter hilft. Stichwort HTTP-Request-Methode GET und POST. Wenn du die Kamera im Browser aufrufst und User und Passwort angibst, werden die Daten via POST übertragen. Wenn du alles in der URL haben möchtest, wird entsprechend GET verwendet. Daher tippe ich darauf, dass die Kamera mit GET einfach nicht zurecht kommt.
      Einfacher wird es sein, wenn du in den entsprechenden Foren suchst, ob deine Kamera mit Edomi kompatibel ist. Falls ja findest du hier auch relativ schnell, wie genau der Aufruf dafür aussehen muss.

  2. Bae sagt:

    Hallo Tobi, danke für Deine Arbeit. Ich hätte eine Frage, wenn man im Ignitomodus rumservt ist das auch alles einsehbar?

  3. tom sagt:

    hallo wenn ich ssl.handshake.extensions_server_name eingebe und in eine Zeile klicke gibt es das “secure sockets layer” wie bei dir nicht. somit zeigt es mir keine besuchten webseiten an! wie kann ich das lösen? bei mir steht nur folgendes
    >frame 13183
    >ethernet II
    >Internet Protocol Version 6
    >Transmissio control protocol
    >Transport layer Security

    will einfach nur rausfinden auf welchen seiten die leute in meinem Router unterwegs sind.

    • Tobi sagt:

      In den neueren Wireshark-Versionen wurde “Secure Sockets Layer” in “Transport Layer Security” umbenannt. Der Rest sollte identisch sein.

  4. Marcus sagt:

    Hi Tobi,
    gibt es eine Möglichkeit, die besuchten URLs nach User/IP zu filtern?
    Danke und Gruß
    Marcus

    • Tobi sagt:

      Hallo Marcus,
      nach User geht nicht aber nach IP ist kein Problem. Einfach nach dem Filter noch folgendes hinzufügen (IP natürlich anpassen):
      “and ip.addr == 192.168.178.50”

  5. Frank sagt:

    Hallo Tobi,
    bei HTTPS bekomme ich nur den Server-Namen heraus, zu dem eine Verbindung aufgebaut wurde. Kann ich irgendwie auch noch die URL finden, die auf dem Server aufgerufen wurde?
    Ich habe IOT-Devices (von Shelly, für mein SmartHome) und möchte herausfinden, unter welcher URL sie ihre Firmware-Updates herunterladen, damit ich die firmware-Dateien auch separat herunterladen und archivieren kann.

    • Tobi sagt:

      Hallo Frank,
      nein an die gesamte URL inklusive Pfad und Dateiname kommt man leider nicht so einfach. Dafür müsstest du Tools wie “mitmproxy” oder “Burp Suite” einsetzen. Das ist aber relativ aufwendig.
      Wie wäre z.B. folgende Alternative: http://archive.shelly-tools.de

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert