Ricerca nel sito web

TCPflow: analizza ed esegui il debug del traffico di rete in Linux


TCPflow è un potente strumento gratuito, open source e basato su riga di comando per analizzare il traffico di rete su sistemi simili a Unix come Linux. Cattura i dati ricevuti o trasferiti su connessioni TCP e li memorizza in un file per un'analisi successiva, in un formato utile che consente l'analisi e il debug del protocollo.

Leggi anche: 16 migliori strumenti di monitoraggio della larghezza di banda per analizzare l'utilizzo della rete in Linux

In realtà è uno strumento simile a tcpdump poiché elabora i pacchetti dal cavo o da un file memorizzato. Supporta le stesse potenti espressioni di filtraggio supportate dalla sua controparte. L'unica differenza è che tcpflow mette in ordine tutti i pacchetti TCP e assembla ciascun flusso in un file separato (un file per ciascuna direzione del flusso) per un'analisi successiva.

Il suo set di funzionalità include un sistema plug-in avanzato per decomprimere connessioni HTTP compresse, annullare la codifica MIME o richiamare programmi di terze parti per la post-elaborazione e molto altro.

Esistono molti casi d'uso per tcpflow che includono la comprensione dei flussi di pacchetti di rete e anche il supporto per eseguire analisi forensi della rete e divulgare il contenuto delle sessioni HTTP.

Come installare TCPflow nei sistemi Linux

TCPflow è disponibile nei repository ufficiali delle principali distribuzioni GNU/Linux, puoi installarlo utilizzando il tuo gestore pacchetti come mostrato.

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

Dopo aver installato tcpflow, puoi eseguirlo con privilegi di superutente, altrimenti usa il comando sudo. Tieni presente che è in ascolto sull'interfaccia di rete attiva (ad esempio enp0s3).

sudo tcpflow

tcpflow: listening on enp0s3

Per impostazione predefinita, tcpflow memorizza tutti i dati acquisiti in file che hanno nomi nel modulo (questo potrebbe essere diverso se utilizzi determinate opzioni come timestamp).

sourceip.sourceport-destip.destport
192.168.043.031.52920-216.058.210.034.00443

Ora eseguiamo un elenco delle directory per vedere se il flusso tcp è stato catturato in qualche file.

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

Come accennato in precedenza, ogni flusso TCP viene archiviato nel proprio file. Dall'output sopra, puoi vedere che ci sono tre file di trascrizione, che indicano tcpflow in due direzioni opposte, dove l'IP di origine nel primo file e l'IP di destinazione nel secondo file e viceversa.

Il primo file 192.168.043.031.52920-216.058.210.034.00443 contiene i dati trasferiti dall'host 192.168.043.031 (l'host locale su cui è stato eseguito tcpflow) tramite la porta 52920, per ospitare 216.058.210.034 (l'host remoto) tramite la porta 443.

E il secondo file 216.058.210.034.00443-192.168.043.031.52920 contiene i dati inviati dall'host 216.058.210.034 (l'host remoto) tramite la porta 443 per ospitare 192.168.043.031 (l'host locale su cui è stato eseguito tcpflow) tramite la porta 52920.

Viene generato anche un report XML, che contiene informazioni sul programma, ad esempio come è stato compilato, il computer su cui è stato eseguito e un record di ogni connessione TCP.

Come avrai notato, tcpflow memorizza i file di trascrizione nella directory corrente per impostazione predefinita. L'opzione -o può aiutarti a specificare la directory di output in cui verranno scritti i file di trascrizione.

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

Puoi anche stampare il contenuto dei pacchetti su stdout man mano che vengono ricevuti, senza memorizzare i dati catturati in file, utilizzando il flag -c come segue.

Per testarlo in modo efficace, apri un secondo terminale ed esegui un ping oppure naviga in Internet. Dovresti essere in grado di vedere i dettagli del ping o i dettagli di navigazione acquisiti da tcpflow.

sudo tcpflow -c

È possibile catturare tutto il traffico su una porta particolare, ad esempio la porta 80 (HTTP). Nel caso del traffico HTTP, sarai in grado di vedere le intestazioni HTTP seguite dal contenuto tutto sullo stdout o in un file se l'opzione -c viene rimossa.

sudo tcpflow port 80

Per acquisire pacchetti da un'interfaccia di rete specifica, utilizzare il flag -i per specificare il nome dell'interfaccia.

sudo tcpflow -i eth0 port 80

Puoi anche specificare un host di destinazione (i valori accettati sono indirizzo IP, nome host o domini), come mostrato.

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

Puoi abilitare tutta l'elaborazione utilizzando tutti gli scanner con il flag -a, che equivale all'opzione -e all.

sudo tcpflow -a  
OR
sudo tcpflow -e all

È inoltre possibile attivare uno scanner specifico; gli scanner disponibili includono md5, http, netviz, tcpdemux e wifiviz (esegui tcpflow -H per visualizzare informazioni dettagliate su ciascuno 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

L'esempio seguente mostra come abilitare tutti gli scanner tranne tcpdemux.

sudo tcpflow -a -x tcpdemux 

TCPflow solitamente tenta di mettere l'interfaccia di rete in modalità promiscua prima di acquisire i pacchetti. Puoi impedirlo utilizzando il flag -p come mostrato.

sudo tcpflow -p -i eth0

Per leggere i pacchetti da un file tcpdump pcap, utilizzare il flag -r.

sudo tcpflow -f file.pcap

Puoi abilitare la modalità dettagliata utilizzando le opzioni -v o -d 10.

sudo tcpflow -v
OR
sudo tcpflow -d 10

Importante: una limitazione di tcpflow è che, al momento, non comprende i frammenti IP, quindi i dati trasmessi come parte delle connessioni TCP contenente frammenti IP non verranno catturati correttamente.

Per ulteriori informazioni e opzioni di utilizzo, consulta la pagina man tcpflow.

man tcpflow 

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

È tutto per ora! TCPflow è un potente registratore di flussi TCP, utile per comprendere i flussi di pacchetti di rete ed eseguire analisi forensi della rete e molto altro ancora. Provalo e condividi con noi i tuoi pensieri a riguardo nei commenti.