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,cutper analisi testualecronosystemdper raccolte periodichelogrotateper log di lunga duratasshper sniffing su server remoti
Di molti di questi comandi abbiamo spesso parlato nelle pagine de IlSoftware.it.