Zoeken op website

TCPflow - Analyseer en debug netwerkverkeer in Linux


TCPflow is een gratis, open source, krachtige opdrachtregelgebaseerde tool voor het analyseren van netwerkverkeer op Unix-achtige systemen zoals Linux. Het legt gegevens vast die worden ontvangen of overgedragen via TCP-verbindingen en slaat deze op in een bestand voor latere analyse, in een handig formaat dat protocolanalyse en foutopsporing mogelijk maakt.

Lees ook: 16 beste tools voor bandbreedtebewaking om netwerkgebruik onder Linux te analyseren

Het is eigenlijk een tcpdump-achtig hulpmiddel omdat het pakketten van de draad of van een opgeslagen bestand verwerkt. Het ondersteunt dezelfde krachtige filterexpressies die worden ondersteund door zijn tegenhanger. Het enige verschil is dat tcpflow alle TCP-pakketten op volgorde zet en elke stroom in een afzonderlijk bestand samenvoegt (een bestand voor elke stroomrichting) voor latere analyse.

De functieset omvat een geavanceerd plug-insysteem voor het decomprimeren van gecomprimeerde HTTP-verbindingen, het ongedaan maken van MIME-codering of het aanroepen van programma's van derden voor nabewerking en nog veel meer.

Er zijn veel gebruiksscenario's voor tcpflow, waaronder het begrijpen van netwerkpakketstromen en ook ondersteuning voor het uitvoeren van netwerkforensisch onderzoek en het openbaar maken van de inhoud van HTTP-sessies.

Hoe TCPflow op Linux-systemen te installeren

TCPflow is beschikbaar in de officiële opslagplaatsen van reguliere GNU/Linux-distributies. U kunt het installeren met behulp van uw pakketbeheerder, zoals weergegeven.

sudo apt install tcpflow	#Debian/Ubuntu
sudo yum install tcpflow	#CentOS/RHEL
sudo dnf install tcpflow	#Fedora 22+

Nadat u tcpflow hebt geïnstalleerd, kunt u het uitvoeren met superuser-rechten, anders gebruikt u de sudo-opdracht. Merk op dat het luistert op de actieve netwerkinterface (bijvoorbeeld enp0s3).

sudo tcpflow

tcpflow: listening on enp0s3

Standaard slaat tcpflow alle vastgelegde gegevens op in bestanden met namen in het formulier (dit kan anders zijn als u bepaalde opties gebruikt, zoals tijdstempel).

sourceip.sourceport-destip.destport
192.168.043.031.52920-216.058.210.034.00443

Laten we nu een directorylijst maken om te zien of TCP-stroom in bestanden is vastgelegd.

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

Zoals we eerder vermeldden, wordt elke TCP-stroom opgeslagen in een eigen bestand. Uit de bovenstaande uitvoer kunt u zien dat er drie transcriptiebestanden zijn, die tcpflow in twee tegengestelde richtingen aangeven, waarbij het bron-IP in het eerste bestand en het doel-IP in het tweede bestand en vice versa.

Het eerste bestand 192.168.043.031.52920-216.058.210.034.00443 bevat gegevens overgedragen van host 192.168.043.031 (de localhost waarop tcpflow werd uitgevoerd) via poort 52920, om 216.058.210.034 (de externe host) te hosten via poort 443.

En het tweede bestand 216.058.210.034.00443-192.168.043.031.52920 bevat gegevens verzonden door host 216.058.210.034 (de externe host) via poort 443 om 192.168.043.031 (de localhost waarop tcpflow werd uitgevoerd) te hosten via poort 52920.

Er wordt ook een XML-rapport gegenereerd, dat informatie bevat over het programma, zoals hoe het is samengesteld, de computer waarop het is uitgevoerd en een overzicht van elke TCP-verbinding.

Zoals je misschien hebt gemerkt, slaat tcpflow de transcriptiebestanden standaard op in de huidige map. De -o optie kan u helpen bij het specificeren van de uitvoermap waar de transcriptiebestanden zullen worden geschreven.

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

U kunt de inhoud van pakketten ook naar stdout afdrukken zodra ze worden ontvangen, zonder vastgelegde gegevens in bestanden op te slaan, door de vlag -c als volgt te gebruiken.

Om dit effectief te testen, opent u een tweede terminal en voert u een ping uit, of surft u op internet. U zou de pinggegevens of uw browsegegevens moeten kunnen zien die door tcpflow worden vastgelegd.

sudo tcpflow -c

Het is mogelijk om al het verkeer op een bepaalde poort vast te leggen, bijvoorbeeld poort 80 (HTTP). In het geval van HTTP-verkeer kunt u de HTTP-headers zien, gevolgd door de inhoud, allemaal op de stdout of in één bestand als de schakeloptie -c is verwijderd.

sudo tcpflow port 80

Om pakketten van een specifieke netwerkinterface vast te leggen, gebruikt u de vlag -i om de interfacenaam op te geven.

sudo tcpflow -i eth0 port 80

U kunt ook een doelhost opgeven (geaccepteerde waarden zijn IP-adres, hostnaam of domeinen), zoals weergegeven.

sudo tcpflow -c host 192.68.43.1
OR
sudo tcpflow -c host www.google.com 

U kunt alle verwerking inschakelen met behulp van alle scanners met de vlag -a, dit is gelijk aan de schakelaar -e all.

sudo tcpflow -a  
OR
sudo tcpflow -e all

Er kan ook een specifieke scanner worden geactiveerd; de beschikbare scanners zijn md5, http, netviz, tcpdemux en wifiviz (voer tcpflow -H uit om gedetailleerde informatie over elke scanner te bekijken).

sudo tcpflow -e http
OR
sudo tcpflow -e md5
OR
sudo tcpflow -e netviz
OR
sudo tcpflow -e tcpdemux
OR
sudo tcpflow -e wifiviz

In het volgende voorbeeld ziet u hoe u alle scanners kunt inschakelen, behalve tcpdemux.

sudo tcpflow -a -x tcpdemux 

TCPflow probeert meestal de netwerkinterface in de promiscue modus te zetten voordat pakketten worden vastgelegd. U kunt dit voorkomen door de vlag -p te gebruiken, zoals weergegeven.

sudo tcpflow -p -i eth0

Om pakketten uit een tcpdump pcap-bestand te lezen, gebruikt u de vlag -r.

sudo tcpflow -f file.pcap

U kunt de uitgebreide modus inschakelen met de opties -v of -d 10.

sudo tcpflow -v
OR
sudo tcpflow -d 10

Belangrijk: een beperking van tcpflow is dat het op dit moment geen IP-fragmenten begrijpt, dus gegevens die worden verzonden als onderdeel van TCP-verbindingen die IP-fragmenten bevatten, worden niet goed vastgelegd.

Voor meer informatie en gebruiksopties, zie de tcpflow manpagina.

man tcpflow 

TCPflow Github-opslagplaats: https://github.com/simsong/tcpflow

Dat is het voor nu! TCPflow is een krachtige TCP-stroomrecorder die handig is voor het begrijpen van netwerkpakketstromen en het uitvoeren van netwerkforensisch onderzoek, en nog veel meer. Probeer het uit en deel uw mening erover met ons in de reacties.