TCPflow - Analyser og fejlret netværkstrafik i Linux


TCPflow er et gratis, open source, kraftfuldt kommandolinjebaseret værktøj til analyse af netværkstrafik på Unix-lignende systemer som Linux. Det fanger data modtaget eller overført via TCP-forbindelser og gemmer dem i en fil til senere analyse i et nyttigt format, der giver mulighed for protokolanalyse og fejlretning.

Det er faktisk et tcpdump-lignende værktøj, da det behandler pakker fra ledningen eller fra en gemt fil. Det understøtter de samme kraftfulde filtreringsudtryk, der understøttes af dets modstykke. Den eneste forskel er, at tcpflow sætter alle TCP-pakker i rækkefølge og samler hver flow i en separat fil (en fil til hver strømningsretning) til senere analyse.

Dets funktionssæt inkluderer et avanceret plug-in-system til dekomprimering af komprimerede HTTP-forbindelser, fortrydelse af MIME-kodning eller påberåbelse af tredjepartsprogrammer til efterbehandling og meget mere.

Der er mange brugssager til tcpflow, der inkluderer at forstå netværkspakkeflow og også understøtter til udførelse af netværksmedicin og afslører indholdet af HTTP-sessioner.

Sådan installeres TCPflow i Linux-systemer

TCPflow er tilgængeligt i de officielle opbevaringssteder for mainstream GNU/Linux-distributioner, du kan installere det ved hjælp af din pakkehåndtering som vist.

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

Efter installation af tcpflow kan du køre det med superbrugerrettigheder, ellers brug sudo-kommandoen. Bemærk, at den lytter på den aktive netværksgrænseflade (for eksempel enp0s3).

$ sudo tcpflow

tcpflow: listening on enp0s3

Som standard gemmer tcpflow alle fangede data i filer, der har navne i formularen (dette kan være anderledes, hvis du bruger visse indstillinger, f.eks. Tidsstempel).

sourceip.sourceport-destip.destport
192.168.043.031.52920-216.058.210.034.00443

Lad os nu lave en mappeliste for at se, om tcp-flow er blevet fanget i nogen filer.

$ 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

Som vi nævnte tidligere, gemmes hver TCP-strøm i sin egen fil. Fra ovenstående output kan du se, at der er tre transkriptionsfiler, der angiver tcpflow i to modsatte retninger, hvor kilden IP i den første fil og destinations-IP i den anden fil og omvendt.

Den første fil 192.168.043.031.52920-216.058.210.034.00443 indeholder data, der er overført fra vært 192.168.043.031 (lokalhost, hvorpå tcpflow blev kørt) via port 52920, til vært 216.058.210.034 (fjernværten) via port 443.

Og den anden fil 216.058.210.034.00443-192.168.043.031.52920 indeholder data sendt fra vært 216.058.210.034 (fjernværten) via port 443 til vært 192.168.043.031 (den lokale vært, hvor tcpflow blev kørt) via port 52920.

Der er også genereret en XML-rapport, der indeholder oplysninger om programmet, såsom hvordan det blev kompileret, og computeren, det blev kørt på, og en registrering af hver tcp-forbindelse.

Som du måske har bemærket, gemmer tcpflow som standard transskriptsfilerne i den aktuelle mappe. Indstillingen -o kan hjælpe dig med at specificere outputkataloget, hvor transkriptionsfilerne skal skrives.

$ 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

Du kan også udskrive indholdet af pakker til stdout, når de modtages, uden at gemme nogen fangede data i filer ved hjælp af -c -flagget som følger.

For at teste dette effektivt skal du åbne en anden terminal og køre en ping eller surfe på internettet. Du skal være i stand til at se ping-detaljerne eller dine browserdetaljer fanget af tcpflow.

$ sudo tcpflow -c

Det er muligt at fange al trafik på en bestemt port, for eksempel port 80 (HTTP). I tilfælde af HTTP-trafik vil du kunne se HTTP-overskrifter efterfulgt af indholdet alt på stdout eller i en fil, hvis -c -kontakten fjernes.

$ sudo tcpflow port 80

For at fange pakker fra en bestemt netværksgrænseflade skal du bruge flagget -i til at specificere grænsefladenavnet.

$ sudo tcpflow -i eth0 port 80

Du kan også angive en målhost (accepterede værdier er IP-adresse, værtsnavn eller domæner) som vist.

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

Du kan aktivere al behandling ved hjælp af alle scannere med -a flag, dette svarer til -e all switch.

$ sudo tcpflow -a  
OR
$ sudo tcpflow -e all

En bestemt scanner kan også aktiveres; de tilgængelige scannere inkluderer md5, http, netviz, tcpdemux og wifiviz (kør tcpflow -H for at se detaljerede oplysninger om hver scanner).

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

Følgende eksempel viser, hvordan du aktiverer alle scannere undtagen tcpdemux.

$ sudo tcpflow -a -x tcpdemux 

TCPflow forsøger normalt at sætte netværksgrænsefladen i promiskuøs tilstand, før der fanges pakker. Du kan forhindre dette ved hjælp af -p flag som vist.

$ sudo tcpflow -p -i eth0

For at læse pakker fra en tcpdump pcap-fil skal du bruge flagget -r .

$ sudo tcpflow -f file.pcap

Du kan aktivere detaljeret tilstand ved hjælp af indstillingerne -v eller -d 10 .

$ sudo tcpflow -v
OR
$ sudo tcpflow -d 10

Vigtigt: En begrænsning af tcpflow er, at den på nuværende tidspunkt ikke forstår IP-fragmenter, således at data, der transmitteres som en del af TCP-forbindelser, der indeholder IP-fragmenter, ikke bliver fanget korrekt.

For mere information og brugsmuligheder, se mc-siden til tcpflow.

$ man tcpflow 

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

Det er alt for nu! TCPflow er en kraftfuld TCP-flowoptager, som er nyttig til forståelse af netværkspakkeflow og udførelse af netværksmedicin og meget mere. Prøv det og del dine tanker om det med os i kommentarerne.