L'utilità tcpdump consente di acquisire i pacchetti che fluiscono all'interno della rete per facilitare la risoluzione dei problemi di rete. Di seguito sono riportati diversi esempi di utilizzo di tcpdump con diverse opzioni. Il traffico viene acquisito in base a un filtro specifico. Esistono diverse opzioni, tra cui:
Opzioni | Descrizione |
---|---|
-D | Stampa un elenco di interfacce di rete. |
-i | Specifica un'interfaccia su cui acquisire. |
-c | Specifica il numero di pacchetti da ricevere. |
-v, -vv, -vvv | Aumenta il livello di dettaglio (verbosità). |
-w | Scrivi i dati acquisiti in un file. |
-r | Legge i dati acquisiti da un file. |
Installazione dell'utilità tcpdump
Sulla maggior parte dei sistemi unix/linux non troverai il pacchetto tcpdump già installato. Per installare l'ultima versione, utilizzare il gestore di pacchetti appropriato sul sistema. Ad esempio, in caso di server CentOS/RHEL:
# yum install tcpdump
Esempi di utilizzo di tcpdump per la risoluzione dei problemi di rete
1. Visualizza l'elenco delle interfacce di rete
Per stampare un elenco di interfacce di rete disponibili su cui tcpdump può acquisire pacchetti:
# tcpdump -D 1.eth0 2.nflog (Linux netfilter log (NFLOG) interface) 3.nfqueue (Linux netfilter queue (NFQUEUE) interface) 4.any (Pseudo-device that captures on all interfaces) 5.lo [Loopback]
2. Acquisizione su un'interfaccia specifica
Come si vede dal comando 'tcpdump -D', per ogni interfaccia di rete viene stampato un numero e un nome di interfaccia. Il nome dell'interfaccia o il numero possono essere forniti a -i flag per specificare un'interfaccia su cui acquisire. Ad esempio, per acquisire i pacchetti sull'interfaccia eth0:
# tcpdump -i 1 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes 01:26:51.118038 IP ec2-54-159-106-120.compute-1.amazonaws.com.48021 > geeklab.31297: Flags [S], seq 3960153353, win 26883, options [mss 1460,sac kOK,TS val 2229362922 ecr 0,nop,wscale 7], length 0 01:26:51.118072 IP geeklab.31297 > ec2-54-159-106-120.compute-1.amazonaws.com.48021: Flags [S.], seq 547340507, ack 3960153354, win 26847, optio ns [mss 8961,sackOK,TS val 5714985 ecr 2229362922,nop,wscale 7], length 0
In questo esempio, l'output è continuo finché non viene terminato premendo Ctrl + C.
3. Cattura solo un numero specifico di pacchetti
Per uscire da tcpdump dopo aver ricevuto un numero specifico di pacchetti, usa -c (count) opzione seguita dal numero di pacchetti da ricevere. L'esempio seguente acquisisce due pacchetti:
# tcpdump -i 1 -c 2 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes 01:37:08.956549 IP 182.100.67.76.38819 > geeklab.ssh: Flags [P.], seq 542149092:542149176, ack 774431931, win 271, options [nop,nop,TS val 26493 51 ecr 6332468], length 84 01:37:08.956575 IP geeklab.ssh > 182.100.67.76.38819: Flags [.], ack 84, win 230, options [nop,nop,TS val 6332824 ecr 2649351], length 0 2 packets captured 6 packets received by filter 0 packets dropped by kernel
Come mostrato in questo esempio, quando tcpdump termina l'acquisizione dei pacchetti, segnala quanto segue:
- Pacchetti acquisiti :Questo è il numero di pacchetti che tcpdump ha ricevuto ed elaborato.
- pacchetti ricevuti tramite filtro :È possibile specificare un filtro sulla riga di comando e solo i pacchetti che corrispondono al filtro definito vengono elaborati da tcpdump e contati.
- pacchetti eliminati dal kernel :Questo è il numero di pacchetti che sono stati eliminati a causa della mancanza di spazio nel buffer. Usa l'opzione -B per impostare la dimensione del buffer.
4. Aumenta i dettagli (verbosità) dell'output
Per aumentare il dettaglio (verbosità) dell'output, usa -v opzione o -vv per un output ancora più dettagliato, o -vvv per il livello di output più dettagliato:
# tcpdump –i 1 –v # tcpdump –i 1 -vv # tcpdump –i 1 –vvv
5. Acquisisci i dati in un file
Utilizzo dell'utilità tcpdump con -w l'opzione consente di scrivere i dati acquisiti in un file. Ciò consente ai dati acquisiti di essere letti da altri strumenti di analisi della rete, come Wireshark. L'esempio seguente acquisisce i dati in un file denominato capture.out:
# tcpdump –i 1 –v –c2 –w capture.out
6. lettura dei dati acquisiti
Puoi anche leggere i dati acquisiti da un file utilizzando –r opzione:
# tcpdump –r capture_file
Alcuni altri esempi di comando tcpdump
Molte altre opzioni e argomenti possono essere usati con tcpdump. Di seguito sono riportati alcuni esempi specifici della potenza dell'utilità tcpdump.
1. Visualizza il traffico tra 2 host
Per visualizzare tutto il traffico tra due host (rappresentato dalle variabili host1 e host2):
# tcpdump host host1 and host2
2. Visualizza solo il traffico da un host di origine o di destinazione
Per visualizzare il traffico solo da un host di origine (src) o di destinazione (dst):
# tcpdump src host # tcpdump dst host
3. Visualizza il traffico per un protocollo specifico
Fornisci il protocollo come argomento per visualizzare solo il traffico per un protocollo specifico, ad esempio tcp, udp, icmp, arp:
# tcpdump protocol
Ad esempio per visualizzare il traffico solo per il traffico TCP :
# tcpdump tcp
4. Filtraggio in base alla porta di origine o di destinazione
Per filtrare in base a una porta di origine o di destinazione:
# tcpdump src port ftp # tcpdump dst port http
L'utilità tcpdump accetta anche operatori booleani (AND, NOT, OR) e raggruppamenti di operatori, consentendoti di creare filtri complessi per l'acquisizione dei dati di rete.