Nozioni di base dello sniffer di pacchetti per la risoluzione dei problemi di rete

Lesecuzione di catture di pacchetti utilizzando uno sniffer può essere un metodo estremamente potente per diagnosticare problemi complessi. Quando tutto il resto fallisce, è spesso utile visualizzare i dati grezzi inviati in rete. I pacchetti non mentono e lanalisi del traffico della tua applicazione a un livello basso può rivelare sintomi più profondi di un problema (o rivelare un problema di cui non sapevi nemmeno lesistenza).

In questo articolo, noi tratterò alcuni fondamenti dellutilizzo dello strumento tcpdump basato su CLI.

Nozioni di base su Sniffer

Quindi prima prima le cose: cosa intendiamo quando diciamo “packet sniffer?” Uno sniffer di pacchetti è semplicemente un software che ti consente di catturare i pacchetti sulla tua rete. Tcpdump e Wireshark sono esempi di packet sniffer. Tcpdump fornisce uno sniffer di pacchetti CLI e Wireshark fornisce una GUI ricca di funzionalità per lo sniffing e lanalisi dei pacchetti.

Per impostazione predefinita, tcpdump opera in modalità promiscua. Ciò significa semplicemente che tutti i pacchetti che raggiungono un host verranno inviati a tcpdump per lispezione. Questa impostazione include anche il traffico che non era destinato allhost specifico su cui stai acquisendo, come il traffico broadcast e multicast. Ovviamente, tcpdump non è un software magico: può solo catturare quei pacchetti che in qualche modo raggiungono una delle interfacce fisiche della tua macchina.

Installazione tcpdump è semplice. È disponibile nei repository di pacchetti standard sul sistema Red Hat e puoi installarlo per nome:

Scenari comuni di packet sniffing

Catturare tutto il traffico in entrata nella tua macchina può sembrare concettualmente interessante, ma suona anche a un livello abbastanza basso per molte delle attività che svolgiamo nel nostro lavoro quotidiano come amministratori di sistema. Quindi, quando useresti uno strumento di cattura dei pacchetti? Di solito mi rivolgo a uno sniffer di pacchetti quando sto risolvendo un problema con unapplicazione di rete e ho esaurito tutte le altre opzioni. Spesso ho già eseguito la risoluzione dei problemi di rete di base ed esaminato i file di registro dellapplicazione, ma non riesco ancora ad arrivare alla fine di un problema. A questo punto, può essere istruttivo utilizzare uno sniffer di pacchetti per osservare i dati effettivi inviati in rete.

Un altro ottimo caso duso per uno sniffer di pacchetti è pedagogico. Guardare i pacchetti coinvolti in uno scambio di applicazioni può fare molto per migliorare la comprensione dei protocolli sottostanti. Ad esempio, può essere prezioso osservare lintero flusso di pacchetti di una query DNS ricorsiva quando si cerca di capire come funziona il DNS.

Esecuzione di acquisizioni di pacchetti di base

Il modo migliore per imparare è semplicemente immergendoti, quindi iniziamo con alcune acquisizioni di pacchetti di base. Innanzitutto, proviamo tcpdump senza opzioni speciali. Nota che dovrai essere il superutente per eseguire le acquisizioni dei pacchetti (tecnicamente, puoi eseguirlo da un account normale con funzionalità speciali, ma di solito è più facile eseguirlo come root). Usa Ctrl + C o invia un SIGTERM all tcpdump ID processo (PID) per interrompere lacquisizione.

tcpdump predefinito

A guarda loutput predefinito di tcpdump, digita semplicemente il comando:

Nota: invece di avere molti output in volo prima di premere Ctrl + C, puoi specificare quanti pacchetti vuoi vedere con il flag -c. Il comando precedente potrebbe invece essere tcpdump -c 6 per ottenere gli stessi risultati (sei pacchetti catturati).

Loutput di tcpdump può essere un po scoraggiante allinizio, ma ti abituerai a guardarlo dopo aver usato questo strumento alcune volte. Analizziamo i campi, da sinistra a destra:

Annotare uninterfaccia specifica

Notare che la parte superiore delloutput dellesempio precedente mostra linterfaccia che tcpdump inizia lacquisizione su (eth0) e la parte inferiore dellacquisizione include statistiche di riepilogo sui pacchetti catturati.

La prima cosa che probabilmente vorrai fare quando usi tcpdump serve a specificare una particolare interfaccia per eseguire le acquisizioni. Per impostazione predefinita, tcpdump sceglierà linterfaccia con il numero più basso che è “up”. Molti server hanno più interfacce e dovrai essere esplicito sullinterfaccia che utilizzi per lacquisizione. Inoltre, alcuni tipi di interfaccia “speciali”, come uninterfaccia netfilter, possono essere posizionati allinizio dellelenco. Questo comportamento può creare confusione, quindi è meglio specificare linterfaccia che ti interessa.

Iniziamo visualizzando le interfacce disponibili per lacquisizione:

Con un elenco di interfacce a nostra disposizione, ora possiamo specificare linterfaccia da ascoltare con il flag -i.Si noti che è possibile utilizzare il nome dellinterfaccia o il numero del comando --list-interfaces:

Guardando le acquisizioni precedenti ci fornisce informazioni di base sui pacchetti che attraversano il nostro Rete. Sembra che questi pacchetti contengano loutput STP (Spanning Tree Protocol), forse da uno switch a monte. Tecnicamente, questi non sono pacchetti, sono due frame a strati. Tuttavia, sentirai i termini usati in modo intercambiabile quando parli di catture di pacchetti.

Ottenere maggiori informazioni

Il semplice risultato della risoluzione dei problemi dellesempio precedente può essere ottimo per identificare problemi evidenti, ma a volte abbiamo bisogno più informazioni per approfondire davvero un problema complesso. Sapere come regolare la verbosità della tua cattura è importante, in quanto ti permette di scavare più a fondo nei dati effettivi contenuti nei pacchetti.

Il livello di verbosità di tcpdump è controllato aggiungendo da uno a tre -v flag al comando:

Nota che specificando il livello massimo di verbosità, posso vedere molte più informazioni su il corpo del pacchetto. Sopra, possiamo vedere ulteriori informazioni sui dati nel pacchetto STP, come lID del bridge root e il costo del percorso root. Se non hai familiarità con STP, non preoccuparti. La cosa importante da notare qui è che aumentando la verbosità, possiamo ottenere ulteriori informazioni sul nostro traffico di rete.

Vedere i byte esatti di un pacchetto

Aumentare la verbosità è utile, ma noi Non vedi ancora la carne del contenuto dei pacchetti. Se vuoi davvero vedere i byte esatti che sono nei pacchetti, puoi usare i flag -x e -X. Il flag -x stampa i dati in ogni pacchetto in esadecimale, mentre il flag -X stampa anche i dati in ASCII. Ecco loutput utilizzando -x:

Ed ecco loutput utilizzando -X:

Notare i dati esadecimali e ASCII negli esempi precedenti. In questo caso, stavo eseguendo una query di record DNS A per . Inoltre, tieni presente che ho utilizzato il flag -c per specificare il numero di pacchetti da acquisire e ho fornito un filtro di acquisizione di port 53. Discuteremo i filtri nel prossimo articolo.

Attenersi ai numeri

Mentre lavori con tcpdump, potresti notare che il suo comportamento predefinito è risolvere automaticamente gli indirizzi IP in nomi di dominio pienamente qualificati (FQDN). Tcpdump tradurrà anche i numeri di porta (come 22) in nomi descrittivi (come SSH). Sebbene questo comportamento sia piacevole, spesso desideriamo vedere i dati numerici in modo da non oscurare in alcun modo la nostra risoluzione dei problemi. Questo comportamento predefinito può essere modificato passando -n per disabilitare le ricerche di indirizzi IP o -nn per disabilitare sia le ricerche di indirizzi IP che di porte.

Ecco il risultato quando utilizzi -nn:

Salvataggio del dump

Ad un certo punto potresti volere per salvare le acquisizioni dei pacchetti per unanalisi successiva o per unanalisi più approfondita con uno strumento grafico come Wireshark. Questa operazione può essere eseguita facilmente con il flag -w, che ti permette di scrivere un file di cattura dei pacchetti:

Nota: puoi leggere il tuo file salvato usando tcpdump con il flag -r o con unaltra applicazione che supporta il formato di file pcap.

Come possiamo vedere sopra , il flag -w ha prodotto un pratico file pcap che possiamo portare con noi.

Conclusione

Lesecuzione di catture di pacchetti è una tecnica potente nellinventario delle competenze per la risoluzione dei problemi di rete, soprattutto quando sei bloccato su un problema e il resto della rete sembra OK. Capire come utilizzare tcpdump sulla riga di comando può farti risparmiare ore di frustrazione quando cerchi di risolvere i problemi delle applicazioni di rete e la sintassi è abbastanza intuitiva una volta che ti ci abitui.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *