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.
Jetzt erscheint ein Fenster, in welchem alle URLs angezeigt werden.
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.
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.
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.
Als Ergebnis erscheint die Spalte “Server Name”, die bei entsprechenden TLS-Paketen die Host-URL anzeigen.
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.
Die per DNS aufgelösten Hostnamen werden nun in der Spalte “Name” angezeigt.
Neueste Kommentare