GNU/Linux >> Linux Esercitazione >  >> Linux

Comando Tcpdump in Linux

tcpdump è un'utilità della riga di comando che puoi utilizzare per acquisire e ispezionare il traffico di rete in entrata e in uscita dal tuo sistema. È lo strumento più comunemente utilizzato dagli amministratori di rete per la risoluzione dei problemi di rete e i test di sicurezza.

Nonostante il nome, con tcpdump , puoi anche acquisire traffico non TCP come UDP, ARP o ICMP. I pacchetti acquisiti possono essere scritti su un file o su un output standard. Una delle funzionalità più potenti di tcpdump comando è la sua capacità di utilizzare filtri e acquisire solo i dati che desideri analizzare.

In questo articolo, tratteremo le nozioni di base su come utilizzare tcpdump comando in Linux.

Installazione di tcpdump #

tcpdump è installato per impostazione predefinita sulla maggior parte delle distribuzioni Linux e macOS. Per verificare se il tcpdump comando è disponibile sul tuo tipo di sistema:

tcpdump --version

L'output dovrebbe essere simile a questo:

tcpdump version 4.9.2
libpcap version 1.8.1
OpenSSL 1.1.1b  26 Feb 2019

Se tcpdump non è presente sul tuo sistema, il comando precedente stamperà "tcpdump:comando non trovato". Puoi facilmente installare tcpdump utilizzando il gestore pacchetti della tua distribuzione.

Installazione di tcpdump su Ubuntu e Debian #

sudo apt update && sudo apt install tcpdump

Installazione di tcpdump su CentOS e Fedora #

sudo yum install tcpdump

Installazione di tcpdump su Arch Linux #

sudo pacman -S tcpdump

Cattura di pacchetti con tcpdump #

La sintassi generale per tcpdump il comando è il seguente:

tcpdump [options] [expression]
  • Il comando options consentono di controllare il comportamento del comando.
  • Il filtro expression definisce quali pacchetti verranno acquisiti.

Solo root o utente con sudo i privilegi possono eseguire tcpdump . Se provi a eseguire il comando come utente non privilegiato, riceverai un errore che dice:"Non hai l'autorizzazione per acquisire su quel dispositivo".

Il caso d'uso più semplice è invocare tcpdump senza opzioni e filtri:

sudo tcpdump
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens3, link-type EN10MB (Ethernet), capture size 262144 bytes
15:47:24.248737 IP linuxize-host.ssh > desktop-machine.39196: Flags [P.], seq 201747193:201747301, ack 1226568763, win 402, options [nop,nop,TS val 1051794587 ecr 2679218230], length 108
15:47:24.248785 IP linuxize-host.ssh > desktop-machine.39196: Flags [P.], seq 108:144, ack 1, win 402, options [nop,nop,TS val 1051794587 ecr 2679218230], length 36
15:47:24.248828 IP linuxize-host.ssh > desktop-machine.39196: Flags [P.], seq 144:252, ack 1, win 402, options [nop,nop,TS val 1051794587 ecr 2679218230], length 108

... Long output suppressed

23116 packets captured
23300 packets received by filter
184 packets dropped by kernel

tcpdump continuerà a catturare pacchetti e scrivere sullo standard output fino a quando non riceve un segnale di interruzione. Usa il Ctrl+C combinazione di tasti per inviare un segnale di interruzione e interrompere il comando.

Per un output più dettagliato, passa -v opzione, o -vv per un output ancora più dettagliato:

sudo tcpdump -vv

Puoi specificare il numero di pacchetti da acquisire usando il -c opzione. Ad esempio, per acquisire solo dieci pacchetti, digitare:

sudo tcpdump -c 10

Dopo aver catturato i pacchetti, tcpdump si fermerà.

Quando non viene specificata alcuna interfaccia, tcpdump usa la prima interfaccia che trova e scarica tutti i pacchetti che passano attraverso quell'interfaccia.

Usa il -D opzione per stampare un elenco di tutte le interfacce di rete disponibili da cui tcpdump può raccogliere i pacchetti:

sudo tcpdump -D

Per ciascuna interfaccia, il comando stampa il nome dell'interfaccia, una breve descrizione e un indice associato (numero):

1.ens3 [Up, Running]
2.any (Pseudo-device that captures on all interfaces) [Up, Running]
3.lo [Up, Running, Loopback]

L'output sopra mostra che ens3 è la prima interfaccia trovata da tcpdump e utilizzato quando non viene fornita alcuna interfaccia al comando. La seconda interfaccia any è un dispositivo speciale che ti permette di catturare tutte le interfacce attive.

Per specificare l'interfaccia su cui vuoi catturare il traffico, invoca il comando con -i opzione seguita dal nome dell'interfaccia o dall'indice associato. Ad esempio, per acquisire tutti i pacchetti da tutte le interfacce, devi specificare any interfaccia:

sudo tcpdump -i any

Per impostazione predefinita, tcpdump esegue la risoluzione DNS inversa sugli indirizzi IP e traduce i numeri di porta in nomi. Usa il -n opzione per disabilitare la traduzione:

sudo tcpdump -n

Saltare la ricerca DNS evita di generare traffico DNS e rende l'output più leggibile. Si consiglia di utilizzare questa opzione ogni volta che invochi tcpdump .

Invece di visualizzare l'output sullo schermo, puoi reindirizzarlo a un file utilizzando gli operatori di reindirizzamento > e >> :

sudo tcpdump -n -i any > file.out

Puoi anche guardare i dati mentre salvi su un file usando il tee comando:

sudo tcpdump -n -l | tee file.out

Il -l opzione nel comando sopra dice a tcpdump per rendere la linea di output bufferizzata. Quando questa opzione non viene utilizzata, l'output non verrà scritto sullo schermo quando viene generata una nuova riga.

Capire il tcpdump Uscita #

tcpdump emette le informazioni per ogni pacchetto catturato su una nuova riga. Ogni riga include un timestamp e informazioni su quel pacchetto, a seconda del protocollo.

Il formato tipico di una riga di protocollo TCP è il seguente:

[Timestamp] [Protocol] [Src IP].[Src Port] > [Dst IP].[Dst Port]: [Flags], [Seq], [Ack], [Win Size], [Options], [Data Length]

Andiamo campo per campo e spieghiamo la seguente riga:

15:47:24.248737 IP 192.168.1.185.22 > 192.168.1.150.37445: Flags [P.], seq 201747193:201747301, ack 1226568763, win 402, options [nop,nop,TS val 1051794587 ecr 2679218230], length 108
  • 15:47:24.248737 - Il timestamp del pacchetto acquisito è in ora locale e utilizza il seguente formato:hours:minutes:seconds.frac , dove frac sono frazioni di secondo dalla mezzanotte.

  • IP - Il protocollo del pacchetto. In questo caso, IP indica il protocollo Internet versione 4 (IPv4).

  • 192.168.1.185.22 - L'indirizzo IP e la porta di origine, separati da un punto (. ).

  • 192.168.1.150.37445 - L'indirizzo IP e la porta di destinazione, separati da un punto (. ).

  • Flags [P.] - Campo Flag TCP. In questo esempio, [P.] significa pacchetto di riconoscimento push, che viene utilizzato per riconoscere il pacchetto precedente e inviare dati. Altri valori tipici dei campi flag sono i seguenti:

    • [.] - ACK (Riconoscimento)
    • [S] - SYN (Avvia connessione)
    • [P] - PSH (Dati push)
    • [F] - FIN (Fine connessione)
    • [R] - RST (Ripristina connessione)
    • [S.] - SYN-ACK (pacchetto SynAcK)
  • seq 201747193:201747301 - Il numero di sequenza è nel first:last notazione. Mostra il numero di dati contenuti nel pacchetto. Fatta eccezione per il primo pacchetto nel flusso di dati in cui questi numeri sono assoluti, tutti i pacchetti successivi vengono utilizzati come posizioni di byte relative. In questo esempio, il numero è 201747193:201747301 , il che significa che questo pacchetto contiene i byte da 201747193 a 201747301 del flusso di dati. Usa il -S opzione per stampare numeri di sequenza assoluti.

  • ack 1226568763 Il numero di riconoscimento è il numero di sequenza dei dati successivi previsti dall'altra estremità di questa connessione.

  • win 402 - Il numero della finestra è il numero di byte disponibili nel buffer di ricezione.

  • options [nop,nop,TS val 1051794587 ecr 2679218230] - Opzioni TCP. nop o "nessuna operazione" è il riempimento utilizzato per rendere l'intestazione TCP multiplo di 4 byte. TS val è un timestamp TCP e ecr sta per una risposta eco. Visita la documentazione IANA per ulteriori informazioni sulle opzioni TCP.

  • length 108 - La lunghezza dei dati del carico utile

tcpdump Filtri #

Quando tcpdump viene invocato senza filtri, cattura tutto il traffico e produce un'enorme quantità di output che rende molto difficile trovare e analizzare i pacchetti di interesse.

I filtri sono una delle funzionalità più potenti di tcpdump comando. Dal momento che ti consentono di catturare solo quei pacchetti che corrispondono all'espressione. Ad esempio, durante la risoluzione dei problemi relativi a un server web, puoi utilizzare i filtri per ottenere solo il traffico HTTP.

tcpdump utilizza la sintassi Berkeley Packet Filter (BPF) per filtrare i pacchetti acquisiti utilizzando vari parametri di lavorazione come protocolli, indirizzi IP e porte di origine e destinazione, ecc.

In questo articolo, daremo un'occhiata ad alcuni dei filtri più comuni. Per un elenco di tutti i filtri disponibili, controlla la pagina pcap-filterman.

Filtraggio per protocollo n.

Per limitare l'acquisizione a un protocollo particolare, specificare il protocollo come filtro. Ad esempio, per acquisire solo il traffico UDP, eseguiresti:

sudo tcpdump -n udp

Un altro modo per definire il protocollo è usare il proto qualificatore, seguito dal numero di protocollo. Il seguente comando filtrerà il protocollo numero 17 e produrrà lo stesso risultato di quello sopra:

sudo tcpdump -n proto 17

Per ulteriori informazioni sui numeri, controlla l'elenco dei numeri del protocollo IP.

Filtraggio per host #

Per acquisire solo i pacchetti relativi a un host specifico, usa host qualificatore:

sudo tcpdump -n host 192.168.1.185

L'host può essere un indirizzo IP o un nome.

Puoi anche filtrare l'output in un determinato intervallo IP utilizzando net qualificatore. Ad esempio, per scaricare solo i pacchetti relativi a 10.10.0.0/16 useresti:

sudo tcpdump -n net 10.10

Filtraggio per porta #

Per limitare l'acquisizione solo ai pacchetti da o verso una porta specifica, usa la port qualificatore. Il comando seguente acquisisce i pacchetti relativi al servizio SSH (porta 22) utilizzando questo comando:

sudo tcpdump -n port 23

Il portrange il qualificatore ti consente di acquisire il traffico in un intervallo di porte:

sudo tcpdump -n portrange 110-150

Filtraggio per origine e destinazione #

Puoi anche filtrare i pacchetti in base alla porta o all'host di origine o di destinazione utilizzando are src , dst , src and dst e src or dst qualificazioni.

Il comando seguente acquisisce i pacchetti in arrivo da un host con IP 192.168.1.185:

sudo tcpdump -n src host 192.168.1.185

Per trovare il traffico proveniente da qualsiasi sorgente verso la porta 80, dovresti utilizzare:

sudo tcpdump -n dst port 80

Filtri complessi #

I filtri possono essere combinati usando and (&& ), or (|| ), e not (! ) operatori.

Ad esempio, per acquisire tutto il traffico HTTP proveniente da un indirizzo IP di origine 192.168.1.185 dovresti utilizzare questo comando:

sudo tcpdump -n src 192.168.1.185 and tcp port 80

Puoi anche utilizzare le parentesi per raggruppare e creare filtri più complessi:

sudo tcpdump -n 'host 192.168.1.185 and (tcp port 80 or tcp port 443)'

Per evitare errori di analisi quando si utilizzano caratteri speciali, racchiudere i filtri tra virgolette singole.

Ecco un altro comando di esempio per acquisire tutto il traffico tranne SSH da un indirizzo IP di origine 192.168.1.185:

sudo tcpdump -n src 192.168.1.185 and not dst port 22

Ispezione pacchetto #

Per impostazione predefinita tcpdump , acquisisce solo le intestazioni dei pacchetti. Tuttavia, a volte potrebbe essere necessario controllare il contenuto dei pacchetti.

tcpdump consente di stampare il contenuto dei pacchetti in ASCII e HEX.

Il -A l'opzione dice a tcpdump per stampare ogni pacchetto in ASCII e -x in esadecimale:

sudo tcpdump -n -A

Per mostrare il contenuto del pacchetto sia in formato HEX che in ASCII, usa il -X opzione:

sudo tcpdump -n -X

Lettura e scrittura di acquisizioni su un file #

Un'altra utile funzionalità di tcpdump è scrivere i pacchetti in un file. Ciò è utile quando si acquisiscono un numero elevato di pacchetti o si acquisiscono pacchetti per un'analisi successiva.

Per iniziare a scrivere su un file, usa -w opzione seguita dal file di acquisizione di output:

sudo tcpdump -n -w data.pcap

Questo comando sopra salverà l'acquisizione in un file chiamato data.pcap . Puoi nominare il file come vuoi, ma è una convenzione comune usare il .pcap estensione (acquisizione di pacchetti).

Quando il -w viene utilizzata, l'output non viene visualizzato sullo schermo. tcpdump scrive pacchetti grezzi e crea un file binario che non può essere letto con un normale editor di testo.

Per ispezionare il contenuto del file, invoca tcpdump con il -r opzione:

sudo tcpdump -r data.pcap

Se vuoi eseguire tcpdump sullo sfondo, aggiungi il simbolo e commerciale (& ) alla fine del comando.

Il file di acquisizione può anche essere ispezionato con altri strumenti di analisi dei pacchetti come Wireshark.

Quando si acquisiscono pacchetti per un lungo periodo di tempo, è possibile abilitare la rotazione dei file. tcpdump consente di creare nuovi file e ruotare il file dump in base a un intervallo di tempo specificato oa una dimensione fissa. Il comando seguente creerà fino a dieci file da 200 MB, denominati file.pcap0 , file.pcap1 , e così via:prima di sovrascrivere i file meno recenti.

sudo tcpdump -n -W 10 -C 200 -w /tmp/file.pcap

Una volta generati dieci file, i file più vecchi verranno sovrascritti.

Tieni presente che dovresti eseguire solo tcpdump solo durante la risoluzione dei problemi.

Se vuoi avviare tcpdump in un momento specifico, puoi usare un cronjob. tcpdump non ha un'opzione per uscire dopo un determinato tempo. Puoi utilizzare il timeout comando per interrompere tcpdump dopo qualche tempo. Ad esempio, per uscire dopo 5 minuti, dovresti utilizzare:

sudo timeout 300 tcpdump -n -w data.pcap

Conclusione #

tcpdump è uno strumento da riga di comando per l'analisi e la risoluzione dei problemi relativi alla rete.

Questo articolo ti ha introdotto alle basi di tcpdump uso e sintassi. Per una documentazione più approfondita, visitare il sito tcpdumpweb.

Se hai domande o feedback, sentiti libero di lasciare un commento.


Linux
  1. Come acquisire e analizzare i pacchetti con il comando tcpdump su Linux

  2. Comando Linux mv

  3. Linux du comando

  4. comando IP Linux

  5. comando cd di Linux

Comando W in Linux

Comando Tcpdump in Linux

Al comando in Linux

Comando Df in Linux

comando Linux tcpdump

Analizzatore di pacchetti:15 esempi di comandi TCPDUMP