Tshark gibt präzise Auskunft über die Datenströme im Netz. Mit den passenden Parametern gefüttert, findet er im Nu die Ursache von Schwierigkeiten bei der Übertragung.
Spätestens, wenn die Systemprotokolle bei Problemen keine Auskunft geben oder Sie schlicht wissen wollen, was gerade im Netzwerk auf dem System passiert, lohnt ein Blick direkt in den Datenstrom. Tools wie Tcpdump [1] oder Wireshark [2] ermöglichen das Mitlesen aller Pakete, die über die ausgewählten Schnittstellen fließen. Mithilfe von Filtern schneiden Sie dabei ganz bestimmte Ströme heraus und bereiten diese für die Analyse auf. Das im Lieferumfang von Wireshark enthaltene Werkzeug Tshark [3] erledigt das auf der Kommandozeile.
Während Tcpdump das Tool der Wahl von Gurus und Profis ist, spricht Wireshark aufgrund der mächtigen GUI eher Einsteiger und Fortgeschrittene an. Haben Sie mit Letzterem jedoch schon einmal große Datenmengen ausgewertet, sind Sie womöglich an ein bekanntes Limit gestoßen: Ab einer bestimmten Anzahl von Paketen bringt Wireshark ein System so richtig zum Schwitzen – und damit schnell an dessen Grenzen.
Möchten Sie auf entfernten Systemen oder schlicht mit weniger Einsatz von Ressourcen den Datenverkehr im Netzwerk analysieren, bietet sich also Tshark an. Dieses Werkzeug enthält im Grunde die gleichen Features wie sein größerer Bruder Wireshark.
Damit das Sniffing funktioniert, versetzt das Programm die jeweilige Schnittstelle in der Regel in den sogenannten Promiscuous Mode. In diesem Modus leitet die Netzwerkkarte alle an ihr vorbeikommenden Pakete an das Betriebssystem weiter, statt lediglich die via MAC-Adresse direkt ans lokale System adressierten.
Viele Pakete, viele Rechte
Die Installation erledigen Sie über die Kommandozeile oder das grafische Werkzeug Ihrer Wahl. Im Test kam für alle Kommandos Tshark 1.10.6 unter Ubuntu 14.04 (64 Bit) zum Einsatz. Da der Netzwerk-Sniffer jedoch in den meisten anderen großen Distributionen enthalten ist und dort die gleichen Parameter entgegennimmt, spricht nichts dagegen, zu einem anderen Linux zu greifen und dort die Installation mit dem Paketmanager Ihrer Wahl vorzunehmen. Unter Ubuntu bringen Sie zunächst Ihr System auf den aktuellsten Stand (Listing 1, Zeile 1 und 2). Im Anschluss installieren Sie das Programm mit dem Paketmanager (Zeile 3).
Listing 1
$ sudo apt-get update $ sudo apt-get dist-upgrade $ sudo apt-get install tshark
Wireshark und Tshark greifen auf die gleichen Ressourcen zurück; beide Tools kommen daher im Bündel. Rechnen Sie also damit, dass die frisch heruntergeladenen Pakete im entpackten Zustand rund 70 MByte an Festplattenspeicher in Anspruch nehmen.
Tshark setzt voraus, dass Sie es als root oder mit vorangestelltem sudo ausführen, da es ansonsten nicht genug Rechte zum Mitlesen von Paketen erhält. Das Tool greift dabei auf das mitgelieferte Programm Dumpcap zurück, das wiederum unter Einsatz von Pcap [4] den aktuellen Datenverkehr mitschneidet und grundsätzlich ohne recht weitreichende Privilegien den Dienst verweigert.
Während des Tests unter Ubuntu beschwerte sich das Programm allerdings lauthals über den Aufruf mit Root-Rechten – solche Meldungen dürfen Sie in der Regel getrost ignorieren. Prinzipiell halten sich die Risiken in Grenzen, da Tshark den Einsatz von Lua-Skripten, die ein Einfallstor wären, selbst unterbindet.
Gehen Ihnen diese Hinweise dennoch auf die Nerven und möchten Sie deshalb das Rechte-Setup auf dem System geraderücken, führen wieder mehrere Wege zum Ziel. Unter Ubuntu genügt der Aufruf des Kommandos sudo dpkg-reconfigure wireshark-common und das abschließende Bestätigen mit Yes. Damit gestatten Sie Benutzern ohne administrative Rechte den Mitschnitt von Datenverkehr. Damit Ihr Benutzerkonto davon profitiert, nehmen Sie es in die lokale Gruppe wireshark auf:
$ sudo adduser $USER wireshark
Nach dem Logout und erneutem Anmelden läuft Tshark nun in Ihrem Benutzerkonto auch ohne Sudo-Präfix.
Am Anfang
Das Programm bringt zahlreiche Funktionen mit, wie schon die vielen Optionen und Schalter erkennen lassen (Abbildung 1). Das Programm richtet sich zwar an Fortgeschrittene und Profis, aber keine Sorge: Sie brauchen sich nicht erst durch eine lange Dokumentation zu wühlen oder tiefschürfendes Vorwissen mitzubringen, um den Datenverkehr zu analysieren.
Wenn Sie zuerst sehen möchten, welche Interfaces die Software auf dem lokalen oder entfernten System gefunden hat, genügt das kurze Kommando tshark -D. Wenn Sie dessen Ausgabe (Listing 2) zum ersten Mal sehen, sind Sie womöglich von der Anzahl der aufgeführten Netzwerkadapter überrascht: Wo kommen die vielen Geräte her?
Listing 2
§nonumber $ sudo tshark -D 1. eth0 2. nflog 3. nfqueue 4. any 5. lo
Tshark zeigt hier virtuelle Adapter an, die das Betriebssystem bereitstellt. Während eth0 das erste Interface auf dem Testsystem repräsentiert, handelt es sich bei den Adaptern nflog und nfqueue um einen Teil des Netfilter-Systems [5] von Linux [6]. Diese Schnittstellen erlauben bestimmte Interaktionen mit dem Netfilter-Modul des Kernels und stehen daher ebenfalls für die Analyse bereit. Der vierte Punkt auf der Liste, any, weist das Programm an, auf allen Interfaces zu lauschen, während das letzte Ergebnis lo für das Loopback-Interface steht.
Für den Einstieg genügt es, wenn Sie Tshark mittels sudo tshark -i any anweisen, auf allen Schnittstellen zu lauschen, und ein zweites Terminal öffnen, in dem Sie einen Ping auf die Webseite Ihrer Wahl absetzen (Abbildung 2). Während das eine Fenster das Ergebnis des Pings zeigt, offenbart das andere Terminal, was während des Vorgangs im Hintergrund geschieht. Bei diesem konkreten Beispiel sehen Sie alle Vorgänge, da die Software auf allen Interfaces lauscht.

Abbildung 2: Die Ausgabe von Tshark zeigt, was während eines Ping-Vorgangs im Hintergrund geschieht.
Beschränkte sich das Sniffing nur auf eth0, wäre Ihnen hier entgangen, dass (wie in der ersten Zeile in Abbildung 2 zu erkennen), das Testsystem zunächst eine DNS-Abfrage an localhost absetzt. Aktuelle Ubuntu-Installationen tragen in /etc/resolv.conf den Nameserver 127.0.0.1 ein, da die Namensauflösung über eine separate Komponente geschieht.
Das Ping-Kommando hat einen DNS-Namen erhalten, weshalb es für diesen zunächst die IP-Adresse abfragt, bevor es einen ICMP-Request an das korrekte Ziel absetzt. Tshark berichtet daher zunächst von der DNS-Anfrage und zeigt die korrekte Rückantwort des zuständigen Nameservers an (siehe Frame 4 und 10 in Abbildung 2).
Anschließend sehen Sie die eigentlichen Anfragen und Antworten, die einen Ping ausmachen. Den aktuellen Sniffing-Vorgang brechen Sie übrigens über [Strg]+[C] ab.
Felderlehre
Einer der vielen Schlüssel zur Analyse von Netzwerkverkehr stellt das Wissen um die Bedeutung der einzelnen Spalten beziehungsweise Felder in der Ausgabe Tshark dar. Welche Felder das Werkzeug anzeigt, legen Sie mit den Parametern -T und -e fest; die Tabelle “Tshark: Felder” gibt Aufschluss über gängige Namen und deren Bedeutung.
Tshark: Felder
| Feldname | Beschreibung |
|---|---|
frame.number |
Nummer des Pakets im Datenstrom |
frame.time_relative |
relativer Zeitstempel des Pakets |
ip.src |
IP-Adresse des Senders |
ip.dst |
IP-Adresse des Empfängers |
col.Info |
Inhalt der empfangenen Pakete |
Wenn Sie alle Felder so wie in Listing 3 manuell, sollten Sie bei einem Ping auf LinuxUser.de eine zu Abbildung 2 nahezu identische Ausgabe erhalten. Darin fehlen lediglich die Pfeile -> zwischen der Quell- und Ziel-IP. Daneben besteht die Möglichkeit, die Ausgabe gleich als CSV-Datei aufzubereiten. Mit den zusätzlichen Schaltern -E separator=, -E quote=d -E header=y setzt das Tool die einzelnen Felder in Anführungsstriche, trennt sie durch Kommas voneinander und gibt eine Zeile mit den Namen der Spalten aus (Listing 4).
Listing 3
$ sudo tshark -i any -T fields -e frame.number -e frame.time_relative -e -e ip.src -e ip.dst -e col.Info
Listing 4
$ sudo tshark -i any -T fields -e frame.number -e frame.time_relative -e ip.src -e ip.dst -e col.Info -E separator=, -E quote=d -E header=y frame.number,frame.time_relative,ip.src,ip.dst,col.Info "1","0.000000000","127.0.0.1","127.0.1.1","Standard query 0x79e1 A linux-user.de"
Aus Platzgründen sind aus dem Beispiel Meldungen der Software gekürzt, die vor dem Ausführen mit Root-Rechten warnen. Das Ergebnis des Aufrufs leiten Sie bei Bedarf über Bordmittel in eine Datei um.
Ab in die Tiefen!
Ohne Angabe zusätzlicher Parameter zeigt das Programm einfach jeglichen Datenverkehr an, der über das ausgewählte Interface fließt. Das hilft zwar manchmal, in vielen Fällen geht es aber um konkrete Datenströme, wie etwa HTTP oder Samba- und NFS-Verbindungen. Die anderen Pakete stören dann nur. Hier bietet das Tool diverse Möglichkeiten zum Filtern an, wobei Sie viele davon miteinander kombinieren dürfen.
Im folgenden Szenario lauscht auf dem lokalen System mit der IP-Adresse 192.168.0.14 am Interface eth0 ein Apache-Webserver, der verschiedene Webseiten für ein Intranet anbietet. Ein Teilnehmer vom Rechner mit der IP-Adresse 192.168.0.12 berichtet von Problemen mit der Verbindung. Mittels des Aufrufs aus der ersten Zeile von Listing 5 prüfen Sie das auf dem Server.
Listing 5
$ sudo tshark -i eth0 host 192.168.0.12 and port 80 $ sudo tshark -i eth0 host 192.168.0.12 and port 80 -R http $ sudo tshark -xi eth0 host 192.168.0.12 and port 80 -R http $ sudo tshark -i eth0 host 192.168.0.12 and port 80 -R http -T fields -e text
Mit dem Parameter -i eth0 beschränken Sie die Analyse auf das Interface eth0, während host 192.168.0.12 nur Pakete anzeigt, die von oder zu dieser IP-Adresse laufen. Der Schalter port 80 fokussiert auf HTTP-Verkehr, während das Schlüsselwort and die beiden Parameter host und port miteinander verkettet.
Abbildung 3 zeigt, wie die HTTP-Verbindung im Rahmen eines TCP-Handshakes [7] erfolgreich zustande kommt. Den eigentlichen HTTP-Datenverkehr (Frame 10, 13 und 15) gilt es, hier noch aus der umfangreichen Ausgabe herauszufischen.
Mehr Übersicht verschafft der Einsatz von sogenannten Read-Filtern: Sie ermöglichen es, die Flut der Pakete mittels angegebener Kriterien einzuschränken. Im konkreten Fall wollen Sie eigentlich nur die relevanten Vorgänge im HTTP-Protokoll beobachten (Listing 4, Zeile 2). Abbildung 4 zeigt, dass der Netzwerkteilnehmer 102.168.0.12 mittels der HTTP-Methode GET die Seite aufruft (Frame 16), wobei der Webserver hinter der IP-Adresse 192.168.0.14 mit dem HTTP-Status 200 antwortet und die Seite ausliefert (Frame 19, 21 und 22).

http zeigt Tshark nur die relevanten Daten an.” width=”300″ height=”76″ />
Abbildung 4: Mittels des Read-Filtershttp zeigt Tshark nur die relevanten Daten an.Read-Filter bietet noch weitaus mächtigere Möglichkeiten zur Auswahl von ganz bestimmten Datenströmen. Weitere Beispiele [8] und detailliertere Beschreibungen [9] finden Sie online.
Details
Das Betrachten des Datenflusses und die daraus folgende Analyse genügen häufig bereits, um Problemen auf die Spur zu kommen. In einigen Fällen ist es jedoch notwendig, die Inhalte der Pakete – die sogenannte Payload (“Nutzlast”) in Hexadezimal- beziehungsweise ASCII-Form einzusehen. Sofern der beobachtete Datenverkehr nicht verschlüsselt über die Leitung fließt, erfüllt Tshark diese Aufgabe mit dem Schalter -x (Listing 4, Zeile 3). In Abbildung 5 sehen Sie den Inhalt der aufgerufenen Webseiten.
In diesem Fall betrachtet das Programm aber immer noch jedes Paket einzeln und zeigt daher die Frames in jeweils eigenen Blöcken. Im Beispiel handelt es sich um die Standardseite, die bei Installation eines Apache-Webservers unter Ubuntu 14.04 erscheint.
Im Beispiel empfiehlt es sich, aus Gründen der Lesbarkeit auf die Anzeige als Hexadezimalwerte zu verzichten und stattdessen die Ausgabe um das Feld text zu erweitern. Hierzu nutzen Sie die Schalterkombination -T fields -e text (Listing 4, Zeile 4). Abbildung 6 zeigt die Webseite als HTML-Quelltext. Mit wenigen Handgriffen ließe sich so diese Ausgabe sogar nutzen, um einen Teil der übertragenen Webseite nachzubauen.
Tipps
Tshark bringt genug sinnvolle Standardeinstellungen mit, um eine möglichst schnelle Analyse des Datenverkehrs zu ermöglichen. Für viele Protokolle oder bekannte Anwendungen existieren zudem Anleitungen für effektives Troubleshooting. So empfiehlt das offizielle Samba-Wiki folgendes Kommando, um Samba-Verbindungen zu betrachten:
$ sudo tshark -p -w Datei port 445 or port 139
Der Schalter -w bewirkt dabei, dass die Software die Ausgabe nicht in die aktuelle Konsole schreibt, sondern zum Weiterverarbeiten in eine Datei [10]. Das offizielle Wireshark-Wiki gibt ebenfalls Tipps für die Analyse von SMB-Traffic [11]. Darüber hinaus finden sich im Netz aussagekräftige Anleitungen zu NFS, SMTP, MySQL, VoIP und anderen Protokollen. In den meisten Fällen stoßen Sie bei solchen Suchen übrigens über entsprechende Read-Filter, mit denen Sie nur die relevanten Pakete sehen.
Dieser Artikel fokussiert auf das Betrachten von kabelgebundenem Datenverkehr. Wenn Sie Tshark auch für Analysen im WLAN einsetzen möchten, gibt Ihnen eine ausführliche Online-Dokumentation einige Hinweise [12]. Das Programm bietet übrigens zusätzlich die Möglichkeit, Bluetooth-Verbindungen [13] und USB-Verkehr [14] zu analysieren.
Fazit
Als mächtiges Werkzeug zum Betrachten und Analysieren von Datenströmen filtert Tshark schon mit wenigen Handgriffen gezielt einzelne Anfragen aus der Paketflut heraus. Im Vergleich zum bekannteren Sniffing-Tool Tcpdump bietet die Wireshark-Konsolenvariante eine bessere Lesbarkeit und umfangreichere Filter an.
Allerdings beeinträchtigt Tshark beim Erfassen großer Datenmengen früher oder später die Performance des Systems. Im Wireshark-Wiki finden Sie daher einige Tipps, wie Sie gegebenenfalls auftretende Einbrüche minimieren [15]. Wenn Sie übrigens auch unter Windows arbeiten, lautet die gute Nachricht: Wireshark – und damit auch Tshark – steht auch für dieses Betriebssystem bereit [16].
Der Autor
Valentin Höbel arbeitet als Cloud Architect für den VoIP-Spezialisten NFON AG in München. Wenn er in seiner Freizeit nicht gerade am Kickertisch steht, wirft er einen Blick auf aktuelle Open-Source-Technologien.
Glossar
-
Frame
-
Eine Protocol Data Unit (PDU) auf dem Data Link Layer (Layer 2, “Sicherungsschicht”) des OSI-Modells. Eine PDU enthält Quell- und Zieladresse, Steuerinformationen zur Datenflusskontrolle, die Nutzdaten des zugehörigen Pakets (Layer 3, Network Layer, “Vermittlungsschicht”) sowie Prüfsummen.
Infos
[1] Tcpdump: http://www.tcpdump.org
[2] Wireshark: https://www.wireshark.org
[3] Tshark-Manpage: https://www.wireshark.org/docs/man-pages/tshark.html
[4] Pcap-Manpage: http://www.tcpdump.org/manpages/pcap.3pcap.html
[5] Netfilter: http://www.netfilter.org
[6] Iptables-NFQueue: Marcus Nutzinger, Rainer Poisel, “Paketwarteschlangen im Userspace bearbeiten”, LM 09/2009, S. 36, http://www.linux-magazin.de/Ausgaben/2009/09/Schlangenbeschwoerer
[7] TCP-Handshake: http://de.wikipedia.org/wiki/Transmission_Control_Protocol#Drei-Wege-Handschlag
[8] Paketfilterung mit Tshark: https://thesprawl.org/research/packet-filtering/
[9] Diverse Filtermethoden: http://wiki.wireshark.org/CaptureFilters
[10] Samba-Troubleshooting mit Tshark: https://wiki.samba.org/index.php/Capture_Packets
[11] Samba-Sniffing in der Wireshark-Dokumentation: http://wiki.wireshark.org/SMB
[12] WLAN-Sniffing: http://wiki.wireshark.org/CaptureSetup/WLAN
[13] Bluetooth-Sniffing: http://wiki.wireshark.org/CaptureSetup/Bluetooth
[14] USB-Traffic analysieren:http://wiki.wireshark.org/CaptureSetup/USB
[15] Performance-Optimierung: http://wiki.wireshark.org/Performance
[16] Wireshark und Tshark unter Windows: https://www.wireshark.org/docs/wsug_html_chunked/ChBuildInstallWinInstall.html









