TCPflow - Analysieren und Debuggen des Netzwerkverkehrs unter Linux
TCPflow ist ein kostenloses, leistungsstarkes Open-Source-Tool zur Analyse des Netzwerkverkehrs auf Unix-ähnlichen Systemen wie Linux. Es erfasst Daten, die über TCP-Verbindungen empfangen oder übertragen werden, und speichert sie in einer Datei für eine spätere Analyse in einem nützlichen Format, das eine Protokollanalyse und ein Debugging ermöglicht.
Lesen Sie auch: Die 16 besten Tools zur Bandbreitenüberwachung zur Analyse der Netzwerknutzung unter Linux
Es handelt sich eigentlich um ein tcpdump-ähnliches Tool, da es Pakete von der Leitung oder aus einer gespeicherten Datei verarbeitet. Es unterstützt die gleichen leistungsstarken Filterausdrücke, die von seinem Gegenstück unterstützt werden. Der einzige Unterschied besteht darin, dass tcpflow alle TCP-Pakete in Ordnung bringt und jeden Fluss für die spätere Analyse in einer separaten Datei (eine Datei für jede Flussrichtung) zusammenstellt.
Zu den Funktionen gehört ein fortschrittliches Plug-in-System zum Dekomprimieren komprimierter HTTP-Verbindungen, zum Rückgängigmachen der MIME-Codierung oder zum Aufrufen von Programmen von Drittanbietern für die Nachbearbeitung und vieles mehr.
Es gibt viele Anwendungsfälle für tcpflow, darunter das Verständnis von Netzwerkpaketflüssen und auch die Unterstützung für die Durchführung von Netzwerkforensik und die Weitergabe des Inhalts von HTTP-Sitzungen.
So installieren Sie TCPflow in Linux-Systemen
TCPflow ist in den offiziellen Repositories der gängigen GNU/Linux-Distributionen verfügbar, Sie können es mit Ihrem Paketmanager installieren, wie gezeigt.
$ sudo apt install tcpflow #Debian/Ubuntu
sudo yum install tcpflow #CentOS/RHEL
sudo dnf install tcpflow #Fedora 22+
Nach der Installation von tcpflow können Sie es mit Superuser-Rechten ausführen, andernfalls verwenden Sie den Befehl sudo. Beachten Sie, dass es auf der aktiven Netzwerkschnittstelle (z. B. enp0s3) lauscht.
$ sudo tcpflow
tcpflow: listening on enp0s3
Standardmäßig speichert tcpflow alle erfassten Daten in Dateien, die Namen in der Form haben (dies kann anders sein, wenn Sie bestimmte Optionen wie Zeitstempel verwenden).
sourceip.sourceport-destip.destport
192.168.043.031.52920-216.058.210.034.00443
Lassen Sie uns nun eine Verzeichnisliste erstellen, um zu sehen, ob der TCP-Fluss in Dateien erfasst wurde.
$ ls -1
total 20
-rw-r--r--. 1 root root 808 Sep 19 12:49 192.168.043.031.52920-216.058.210.034.00443
-rw-r--r--. 1 root root 59 Sep 19 12:49 216.058.210.034.00443-192.168.043.031.52920
Wie bereits erwähnt, wird jeder TCP-Fluss in einer eigenen Datei gespeichert. In der obigen Ausgabe können Sie sehen, dass es drei Transkriptdateien gibt, die tcpflow in zwei entgegengesetzte Richtungen anzeigen, wobei die Quell-IP in der ersten Datei und die Ziel-IP in der zweiten Datei und umgekehrt.
Die erste Datei 192.168.043.031.52920-216.058.210.034.00443 enthält Daten, die vom Host 192.168.043.031 (dem lokalen Host, auf dem tcpflow ausgeführt wurde) über Port 52920 an den Host 216.058.210.034 (den Remote-Host) über Port 443 übertragen wurden.
Und die zweite Datei 216.058.210.034.00443-192.168.043.031.52920 enthält Daten, die von Host 216.058.210.034 (dem Remote-Host) über Port 443 an Host 192.168.043.031 (der lokale Host, auf dem tcpflow ausgeführt wurde) über Port 52920 gesendet wurden.
Es wird auch ein XML-Bericht generiert, der Informationen über das Programm enthält, z. B. wie es kompiliert wurde, auf welchem Computer es ausgeführt wurde, sowie eine Aufzeichnung jeder TCP-Verbindung.
Wie Sie vielleicht bemerkt haben, speichert tcpflow die Transkriptdateien standardmäßig im aktuellen Verzeichnis. Die Option -o kann Ihnen helfen, das Ausgabeverzeichnis anzugeben, in das die Transkriptdateien geschrieben werden.
$ sudo tcpflow -o tcpflow_files
$ sudo ls -l tcpflow_files
total 32
-rw-r--r--. 1 root root 1665 Sep 19 12:56 157.240.016.035.00443-192.168.000.103.45986
-rw-r--r--. 1 root root 45 Sep 19 12:56 169.044.082.101.00443-192.168.000.103.55496
-rw-r--r--. 1 root root 2738 Sep 19 12:56 172.217.166.046.00443-192.168.000.103.39954
-rw-r--r--. 1 root root 68 Sep 19 12:56 192.168.000.102.00022-192.168.000.103.42436
-rw-r--r--. 1 root root 573 Sep 19 12:56 192.168.000.103.39954-172.217.166.046.00443
-rw-r--r--. 1 root root 4067 Sep 19 12:56 192.168.000.103.45986-157.240.016.035.00443
-rw-r--r--. 1 root root 38 Sep 19 12:56 192.168.000.103.55496-169.044.082.101.00443
-rw-r--r--. 1 root root 3159 Sep 19 12:56 report.xml
Sie können auch den Inhalt von Paketen beim Empfang in stdout ausgeben, ohne erfasste Daten in Dateien zu speichern, indem Sie das Flag -c wie folgt verwenden.
Um dies effektiv zu testen, öffnen Sie ein zweites Terminal, führen Sie einen Ping aus oder surfen Sie im Internet. Sie sollten in der Lage sein, die Ping-Details oder Ihre Browserdetails zu sehen, die von tcpflow erfasst werden.
$ sudo tcpflow -c
Es ist möglich, den gesamten Datenverkehr an einem bestimmten Port zu erfassen, z. B. an Port 80 (HTTP). Im Falle von HTTP-Datenverkehr können Sie die HTTP-Header gefolgt vom Inhalt auf der stdout oder in einer Datei sehen, wenn der Schalter -c entfernt wird.
$ sudo tcpflow port 80
Um Pakete von einer bestimmten Netzwerkschnittstelle zu erfassen, verwenden Sie das Flag -i, um den Schnittstellennamen anzugeben.
$ sudo tcpflow -i eth0 port 80
Sie können auch einen Zielhost angeben (akzeptierte Werte sind IP-Adresse, Hostname oder Domänen), wie gezeigt.
$ sudo tcpflow -c host 192.68.43.1
OR
sudo tcpflow -c host www.google.com
Sie können die gesamte Verarbeitung mit allen Scannern mit dem Flag -a aktivieren, dies entspricht dem Schalter -e all.
$ sudo tcpflow -a
OR
sudo tcpflow -e all
Es kann auch ein spezieller Scanner aktiviert werden. Zu den verfügbaren Scannern gehören MD5, HTTP, NETVIZ, TCPDEMUX und WiFiviz (führen Sie tcpflow -H aus, um detaillierte Informationen zu jedem Scanner anzuzeigen).
$ sudo tcpflow -e http
OR
sudo tcpflow -e md5
OR
sudo tcpflow -e netviz
OR
sudo tcpflow -e tcpdemux
OR
sudo tcpflow -e wifiviz
Das folgende Beispiel zeigt, wie Sie alle Scanner mit Ausnahme von tcpdemux aktivieren.
$ sudo tcpflow -a -x tcpdemux
TCPflow versucht normalerweise, die Netzwerkschnittstelle in den Promiscuous-Modus zu versetzen, bevor Pakete erfasst werden. Sie können dies mit dem Flag -p verhindern, wie gezeigt.
$ sudo tcpflow -p -i eth0
Um Pakete aus einer tcpdump pcap-Datei zu lesen, verwenden Sie das Flag -r.
$ sudo tcpflow -f file.pcap
Sie können den ausführlichen Modus mit den Optionen -v oder -d 10 aktivieren.
$ sudo tcpflow -v
OR
sudo tcpflow -d 10
Wichtig: Eine Einschränkung von tcpflow besteht darin, dass es derzeit IP-Fragmente nicht versteht, daher werden Daten, die als Teil von TCP-Verbindungen mit IP-Fragmenten übertragen werden, nicht richtig erfasst.
Weitere Informationen und Verwendungsoptionen finden Sie auf der tcpflow-Manpage.
$ man tcpflow
TCPflow Github-Repository: https://github.com/simsong/tcpflow
Das war's fürs Erste! TCPflow ist ein leistungsstarker TCP-Flow-Recorder, der nützlich ist, um Netzwerkpaketflüsse zu verstehen, Netzwerkforensik durchzuführen und vieles mehr. Probieren Sie es aus und teilen Sie uns Ihre Gedanken dazu in den Kommentaren mit.