Come usare tcpdump e 6 esempi

Stai cercando di acquisire pacchetti di dati per analizzare il traffico sulla tua rete? Forse sei un amministratore di server che ha riscontrato un problema e desidera monitorare i dati trasmessi sulla rete. Qualunque sia la situazione, l’utilità tcpdump Linux è ciò di cui hai bisogno.

In questo articolo, discuteremo in dettaglio il comando tcpdump, insieme ad alcune guide su come installare e utilizzare tcpdump sul tuo sistema Linux.

Cos’è il comando tcpdump?

Tcpdump è un potente strumento di monitoraggio della rete che consente a un utente di filtrare i pacchetti e il traffico su una rete in modo efficiente. È possibile ottenere informazioni dettagliate relative a TCP / IP e ai pacchetti trasmessi sulla rete. Tcpdump è un’utilità della riga di comando, il che significa che puoi eseguirla su server Linux senza display.

Gli amministratori di sistema possono anche integrare l’utilità tcpdump con cron per automatizzare varie attività come la registrazione. Poiché le sue numerose funzionalità lo rendono abbastanza versatile, tcpdump funziona come uno strumento di risoluzione dei problemi e di sicurezza.

Come installare tcpdump su Linux

Sebbene la maggior parte delle volte troverai tcpdump preinstallato sul tuo sistema, alcune distribuzioni Linux non vengono fornite con il pacchetto. Pertanto, potrebbe essere necessario installare manualmente l’utilità sul sistema.

Puoi controllare se tcpdump è installato sul tuo sistema usando il comando which .

which tcpdump

Se l’output mostra un percorso di directory ( / usr / bin / tcpdump ), il pacchetto è installato nel sistema. Tuttavia, in caso contrario, puoi farlo facilmente utilizzando il gestore di pacchetti predefinito sul tuo sistema.

Per installare tcpdump su distribuzioni basate su Debian come Ubuntu:

sudo apt-get install tcpdump

Anche l’installazione di tcpdump su CentOS è facile.

sudo yum install tcpdump

Sulle distribuzioni basate su Arch:

sudo pacman -S tcpdump

Per installare su Fedora:

sudo dnf install tcpdump

Nota che il pacchetto tcpdump richiede libcap come dipendenza, quindi assicurati di installarlo anche sul tuo sistema.

Esempi di tcpdump per acquisire pacchetti di rete su Linux

Ora che hai installato con successo tcpdump sulla tua macchina Linux, è il momento di monitorare alcuni pacchetti. Poiché tcpdump richiede i permessi di superutente per eseguire la maggior parte delle operazioni, dovrai aggiungere sudo ai tuoi comandi.

1. Elenca tutte le interfacce di rete

Per verificare quali interfacce di rete sono disponibili per l’acquisizione, utilizzare il flag -D con il comando tcpdump.

tcpdump -D

Il passaggio del flag –list-interfaces come argomento restituirà lo stesso output.

tcpdump --list-interfaces

L’output sarà un elenco di tutte le interfacce di rete presenti nel sistema.

Dopo aver ottenuto l’elenco delle interfacce di rete, è il momento di monitorare la rete acquisendo i pacchetti sul sistema. Sebbene sia possibile specificare quale interfaccia si desidera utilizzare, qualsiasi argomento comanda a tcpdump di acquisire i pacchetti di rete utilizzando qualsiasi interfaccia attiva.

tcpdump --interface any

Il sistema visualizzerà il seguente output.

Correlati: che cos’è il modello di interconnessione dei sistemi aperti?

2. Il formato di output di tcpdump

A partire dalla terza riga, ogni riga dell’output denota uno specifico pacchetto catturato da tcpdump. Ecco come appare l’output di un singolo pacchetto.

17:00:25.369138 wlp0s20f3 Out IP localsystem.40310 > kul01s10-in-f46.1e100.net.https: Flags [P.], seq 196:568, ack 1, win 309, options [nop,nop,TS val 117964079 ecr 816509256], length 33

Tieni presente che non tutti i pacchetti vengono catturati in questo modo, ma questo è il formato generale seguito dalla maggior parte di essi.

L’output contiene le seguenti informazioni.

  1. Timestamp del pacchetto ricevuto
  2. Nome dell’interfaccia
  3. Flusso di pacchetti
  4. Nome del protocollo di rete
  5. Indirizzo IP e dettagli della porta
  6. Flag TCP
  7. Il numero di sequenza di dati nel pacchetto
  8. Riconosci i dati
  9. Dimensioni della finestra
  10. Lunghezza del pacchetto

Il primo campo ( 17: 00: 25.369138 ) visualizza il timestamp quando il sistema ha inviato o ricevuto il pacchetto. L’ora registrata viene estratta dall’ora locale del sistema.

Il secondo e il terzo campo indicano l’interfaccia utilizzata e il flusso del pacchetto. Nello snippet sopra, wlp0s20f3 è il nome dell’interfaccia wireless e Out è il flusso di pacchetti.

Il quarto campo include le informazioni relative al nome del protocollo di rete. In generale, troverai due protocolli: IP e IP6 , dove IP indica IPV4 e IP6 è per IPV6.

Il campo successivo contiene gli indirizzi IP o il nome del sistema di origine e di destinazione. Gli indirizzi IP sono seguiti dal numero di porta.

Il sesto campo nell’output è costituito dai flag TCP. Ci sono vari flag che vengono usati nell’output di tcpdump.

Nome bandieraValoreDescrizione
SYNSConnessione avviata
FINFConnessione terminata
SPINGEREPI dati vengono inviati
RSTRLa connessione viene ripristinata
ACK.Riconoscimento

L’output può anche contenere una combinazione di diversi flag TCP. Ad esempio, FLAG [f.] Sta per un pacchetto FIN-ACK.

Spostandosi ulteriormente nello snippet di output, il campo successivo contiene il numero di sequenza ( seq 196: 568 ) dei dati nel pacchetto. Il primo pacchetto ha sempre un valore intero positivo ei pacchetti successivi utilizzano il numero di sequenza relativo per migliorare il flusso di dati.

Il campo successivo contiene il numero di riconoscimento ( ack 1 ) o il semplice numero di riconoscimento. Il pacchetto catturato nella macchina del mittente ha 1 come numero di riconoscimento. All’estremità del destinatario, il numero di riconoscimento è il valore del pacchetto successivo.

Il nono campo nell’output ospita la dimensione della finestra ( win 309 ), che è il numero di byte disponibili nel buffer di ricezione. Ci sono molti altri campi che seguono la dimensione della finestra, inclusa la dimensione massima del segmento (MSS).

L’ultimo campo ( lunghezza 33 ) contiene la lunghezza del pacchetto complessivo catturato da tcpdump.

3. Limitare il numero di pacchetti acquisiti

Durante la prima esecuzione del comando tcpdump, potresti notare che il sistema continua a catturare i pacchetti di rete finché non passi un segnale di interruzione. È possibile sovrascrivere questo comportamento predefinito specificando in anticipo il conteggio dei pacchetti che si desidera acquisire utilizzando il flag -c .

tcpdump --interface any -c 10

Il comando di cui sopra catturerà dieci pacchetti da qualsiasi interfaccia di rete attiva.

4. Filtra i pacchetti in base ai campi

Quando stai risolvendo un problema, ottenere un grande blocco di output di testo sul tuo terminale non lo rende più facile. È qui che entra in gioco la funzione di filtro in tcpdump. È possibile filtrare i pacchetti in base a vari campi tra cui host, protocollo, numero di porta e altro.

Per acquisire solo i pacchetti TCP, digitare:

tcpdump --interface any -c 5 tcp

Allo stesso modo, se vuoi filtrare l’output utilizzando il numero di porta:

tcpdump --interface any -c 5 port 50

Il comando sopra menzionato recupererà solo i pacchetti trasmessi attraverso la porta specificata.

Per ottenere i dettagli del pacchetto per un host particolare:

tcpdump --interface any -c 5 host 112.123.13.145

Se desideri filtrare i pacchetti inviati o ricevuti da un host specifico, utilizza l’argomento src o dst con il comando.

tcpdump --interface any -c 5 src 112.123.13.145
 tcpdump --interface any -c 5 dst 112.123.13.145

È inoltre possibile utilizzare gli operatori logici e e o per combinare due o più espressioni insieme. Ad esempio, per ottenere pacchetti che appartengono all’IP di origine 112.123.13.145 e utilizzare la porta 80 :

tcpdump --interface any -c 10 src 112.123.13.145 and port 80

Le espressioni complesse possono essere raggruppate usando le parentesi come segue:

tcpdump --interface any -c 10 "(src 112.123.13.145 or src 234.231.23.234) and (port 45 or port 80)"

5. Visualizza il contenuto del pacchetto

È possibile utilizzare i flag -A e -x con il comando tcpdump per analizzare il contenuto del pacchetto di rete. Il flag -A sta per il formato ASCII e -x denota il formato esadecimale .

Per visualizzare il contenuto del prossimo pacchetto di rete catturato dal sistema:

tcpdump --interface any -c 1 -A
 tcpdump --interface any -c 1 -x

Correlati: che cos’è la perdita di pacchetti e come risolverne la causa?

6. Salvare i dati acquisiti su un file

Se vuoi salvare i dati di acquisizione a scopo di riferimento, tcpdump è lì per aiutarti. Basta passare il flag -w con il comando predefinito per scrivere l’output su un file invece di visualizzarlo sullo schermo.

tcpdump --interface any -c 10 -w data.pcap

L’estensione del file .pcap sta per dati di acquisizione dei pacchetti . Puoi anche emettere il suddetto comando in modalità dettagliata usando il flag -v .

tcpdump --interface any -c 10 -w data.pcap -v

Per leggere un file .pcap utilizzando tcpdump, utilizzare il flag -r seguito dal percorso del file. -R sta per Read .

tcpdump -r data.pcap

È inoltre possibile filtrare i pacchetti di rete dai dati del pacchetto salvati nel file.

tcpdump -r data.pcap port 80

Monitoraggio del traffico di rete su Linux

Se ti è stato assegnato il compito di amministrare un server Linux, il comando tcpdump è un ottimo strumento da includere nel tuo arsenale. È possibile risolvere facilmente i problemi relativi alla rete acquisendo i pacchetti trasmessi sulla rete in tempo reale.

Ma prima di tutto, il tuo dispositivo deve essere connesso a Internet. Per i principianti di Linux, anche la connessione con il Wi-Fi tramite la riga di comando può essere un po ‘impegnativa. Ma se stai usando gli strumenti giusti, è un gioco da ragazzi.