Come usare tcpdump per monitorare la nostra rete

Sommario

In questo tutorial vedremo come lavorare con tcpdump. È uno strumento opensource per la riga di comando, è usato per monitorare la rete, possiamo intenderlo come un analizzatore di pacchetti che passano attraverso la rete in cui si esegue il programma. Viene utilizzato in ambienti Unix, anche se esiste una variante per Windows chiamata WinDump. Potrebbe interessarti un tutorial su EtherApe, che è uno strumento per vedere graficamente lo stato della nostra rete.

Nel tutorial lavoreremo da Linux, in particolare in Ubuntu 16.04, affinché lo strumento funzioni dobbiamo eseguirlo con privilegi elevati, ad eccezione di alcune opzioni, che saranno necessarie.

Possiamo usare tcpdump per varie attività, come il debug delle nostre applicazioni di rete, la lettura dei dati che vengono inviati tra gli utenti sulla rete in cui ci troviamo, ecc. Di seguito inseriamo la sua sintassi:

 tcpdump [-aAbdDefhHIJKlLnNOpqRStuUvxX #] [-B size] [-c count] [-C file_size] [-E qualcosa: secret] [-F file] [-G secondi] [-i interface] [-j tstamptype] [- M segreto] [--number] [-Q in | out | inout] [-r file] [-s snaplen] [--time-stamp-precision precision] [--immediate-mode] [-T type] [ --version] [-V file] [-w file] [-W filecount] [-y datalinktype] [-z comando] [-Z utente] [espressione]
Questo strumento ha un gran numero di parametri che possiamo usare, qui ne vedremo alcuni.

Alcuni parametri tcpdump

  • -A: Stampa i colli in codice ASCII.
  • -X: Stampa i pacchetti in esadecimale.
  • -D: mostra le interfacce disponibili.
  • -C numero: Chiuderà il programma quando il numero indicato di pacchetti è stato catturato.
  • -io interfaccia: il programma è in ascolto sull'interfaccia specificata.
  • -IO: Mette l'interfaccia in modalità monitor.
  • -P: Non mette l'interfaccia in modalità promiscua.
  • -f file: L'output è memorizzato nel file che indichiamo.
  • -h: Visualizza la guida per il suo utilizzo.

Se vogliamo vedere tutti i parametri disponibili, in Linux usiamo:

 uomo tcpdump
L'uso di questo comando è più completo dell'aiuto offerto dal parametro -h o --aiuto, che ci mostrerebbe solo quanto segue:

Vedremo 10 esempi per iniziare con questo potente strumento.

NotaIn quasi tutti gli esempi vedrai che sudo viene usato prima di tcpdump, come detto prima, è necessario avviarlo con privilegi alti, se stai usando il terminale come root allora non è necessario mettere nulla davanti a tcpdump. Se vuoi fermare la cattura puoi combinare i tasti:

CTRL + C

Esempio 1
L'esempio più semplice utilizzando il parametro -A. Per questo eseguiamo:

 tcpdump -A

Vediamo un esempio con qualche contenuto in più.

Esempio 2
Ora filtreremo per host e aggiungeremo la modalità dettagliata con il parametro -v:

 sudo tcpdump host 192.168.66.130 -v
Di seguito è riportata un'immagine utilizzando il comando precedente:

Per l'immagine ho fatto un ping da un'altra macchina, così possiamo vedere ICMP. Passiamo al terzo esempio.

Esempio 3
In questo esempio esamineremo i pacchetti dallo stesso host, solo che questa volta i pacchetti che hanno a che fare con la porta 80:

 sudo tcpdump host 192.168.66.130 e porta 80 -v
Se osserviamo la cattura vedremo qualcosa di simile a quanto segue:

Puoi vedere quanto sia facile da gestire questo strumento, andiamo avanti.

Esempio 4
Useremo l'esempio 3 e lo modificheremo, vogliamo filtrare i pacchetti con origine 192.168.66.130 che vanno alla porta 80:

 sudo tcpdump src host 192.168.66.130 e dst port 80 -v
Vediamo che abbiamo usato il condizionale e, affinché le due condizioni siano soddisfatte, possiamo anche usare o, se vogliamo che sia soddisfatta solo una di esse. Se guardiamo gli screenshot vediamo una richiesta POST.

Passiamo al quinto esempio.

Esempio 5
Acquisiremo pacchetti che indicano un'interfaccia:

 sudo tcpdump -i ens33
NotaLa tua interfaccia è probabilmente eth0, puoi vederla con il comando ifconfig, ma anche con il parametro -D di tcpdump funzionerà per noi, lo vedremo nell'esempio seguente.

Di seguito puoi vedere un'immagine della cattura.

Andiamo per il prossimo.

Esempio 6
In questo esempio, l'unica cosa che faremo è mostrare le interfacce disponibili, per questo eseguiamo:

 tcpdump -D
In questo caso non è necessario essere root.

Continuiamo.

Esempio 7
Vogliamo catturare 3 pacchetti che sono destinati alla porta 1987 e quando ciò si verifica, arrestare il programma:

 sudo tcpdump -c 3 dst port 1987
Possiamo vedere nell'immagine seguente che vengono catturati solo 3 pacchetti:

Vediamo qualche altro esempio.

Esempio 8
Quando siamo interessati a ottenere tutti i pacchetti di traffico tcp che non vanno a una determinata porta, ad esempio la porta 80, eseguiremo quanto segue:

 sudo tcpdump non porta 80 e tcp
L'output è simile, quindi in questo esempio non è impostata alcuna acquisizione. Facciamo il penultimo esempio.

Esempio 9
Acquisiremo 2 pacchetti di un'interfaccia specifica e li mostreremo in formato esadecimale, per questo dobbiamo eseguire:

 sudo tcpdump -i ens33 -x -c 2
Di seguito puoi vedere l'output:

Bene, passiamo all'ultimo esempio del tutorial.

Esempio 10
In questo esempio salveremo la cattura in un file per guardarla in seguito. La cattura è limitata a 3 pacchetti e viene specificata un'interfaccia, quindi eseguiremo:

 sudo tcpdump -w test.pcap -i ens33 -c 3
Vediamo uno screenshot:

Se vogliamo leggere quel file ora, dobbiamo eseguire:

 tcpdump -r test.pcap
Lo possiamo vedere nell'immagine seguente:

Il tutorial su tcpdump è arrivato fin qui, ha molte possibilità e molte opzioni, quindi per imparare a gestire bene questo strumento, è meglio esercitarsi e scoprire tutte le sue funzionalità a poco a poco. Potresti anche essere interessato a leggere qualcosa sullo strumento netcat, quindi ecco un link a un tutorial con esempi:

Come usare netcat

Ti è piaciuto e hai aiutato questo Tutorial?Puoi premiare l'autore premendo questo pulsante per dargli un punto positivo
wave wave wave wave wave