Nel vasto arsenale degli strumenti per la diagnostica e l’analisi delle reti TCP/IP, tcpdump si distingue per potenza, versatilità e leggerezza. Nonostante l’aspetto spartano, questo tool da riga di comando è una risorsa fondamentale per chiunque voglia intercettare, filtrare e analizzare il traffico di rete in tempo reale su sistemi Unix-like. In questo articolo presentiamo il funzionamento di tcpdump, i suoi principali utilizzi, esempi avanzati, casi reali e limiti.
Cos’è tcpdump e come funziona
tcpdump è un packet sniffer che consente di catturare e visualizzare i pacchetti che transitano su un’interfaccia di rete. Sfrutta libpcap (packet capture library), che fornisce l’accesso a basso livello ai pacchetti di rete. Funziona in modalità promiscua, consentendo di verificare tutto il traffico che passa sulla rete, non solo quello destinato all’host.
I pacchetti sono catturati e confrontati con eventuali filtri BPF (Berkeley Packet Filter): in caso di corrispondenza, sono analizzati e mostrati nel terminale o salvati su file .pcap
.
A seconda della distribuzione Linux utilizzata, la sintassi per installare tcpdump cambia. Nel caso di macOS basta ricorrere a Homebrew:
sudo apt install tcpdump
(Debian/Ubuntu)
sudo yum install tcpdump
(RHEL/CentOS)
brew install tcpdump
(macOS)
Cattura di base
La cattura di pacchetti con tcpdump è il primo passo fondamentale per analizzare il traffico di rete. In modo molto semplice, è possibile aprire una finestra del terminale e iniziare a catturare tutto ciò che passa su una specifica interfaccia di rete (nell’esempio eth0
):
sudo tcpdump -i eth0
Il comando avvia la cattura su eth0
mostrando in tempo reale i pacchetti che transitano. Tuttavia, spesso è necessario restringere la cattura a determinati protocolli, porte o indirizzi IP per evitare inutili sovraccarichi e rendere immediatamente leggibile quanto prodotto da tcpdump.
Nella tabella che segue riassumiamo alcuni comandi di cattura di base e i rispettivi scopi:
Comando | Descrizione |
---|---|
tcpdump -i eth0 |
Cattura tutto il traffico sull’interfaccia eth0 |
tcpdump -i eth0 port 80 |
Cattura solo il traffico HTTP (porta 80) |
tcpdump -i eth0 host 192.168.1.10 |
Cattura solo i pacchetti da o verso l’host 192.168.1.10 |
tcpdump -i eth0 tcp |
Cattura solo i pacchetti TCP |
tcpdump -i eth0 udp |
Cattura solo i pacchetti UDP |
tcpdump -i eth0 -c 100 |
Interrompe la cattura dopo 100 pacchetti |
Per eseguire correttamente tcpdump, potrebbe essere necessario anteporre il comando sudo
oppure acquisire preventivamente i diritti di root con sudo -i
.
È anche possibile salvare un dump da passare ad applicazioni come Wireshark utilizzando il seguente comando: tcpdump -i eth0 -w cattura.pcap
Limitazioni e considerazioni
È importante tenere presente che tcpdump non è pensato per l’analisi automatizzata a lungo termine. I file .pcap possono infatti diventare rapidamente molto grandi e l’utilità non integra le capacità di decodifica profonda proprie di Wireshark. Per un’analisi all’impronta e verificare cosa sta avvenendo interno della rete locale, tcpdump si conferma un valido alleato.
Va evidenziato che tcpdump non funziona bene all’interno di WSL 2 (Windows Subsystem for Linux) perché il software Microsoft non ha accesso diretto alla scheda di rete fisica del sistema Windows. Inoltre, anche se tcpdump la richiede, WSL 2 non consente di abilitare la modalità promiscua sull’interfaccia virtuale. L’uso dell’apposito flag PROMISC
non ha alcun effetto reale nel contesto di WSL.
Nulla vieta, comunque, di usare tcpdump per catturare e analizzare il traffico generato all’interno di WSL.
Cosa si può fare realisticamente con tcpdump
Avvalendosi di uno strumento “pronto per l’uso” come tcpdump è possibile vedere in diretta i pacchetti che transitano su una specifica interfaccia, diagnosticare connessioni sospette, verificare il traffico generato da un’applicazione, osservare handshake TCP o negoziazioni TLS.
Grazie ai filtri BPF, si ha la possibilità di isolare il traffico che interessa, in modo da effettuare il debug di applicazioni client/server, identificare endpoint remoti e analizzare il comportamento di tunnel o reverse proxy.
Ovviamente, tcpdump può essere usato in combinazione con altri comandi Linux, in modo da stilare eventualmente pipeline decisamente complesse. Ad esempio, si può usare con:
grep
,awk
,sed
,cut
per analisi testualecron
osystemd
per raccolte periodichelogrotate
per log di lunga duratassh
per sniffing su server remoti
Di molti di questi comandi abbiamo spesso parlato nelle pagine de IlSoftware.it.