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, Facebook, Google+ und Google+ (privat) folgt.

Schreibe einen Kommentar

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