TCPflow - Analitzar i depurar el trànsit de xarxa a Linux


TCPflow és una eina gratuïta, de codi obert i potent basada en línia d'ordres per analitzar el trànsit de xarxa en sistemes semblants a Unix com Linux. Captura les dades rebudes o transferides mitjançant connexions TCP i les emmagatzema en un fitxer per a una anàlisi posterior, en un format útil que permet l'anàlisi i la depuració de protocols.

En realitat, és una eina semblant a tcpdump, ja que processa paquets des del cable o d'un fitxer emmagatzemat. Admet les mateixes expressions de filtrat potents que admet el seu homòleg. L'única diferència és que tcpflow posa tots els paquets TCP en ordre i reuneix cada flux en un fitxer separat (un fitxer per a cada direcció del flux) per a una anàlisi posterior.

El seu conjunt de funcions inclou un sistema de connectors avançat per descomprimir connexions HTTP comprimides, desfer la codificació MIME o invocar programes de tercers per al postprocessament i molt més.

Hi ha molts casos d'ús per a tcpflow que inclouen comprendre els fluxos de paquets de xarxa i també suports per dur a terme investigacions forenses de xarxa i divulgar el contingut de les sessions HTTP.

Com instal·lar TCPflow en sistemes Linux

TCPflow està disponible als repositoris oficials de les distribucions GNU/Linux principals, podeu instal·lar-lo mitjançant el vostre gestor de paquets tal com es mostra.

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

Després d'instal·lar tcpflow, podeu executar-lo amb privilegis de superusuari, en cas contrari utilitzeu l'ordre sudo. Tingueu en compte que escolta a la interfície de xarxa activa (per exemple, enp0s3).

$ sudo tcpflow

tcpflow: listening on enp0s3

De manera predeterminada, tcpflow emmagatzema totes les dades capturades en fitxers que tenen noms al formulari (això pot ser diferent si utilitzeu determinades opcions, com ara la marca de temps).

sourceip.sourceport-destip.destport
192.168.043.031.52920-216.058.210.034.00443

Ara fem una llista de directoris per veure si el flux tcp s'ha capturat en algun fitxer.

$ 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

Com hem esmentat anteriorment, cada flux TCP s'emmagatzema al seu propi fitxer. A la sortida anterior, podeu veure que hi ha tres fitxers de transcripció, que indiquen tcpflow en dues direccions oposades, on l'IP d'origen al primer fitxer i l'IP de destinació al segon fitxer i viceversa.

El primer fitxer 192.168.043.031.52920-216.058.210.034.00443 conté dades transferides des de l'amfitrió 192.168.043.031 (l'amfitrió local on s'ha executat tcpflow) a través del port 52920, a l'amfitrió 214.0508.216.

I el segon fitxer 216.058.210.034.00443-192.168.043.031.52920 conté dades enviades des de l'amfitrió 216.058.210.034 (l'amfitrió remot) a través del port 443 a l'amfitrió 192.168.043.031.52920 que s'executava a través del port tcp 52.03.

També es genera un informe XML, que conté informació sobre el programa, com ara com es va compilar i l'ordinador en què s'ha executat i un registre de cada connexió tcp.

Com haureu notat, tcpflow emmagatzema els fitxers de transcripció al directori actual de manera predeterminada. L'opció -o us pot ajudar a especificar el directori de sortida on s'escriuran els fitxers de transcripció.

$ 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

També podeu imprimir el contingut dels paquets a stdout a mesura que es reben, sense emmagatzemar cap dada capturada als fitxers, utilitzant el senyalador -c de la següent manera.

Per provar-ho eficaçment, obriu un segon terminal i executeu un ping o navegueu per Internet. Hauríeu de poder veure els detalls del ping o els detalls de la vostra navegació capturats per tcpflow.

$ sudo tcpflow -c

És possible capturar tot el trànsit en un port concret, per exemple el port 80 (HTTP). En el cas del trànsit HTTP, podreu veure les capçaleres HTTP seguides del contingut tot a l'extensió stdout o en un fitxer si s'elimina l'interruptor -c.

$ sudo tcpflow port 80

Per capturar paquets d'una interfície de xarxa específica, utilitzeu el senyalador -i per especificar el nom de la interfície.

$ sudo tcpflow -i eth0 port 80

També podeu especificar un amfitrió de destinació (els valors acceptats són l'adreça IP, el nom d'amfitrió o els dominis), tal com es mostra.

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

Podeu habilitar tot el processament utilitzant tots els escàners amb la marca -a, això és equivalent a l'interruptor -e all.

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

També es pot activar un escàner específic; els escàners disponibles inclouen md5, http, netviz, tcpdemux i wifiviz (executa tcpflow -H per veure informació detallada sobre cada escàner).

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

L'exemple següent mostra com habilitar tots els escàners excepte tcpdemux.

$ sudo tcpflow -a -x tcpdemux 

TCPflow sol intentar posar la interfície de xarxa en mode promiscu abans de capturar paquets. Podeu evitar-ho utilitzant el senyalador -p tal com es mostra.

$ sudo tcpflow -p -i eth0

Per llegir paquets d'un fitxer tcpdump pcap, utilitzeu el senyalador -r.

$ sudo tcpflow -f file.pcap

Podeu habilitar el mode detallat mitjançant les opcions -v o -d 10.

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

Important: una limitació de tcpflow és que, actualment, no entén els fragments d'IP, per tant les dades transmeses com a part de connexions TCP que contenen fragments d'IP no es capturaran correctament.

Per obtenir més informació i opcions d'ús, consulteu la pàgina man de tcpflow.

$ man tcpflow 

Repositori TCPflow Github: https://github.com/simsong/tcpflow

Això és tot per ara! TCPflow és un potent gravador de flux TCP que és útil per entendre els fluxos de paquets de xarxa i realitzar investigacions forenses de xarxa i molt més. Prova-ho i comparteix els teus pensaments al respecte amb nosaltres als comentaris.