Tcpdump è un comando utilizzato su vari sistemi operativi Linux (SO) che raccolgono pacchetti TCP / IP che passano attraverso una scheda di rete. Molto simile a uno sniffer di pacchetti, tcpdump non può solo analizzare il traffico di rete ma anche salvarlo su un file.
A differenza di alcuni comandi forniti dal sistema operativo per impostazione predefinita, è possibile che non sia possibile utilizzare tcpdump perché non è installato. Per installare tcpdump, eseguire apt-get install tcpdump o yum install tcpdump, a seconda del tuo sistema operativo.
Come funziona Tcpdump
Tcpdump stampa le intestazioni dei pacchetti su un'interfaccia di rete che corrisponde al booleano espressione . Può anche essere eseguito con-w flag, che lo fa salvare i dati del pacchetto in un file per un'analisi successiva e / o con il file-r flag, che lo fa leggere da un file di pacchetto salvato piuttosto che leggere pacchetti da un'interfaccia di rete. In tutti i casi, solo i pacchetti che corrispondono espressione sarà elaborato da tcpdump .
tcpdump sarà, se non eseguito con il-c flag, continua a catturare i pacchetti finché non viene interrotto da un segnale SIGINT (generato, ad esempio, digitando il carattere di interrupt, in genere Ctrl + C) o un segnale SIGTERM (generalmente generato conuccidere(1) comando); se eseguito con il-c flag, catturerà i pacchetti fino a quando non viene interrotto da un segnale SIGINT o SIGTERM o il numero specificato di pacchetti è stato elaborato.
Gli switch sopra menzionati sono spiegati in dettaglio più avanti in questo articolo.
quando tcpdump termina l'acquisizione dei pacchetti, segnalerà i conteggi di:
- Pacchetti "ricevuti dal filtro".
- Il significato di questo dipende dal sistema operativo su cui stai lavorando tcpdump e probabilmente sul modo in cui è stato configurato il sistema operativo. Se è stato specificato un filtro sulla riga di comando, su alcuni sistemi operativi conta i pacchetti indipendentemente dal fatto che siano stati abbinati dall'espressione filtro, mentre su altri conti solo i pacchetti che sono stati abbinati dall'espressione filtro e sono stati elaborati da tcpdump.
- Pacchetti "abbandonati dal kernel".
- Questo è il numero di pacchetti che sono stati rilasciati, a causa della mancanza di spazio nel buffer, dal meccanismo di cattura dei pacchetti nel sistema operativo su cui tcpdump è in esecuzione, se il sistema operativo riporta tali informazioni alle applicazioni. In caso contrario, verrà segnalato come 0.
Sulle piattaforme che supportano il segnale SIGINFO, come la maggior parte dei BSD (Berkeley Software Distributions), segnalerà quei conteggi quando riceve un segnale SIGINFO (generato, ad esempio, digitando il carattere "stato", tipicamente T Ctrl +) e continuerà a catturare i pacchetti.
Tcpdump Compatibilità
La lettura di pacchetti da un'interfaccia di rete con il comando tcpdump potrebbe richiedere l'ottenimento di privilegi speciali ( lettura un file di pacchetto salvato non richiede tali privilegi):
- SunOS 3.xo 4.x con NIT o BPF: Devi avere accesso in lettura a / Dev / nit o dev / BPF * .
- Solaris con DLPI: È necessario disporre dell'accesso in lettura / scrittura allo pseudo dispositivo di rete, ad esempio / Dev / le . Su almeno alcune versioni di Solaris, tuttavia, questo non è sufficiente per consentire tcpdump per catturare in modalità promiscua; su quelle versioni di Solaris, devi essere root, o tcpdump deve essere installato setuid su root, in modo da catturare in modalità promiscua. Notare che, su molte (forse tutte) interfacce, se non si acquisisce in modalità promiscua, non si vedranno pacchetti in uscita, quindi un'acquisizione non eseguita in modalità promiscua potrebbe non essere molto utile.
- HP-UX con DLPI: Devi essere root o tcpdump deve essere installato setuid su root.
- IRIX con lo snoop: Devi essere root o tcpdump deve essere installato setuid su root.
- Linux: Devi essere root o tcpdump deve essere installato setuid su root.
- Ultrix e Digital UNIX / Tru64 UNIX: Qualsiasi utente può acquisire traffico di rete con tcpdump . Tuttavia, nessun utente (nemmeno il super-utente) può acquisire in modalità promiscua su un'interfaccia, a meno che il super-utente non abbia abilitato l'operazione in modalità promiscua su quell'interfaccia usando PFConfig (8), e nessun utente (nemmeno il super-utente) può catturare il traffico unicast ricevuto o inviato dalla macchina su un'interfaccia, a meno che il super-utente abbia abilitato l'operazione di copia-tutto-modo su quella interfaccia usando PFConfig , così utile l'acquisizione di pacchetti su un'interfaccia richiede probabilmente che sia attivata l'operazione in modalità promiscua o copia-all-mode, o entrambe le modalità operative su tale interfaccia.
- BSD: Devi avere accesso in lettura a / Dev / BPF * .
Sintassi del comando Tcpdump
Come tutti i comandi del computer, il comando tcpdump funziona correttamente solo se la sintassi è corretta:
tcpdump -adeflnNOpqRStuvxX -c contare
-C dimensione del file -F file
-io interfaccia -m modulo -r file
-S snaplen -T genere -U utente -w file
-E algo: segreto espressione
Opzioni comando Tcpdump
Queste sono tutte le opzioni che puoi usare con il comando tcpdump:
- -un: Tentativo di convertire la rete e trasmettere gli indirizzi ai nomi.
- -c: Esci dopo aver ricevuto contare pacchetti.
- -C: Prima di scrivere un pacchetto non elaborato in un file di salvataggio, controlla se il file è attualmente più grande di dimensione del file e, in tal caso, chiudere il file di salvataggio corrente e aprirne uno nuovo.Salva file dopo il primo file di salvataggio avrà il nome specificato con-w bandiera, con un numero dopo di esso, a partire da 2 e proseguendo verso l'alto. Le unità di dimensione del file sono milioni di byte (1.000.000 di byte, non 1.048.576 byte).
- -d: Scarica il codice compilato per la corrispondenza dei pacchetti in un formato leggibile dall'essere umano sullo standard output e fermalo.
- -DD: Eseguire il dump del codice di corrispondenza dei pacchetti come aC frammento di programma.
- -DDD: Eseguire il dump del codice di corrispondenza dei pacchetti come numeri decimali (preceduti da un conteggio).
- -e: Stampa l'intestazione a livello di collegamento su ciascuna linea di dumping.
- -E: Uso algo: segreto per decodificare i pacchetti ESP IPsec. Algoritmi possono essereDES-CBC, 3des-cbc, blowfish-cbc, rc3-CBC, CAST128-CBC, onessuna. L'impostazione predefinita èDES-CBC. La possibilità di decodificare i pacchetti è presente solo se tcpdump è stato compilato con crittografia abilitata. segreto il testo ASCII per la chiave segreta ESP. Non possiamo assumere un valore binario arbitrario in questo momento. L'opzione presuppone l'ESP RFC2406, non l'ESP RFC1827. L'opzione è solo a scopo di debug e l'uso di questa opzione con la chiave veramente "segreta" è sconsigliato. Presentando la chiave segreta IPsec sulla riga di comando rendilo visibile agli altri, via ps (1) e altre occasioni.
- -f: Stampa gli indirizzi Internet "estranei" numericamente anziché simbolicamente (questa opzione è pensata per aggirare un grave danno cerebrale nel server Sun di Sun - in genere si blocca per sempre a tradurre numeri Internet non locali).
- -F: Uso file come input per l'espressione del filtro. Un'espressione aggiuntiva fornita sulla riga di comando viene ignorata.
- -io: Ascolta interfaccia . Se non specificato, tcpdump cerca l'elenco dell'interfaccia di sistema per l'interfaccia con numero più basso e configurato (escluso il loopback). I legami si rompono scegliendo la prima partita. Su sistemi Linux con kernel 2.2 o successivi, a interfaccia l'argomento di "any" può essere usato per catturare i pacchetti da tutte le interfacce. Si noti che le acquisizioni sul dispositivo "any" non verranno eseguite in modalità promiscua.
- -l: Crea una linea stdout bufferizzata. Utile se vuoi vedere i dati mentre lo catturi. Ad esempio, "tcpdump -l | tee dat" o "tcpdump -l> dat & tail -f dat".
- -m: Carica le definizioni del modulo SMI MIB dal file modulo . Questa opzione può essere utilizzata più volte per caricare diversi moduli MIB in tcpdump .
- -n: Non convertire gli indirizzi host in nomi. Questo può essere usato per evitare ricerche DNS.
- -nn: Non convertire il protocollo, i numeri di porta ecc. In nomi.
- -N: Non stampare la qualifica del nome di dominio dei nomi host. Per esempio, se dai questa bandiera, allora tcpdump stamperà "nic" invece di "nic.ddn.mil".
- -O: Non eseguire lo ottimizzatore del codice di corrispondenza dei pacchetti. Questo è utile solo se si sospetta un bug nell'ottimizzatore.
- -p: non metti l'interfaccia in modalità promiscua. Si noti che l'interfaccia potrebbe essere in modalità promiscua per qualche altro motivo; quindi, '-p' non può essere usato come abbreviazione di 'ether host {local-hw-addr} o ether broadcast'.
- -q: Uscita rapida (silenziosa). Stampa meno informazioni sul protocollo in modo che le righe di output siano più corte.
- -R: Si supponga che i pacchetti ESP / AH siano basati su vecchie specifiche: da RFC1825 a RFC1829. Se specificato, tcpdump non stamperà il campo di prevenzione replay. Poiché non esiste un campo di versione del protocollo nelle specifiche ESP / AH, tcpdump non può dedurre la versione del protocollo ESP / AH.
- -r: Leggi i pacchetti da file (che è stato creato con l'opzione -w). L'input standard viene utilizzato se file è "-".
- -S: Stampa numeri di sequenza TCP assoluti, piuttosto che relativi.
- -S: Snarf snaplen byte di dati da ciascun pacchetto piuttosto che il valore predefinito di 68; con NIT di SunOS, il minimo è in realtà 96. Sessantotto byte sono adeguati per IP, ICMP, TCP e UDP ma possono troncare le informazioni sul protocollo dal server dei nomi e dai pacchetti NFS (vedere di seguito). I pacchetti troncati a causa di un'istantanea limitata sono indicati nell'output con "| proto '', dove proto è il nome del livello di protocollo in cui si è verificato il troncamento. Si noti che l'acquisizione di istantanee più grandi aumenta sia la quantità di tempo necessaria per elaborare i pacchetti, sia diminuire in modo efficace la quantità di buffer dei pacchetti. Ciò potrebbe causare la perdita di pacchetti. Dovresti limitare snaplen al numero più piccolo che catturerà le informazioni sul protocollo a cui sei interessato. Impostazione snaplen a 0 significa utilizzare la lunghezza richiesta per catturare interi pacchetti.
- -T: Forza i pacchetti selezionati da " espressione "essere interpretato come specificato genere . I tipi attualmente conosciuti sonocnfp (Protocollo Cisco NetFlow),rpc (Chiamata di procedura remota),RTP (Protocollo delle applicazioni in tempo reale),rtcp (Protocollo di controllo delle applicazioni in tempo reale),snmp (Simple Network Management Protocol),I.V.A (Visual Audio Tool), ewb (lavagna bianca distribuita).
- -t: non stampare un timestamp su ciascuna linea di scarico.
- -tt: Stampa un timestamp non formattato su ciascuna riga di dumping.
- -U: Elimina i privilegi di root e cambia l'ID utente in utente e gruppo ID al gruppo primario di utente .
- Nota: Red Hat Linux lascia automaticamente i privilegi all'utente "pcap" se non viene specificato nient'altro.
- -ttt: Stampa un delta (in microsecondi) tra la riga corrente e quella precedente su ogni linea di scarico.
- -tttt: Stampa un timestamp nel formato predefinito proceduto per data su ciascuna linea di dumping.
- -u: Stampa handle NFS non decodificati.
- -v: (Leggermente più) output dettagliato. Ad esempio, vengono stampati il tempo di vita, l'identificazione, la lunghezza totale e le opzioni in un pacchetto IP. Abilita inoltre ulteriori controlli dell'integrità dei pacchetti, come la verifica del checksum dell'intestazione IP e ICMP.
- -vv: Output ancora più dettagliato. Ad esempio, i campi aggiuntivi vengono stampati dai pacchetti di risposta NFS ei pacchetti SMB sono completamente decodificati.
- -vvv: Output ancora più dettagliato. Ad esempio, telnetSB … SE le opzioni sono stampate per intero Con -X le opzioni telnet sono stampate anche in esadecimale.
- -w: Scrivi i pacchetti non elaborati su file piuttosto che analizzarli e stamparli. Possono essere successivamente stampati con l'opzione -r. L'output standard viene utilizzato se file è "-".
- -X: Stampa ogni pacchetto (meno l'intestazione del livello di collegamento) in esadecimale. Il più piccolo dell'intero pacchetto o snaplen i byte verranno stampati. Si noti che questo è l'intero pacchetto link-layer, quindi per i layer link che si trovano ad esempio (per esempio Ethernet), i byte di padding verranno stampati anche quando il pacchetto di livello superiore è più corto del padding richiesto.
- -X: Quando stampi hex, stampa anche ascii. Quindi se-X è anche impostato, il pacchetto è stampato in hex / ascii. Questo è molto utile per analizzare nuovi protocolli. Anche se-X non è anche impostato, alcune parti di alcuni pacchetti possono essere stampate in hex / ascii.
- espressione : Seleziona quali pacchetti verranno scaricati. Se no espressione viene dato, tutti i pacchetti in rete verranno scaricati. Altrimenti, solo pacchetti per i quali espressione è 'vero' verrà scaricato. Il espressione consiste di uno o più primitivi. I primitivi consistono solitamente di un id (nome o numero) preceduto da uno o più qualificatori. Esistono tre diversi tipi di qualificatore:
- genere : I qualificatori dicono che tipo di cosa si riferisce al nome o al numero di identificazione. I tipi possibili sonoospite, netto, eporta-Per esempio, 'host foo', 'net 128.3', 'port 20'. Se non esiste un qualificatore di tipo,ospite è assunto.
- dir : I qualificatori specificano una particolare direzione di trasferimento verso e / o da id . Le direzioni possibili sonosrc, dst, src o dst esrc e dst (ad esempio, 'src foo', 'dst net 128.3', 'src o dst port ftp-data'). Se non c'è un qualificatore dir,src o dst è assunto. Per i livelli di collegamento 'nulli' (cioè i protocolli punto-punto come lo slittamento) in entrata e in uscita i qualificatori possono essere utilizzati per specificare la direzione desiderata.
- proto : I qualificatori limitano la corrispondenza a un particolare protocollo. I possibili protos sono: etere, FDDI, TR, ip, IP6, arp, rarp, DECnet, tcp, eudp-Per esempio, 'ether src foo', 'arp net 128.3', 'tcp port 21'. Se non esiste un qualificatore proto, si presuppongono tutti i protocolli coerenti con il tipo. Ad esempio, "src foo" significa "(ip o arp o rarp) src foo" (tranne che quest'ultima non è una sintassi legale), "barra della rete" significa "(ip o arp o rarp) net bar" e "port 53" significa '(tcp o udp) porta 53'.
- 'fddi' è in realtà un alias per 'etere'; il parser le tratta in modo identico come "il livello di collegamento dati utilizzato nell'interfaccia di rete specificata". Le intestazioni FDDI contengono indirizzi di origine e destinazione Ethernet e spesso contengono tipi di pacchetti Ethernet, quindi è possibile filtrare solo su questi campi FDDI come con gli analoghi campi Ethernet Le intestazioni FDDI contengono anche altri campi, ma non è possibile denominarli esplicitamente in un'espressione filtro.
- Allo stesso modo, 'tr' è un alias per 'etere'; le istruzioni del paragrafo precedente relative agli intestazioni FDDI si applicano anche alle intestazioni Token Ring.
Oltre a quanto sopra, ci sono alcune parole chiave "primitive" speciali che non seguono lo schema:porta, trasmissione, Di meno, maggiore, e aritmetica espressioni. Tutti questi sono descritti di seguito.
Le espressioni di filtro più complesse vengono create utilizzando le parolee, o, enon combinare le primitive, ad esempio "host foo e non port ftp e non port ftp-data". Per salvare la digitazione, è possibile omettere elenchi di qualificatori identici (ad esempio, "tcp dst port ftp o ftp-data o dominio" è esattamente lo stesso di "tcp dst port ftp o tcp dst port ftp-data o tcp dst port domain".)
Queste sono le primitive consentite con il comando tcpdump:
- host dst ospite
- Vero se il campo di destinazione IPv4 / v6 del pacchetto è ospite , che può essere un indirizzo o un nome.
- host src ospite
- Vero se il campo sorgente IPv4 / v6 del pacchetto è ospite .
- ospite ospite
- Vero se l'origine IPv4 / v6 o la destinazione del pacchetto è ospite . Qualsiasi delle espressioni host sopra elencate può essere preceduta dalle parole chiave,ip, arp, rarp, oIP6, come in host ip ospite (che è equivalente a etere proto ip e host ospite).
- Se ospite è un nome con più indirizzi IP, ogni indirizzo verrà controllato per una corrispondenza.
- etere dst ehost
- Vero se l'indirizzo di destinazione Ethernet è ehost . Ehost può essere un nome da / etc / ethers o un numero (vedi eteri (3N) per il formato numerico).
- etere src ehost
- Vero se l'indirizzo di origine Ethernet è ehost .
- host di etere ehost
- Vero se l'origine Ethernet o l'indirizzo di destinazione è ehost .
- porta ospite
- Vero se il pacchetto usato ospite come gateway (vale a dire, l'origine Ethernet o l'indirizzo di destinazione era ospite ma né la fonte IP né la destinazione IP erano ospite ).
- Ospite deve essere un nome e deve essere trovato sia dai meccanismi di risoluzione degli indirizzi host-nome-indirizzo-IP della macchina (nome host, DNS, NIS, ecc.) sia dal meccanismo di risoluzione indirizzo host-nome-indirizzo Ethernet della macchina (/ etc / ethers, ecc.).
- Un'espressione equivalente è host di etere ehost e ora ospita ospite , che può essere utilizzato con nomi o numeri per host / ehost .) Questa sintassi non funziona in configurazione abilitata per IPv6 in questo momento.
- dst net netto
- Vero se l'indirizzo di destinazione IPv4 / v6 del pacchetto ha un numero di rete di netto . Netto può essere un nome da / etc / networks o un numero di rete (vedi reti (4) per dettagli).
- src net netto
- Vero se l'indirizzo di origine IPv4 / v6 del pacchetto ha un numero di rete di netto .
- netto netto
- Vero se l'indirizzo IPv4 / v6 o di destinazione del pacchetto ha un numero di rete di netto .
- netto netto maschera maschera di rete
- Vero se l'indirizzo IP corrisponde netto con lo specifico maschera di rete . Può essere qualificato consrc odst. Nota che questa sintassi non è valida per IPv6 netto .
- netto netto / len
- Vero se l'indirizzo IPv4 / v6 corrisponde netto con una maschera di rete len punte larghe. Può essere qualificato consrc odst.
- porta dst porta
- Vero se il pacchetto è ip / tcp, ip / udp, ip6 / tcp o ip6 / udp e ha un valore di porta di destinazione di porta . Il porta può essere un numero o un nome usato in / etc / services (vedi tcp (4P) e udp (4P)). Se viene utilizzato un nome, vengono controllati sia il numero di porta che il protocollo. Se viene utilizzato un numero o un nome ambiguo, viene controllato solo il numero di porta (ad es.porta dst 513 stamperà sia il traffico tcp / login che il traffico udp / who, eport domain stamperà sia il traffico tcp / dominio che udp / dominio).
- porta src porta
- Vero se il pacchetto ha un valore di porta di origine di porta .
- porta porta
- Vero se la porta di origine o di destinazione del pacchetto è porta . Qualsiasi delle espressioni di porta precedenti può essere anteposta alle parole chiave,tcp oudp, come in tcp src port porta , che corrisponde solo ai pacchetti tcp di cui è la porta di origine porta .
- Di meno lunghezza
- Vero se il pacchetto ha una lunghezza inferiore o uguale a lunghezza . Questo è equivalente a len <= Lunghezza .
- maggiore lunghezza
- Vero se il pacchetto ha una lunghezza maggiore o uguale a lunghezza . Questo è equivalente a len> = Lunghezza .
- ip proto protocollo
- Vero se il pacchetto è un pacchetto IP (vedi ip (4P)) del tipo di protocollo protocollo . Protocollo può essere un numero o uno dei nomi icmp , icmp6 , IGMP , IGRP , pim , ah , esp , vrrp , udp , o tcp . Si noti che gli identificatori tcp , udp , e icmp sono anche parole chiave e devono essere sfuggiti tramite backslash (), che è nella C-shell. Nota che questa primitiva non insegue la catena di intestazione del protocollo.
- ip6 proto protocollo
- Vero se il pacchetto è un pacchetto IPv6 di tipo protocollo protocollo . Nota che questa primitiva non insegue la catena di intestazione del protocollo.
- IP6 protochain protocollo
- Vero se il pacchetto è un pacchetto IPv6 e contiene l'intestazione del protocollo con tipo protocollo nella sua catena di intestazione del protocollo. Per esempio, IPV6 protochain 6 corrisponde a qualsiasi pacchetto IPv6 con intestazione del protocollo TCP nella catena di intestazione del protocollo. Il pacchetto può contenere, ad esempio, intestazione di autenticazione, intestazione di instradamento o intestazione di opzione hop-by-hop, tra intestazione IPv6 e intestazione TCP. Il codice BPF emesso da questa primitiva è complesso e non può essere ottimizzato dal codice ottimizzatore BPF in tcpdump , quindi questo può essere un po 'lento.
- ip protochain protocollo
- Equivalente aIP6 protochain protocollo , ma questo è per IPv4.
- trasmissione eterica
- Vero se il pacchetto è un pacchetto di trasmissione Ethernet. Il etere la parola chiave è facoltativa.
- trasmissione ip
- Vero se il pacchetto è un pacchetto broadcast IP. Controlla sia le convenzioni di trasmissione all-zero che di tutte le altre e cerca la subnet mask locale.
- etere multicast
- Vero se il pacchetto è un pacchetto multicast Ethernet. Il etere la parola chiave è facoltativa. Questa è una scorciatoia per 'etere 0 e 1! = 0'.
- ip multicast
- Vero se il pacchetto è un pacchetto multicast IP.
- ip6 multicast
- Vero se il pacchetto è un pacchetto multicast IPv6.
- etere proto protocollo
- Vero se il pacchetto è di tipo etere protocollo . Protocollo può essere un numero o uno dei nomi ip , IP6 , arp , rarp , una chiacchierata , AARP , DECnet , sca , lat , mopdl , moprc , iso , stp , ipx , o netbeui . Nota che questi identificatori sono anche parole chiave e devono essere fatti passare tramite backslash ().
- Nel caso di FDDI (ad esempio, 'protocollo fddi arp') e Token Ring (ad esempio,'tr protocollo arp'), per la maggior parte di questi protocolli, l'identificazione del protocollo proviene dall'intestazione 802.2 Logical Link Control (LLC), che di solito è sovrapposta all'intestazione FDDI o Token Ring.
- Quando si filtra per la maggior parte degli identificatori di protocollo su FDDI o Token Ring, tcpdump controlla solo il campo ID protocollo di un'intestazione LLC nel cosiddetto formato SNAP con un Identificatore dell'unità organizzativa (OUI) di 0x000000, per Ethernet incapsulato; non controlla se il pacchetto è in formato SNAP con OUI di 0x000000.
- Le eccezioni sono iso , per il quale controlla i campi DSAP (Destination Service Access Point) e SSAP (Source Service Access Point) dell'intestazione LLC, stp e netbeui , dove controlla il DSAP dell'intestazione LLC e una chiacchierata , dove controlla un pacchetto di formato SNAP con un OUI di 0x080007 e l'etype di Appletalk.
- Nel caso di Ethernet, tcpdump controlla il campo di tipo Ethernet per la maggior parte di questi protocolli; le eccezioni sono iso , linfa , e netbeui , per il quale controlla un frame 802.3 e poi controlla l'intestazione LLC come fa per FDDI e Token Ring; una chiacchierata , dove controlla sia l'etype di Appletalk in un frame Ethernet sia un pacchetto di formato SNAP come per FDDI e Token Ring; AARP , dove controlla l'etype ARP di Appletalk in un frame Ethernet o in un frame SNAP 802.2 con un OUI di 0x000000; e ipx , dove controlla l'etype IPX in un frame Ethernet, il DSAP IPX nell'intestazione LLC, l'802.3 con l'incapsulamento dell'intestazione LLC di IPX e l'etype IPX in un frame SNAP.
- decnet src ospite
- Vero se l'indirizzo di origine DECNET è ospite , che può essere un indirizzo del modulo "10.123" o un nome host DECNET. Il supporto del nome host DECNET è disponibile solo sui sistemi Ultrix configurati per l'esecuzione di DECNET.
- decnet dst ospite
- Vero se l'indirizzo di destinazione DECNET è ospite .
- host decnet ospite
- Vero se l'origine DECNET o l'indirizzo di destinazione è ospite .
- ip, IP6, arp, rarp, una chiacchierata, AARP, DECnet, iso, stp, ipx, netbeui
- Abbreviazioni per etere proto p dove p è uno dei protocolli di cui sopra.
- lat, moprc, mopdl
- Abbreviazioni per etere proto p dove p è uno dei protocolli di cui sopra. Nota che tcpdump al momento non sa come analizzare questi protocolli.
- VLAN Vlan_id
- Vero se il pacchetto è un pacchetto VLAN IEEE 802.1Q. Se Vlan_id è specificato, è vero solo se il pacchetto ha specificato vlan_id . Si noti che il primoVLAN parola chiave incontrata in espressione modifica gli offset di decodifica per il resto di espressione partendo dal presupposto che il pacchetto sia un pacchetto VLAN.
- tcp, udp, icmp
- Abbreviazioni per ip proto p o ip6 proto p dove p è uno dei protocolli di cui sopra.
- iso proto protocollo
- Vero se il pacchetto è un pacchetto OSI di tipo protocollo protocollo . Protocollo può essere un numero o uno dei nomi CLNP , ESIS , o isis .
- CLNP, ESIS, isis
- Abbreviazioni per iso proto p dove p è uno dei protocolli di cui sopra. Nota che tcpdump fa un lavoro incompleto di analisi di questi protocolli.
- expr rilopare expr
- Vero se la relazione vale, dove relop è uno di>, <,> =, <=, =,! =, e espr è un'espressione aritmetica composta da costanti intere (espresse nella sintassi C standard), i normali operatori binari +, -, *, /, &, |, un operatore di lunghezza e speciali accessor di dati a pacchetto. Per accedere ai dati all'interno del pacchetto, utilizzare la seguente sintassi: proto expr: dimensione .
Proto è uno dietere, FDDI, TR, ppp, scivolare, collegamento, ip, arp, rarp, tcp, udp, icmp, o IP6e indica il livello del protocollo per l'operazione dell'indice (etere, FDDI, TR, ppp, scivolare, ecollegamento tutti si riferiscono al livello di collegamento). Nota che tcp, udp e altri tipi di protocollo di livello superiore si applicano solo a IPv4, non a IPv6 (questo verrà risolto in futuro). L'offset del byte, relativo allo strato di protocollo indicato, è dato da espr . Taglia è facoltativo e indica il numero di byte nel campo di interesse; può essere uno, due o quattro e il valore predefinito è uno. L'operatore di lunghezza, indicato dalla parola chiavelen, indica la lunghezza del pacchetto.
Per esempio, 'etere 0 e 1! = 0'cattura tutto il traffico multicast. L'espressione 'ip 0 e 0xf! = 5'cattura tutti i pacchetti IP con opzioni. L'espressione 'ip 6: 2 e 0x1fff = 0'cattura solo datagrammi non frammentati e fram zero di datagrammi frammentati. Questo controllo è applicato implicitamente altcp eudp operazioni su indici. Per esempio, tcp 0 indica sempre il primo byte del TCP intestazione e non significa mai il primo byte di un frammento intermedio.
Alcuni offset e valori di campo possono essere espressi come nomi anziché come valori numerici. Sono disponibili i seguenti offset di campo dell'intestazione del protocollo: icmptype (Campo del tipo ICMP),icmpcode (Campo del codice ICMP), etcpflags (Campo delle bandiere TCP).
Sono disponibili i seguenti valori di campo del tipo ICMP:icmp-echoreply, icmp-unreach, icmp-sourcequench, ICMP redirect, icmp-echo, icmp-routeradvert, icmp-routersolicit, icmp-timxceed, icmp-paramprob, icmp-tstamp, icmp-tstampreply, icmp-IREQ, icmp-ireqreply, icmp-maskreq, icmp-maskreply.
Sono disponibili i seguenti valori dei campi del flag TCP:tcp-fin, tcp-syn, tcp-RST, tcp-push, tcp-push, tcp-ack, tcp-URG.
I primitivi possono essere combinati usando uno dei seguenti:
- Un gruppo di primitivi e operatori tra parentesi (le parentesi sono speciali per Shell e devono essere sfuggiti)
- Negazione ('!'o `non')
- Concatenazione ('&&' o 'e')
- Alternanza ('||' o 'o')
La negazione ha la precedenza più alta. Alternanza e concatenazione hanno uguale precedenza e si associano da sinistra a destra. Si noti che esplicitoe i token, non la giustapposizione, sono necessari per la concatenazione.
Se viene fornito un identificatore senza una parola chiave, si assume la parola chiave più recente. Per esempio, non host vs e asso è l'abbreviazione di non host vs e host asso. Tuttavia, questo non dovrebbe essere confuso con non (host vs o asso).
Gli argomenti di espressione possono essere passati a tcpdump come singolo argomento o come argomenti multipli, a seconda di quale sia più conveniente. Generalmente, se l'espressione contiene metacaratteri di shell, è più semplice passarla come un singolo argomento quotato. Più argomenti sono concatenati con spazi prima di essere analizzati.
Esempi di Tcpdump
tcpdump host sundown
Il comando tcpdump sopra riportato viene utilizzato per stampare tutti i pacchetti in arrivo o in partenza tramonto. tcpdump host helios e (hot o asso )
Questo esempio di tcpdump stampa il traffico tra helios e nemmeno caldo o asso. tcpdump ip host asso e non helios
È possibile utilizzare questo comando tcpdump per stampare tutti i pacchetti IP tra asso e qualsiasi host tranne helios. tcpdump net ucb-ether
Nell'esempio sopra, tcpdump stampa tutto il traffico tra host locali e host a Berkeley. tppdump 'gateway snup e (porta ftp o ftp-data)'
Questo prossimo esempio di comando tcpdump è usato per stampare tutto il traffico FTP attraverso il gateway internet snup . Si noti che l'espressione è citata per impedire alla shell di interpretare erroneamente le parentesi. tcpdump ip e non net localnet
Nell'esempio tcpdump sopra riportato, il comando stampa il traffico non originariamente né destinato agli host locali. tcpdump 'tcp tcpflags & (tcp-syn | tcp-fin)! = 0 e non src e dst net localnet '
Per l'esempio precedente di tcpdump, il comando viene utilizzato per stampare i pacchetti di inizio e fine (i pacchetti SYN e FIN) di ogni conversazione TCP che coinvolge un host non locale. tcpdump 'gateway snup e ip 2: 2> 576'
Il comando precedente stamperà pacchetti IP più lunghi di 576 byte inviati attraverso il gateway snup. tcpdump 'ether 0 & 1 = 0 e ip 16> = 224'
Il comando tcpdump mostrato sopra stampa i pacchetti broadcast o multicast IP non inviato via Ethernet broadcast o multicast. tcpdump 'icmp icmptype! = icmp-echo e icmp icmptype! = icmp-echoreply'
In questo ultimo esempio di tcpdump, il comando stampa tutti i pacchetti ICMP che non sono richieste o risposte di eco (ad esempio, non pacchetti di ping). L'output di tcpdump dipende dal protocollo. Quanto segue fornisce una breve descrizione ed esempi della maggior parte dei formati. Link Level Headers. Se viene fornita l'opzione '-e', viene stampata l'intestazione del livello di collegamento. Sulle reti Ethernet, vengono stampati gli indirizzi di origine e destinazione, il protocollo e la lunghezza del pacchetto. Sulle reti FDDI, l'opzione '-e' provoca tcpdump per stampare il campo 'frame control', gli indirizzi di origine e destinazione e la lunghezza del pacchetto. (Il campo 'frame control' governa l'interpretazione del resto del pacchetto.I pacchetti normali (come quelli che contengono datagrammi IP) sono pacchetti 'asincroni', con un valore di priorità tra 0 e 7: ad esempio, `async4'. Si presume che tali pacchetti contengano un pacchetto 802.2 Logical Link Control (LLC); l'intestazione LLC viene stampata, se lo è non un datagramma ISO o un cosiddetto pacchetto SNAP. Sulle reti Token Ring, l'opzione '-e' provoca tcpdump per stampare i campi "controllo accessi" e "controllo frame", gli indirizzi di origine e destinazione e la lunghezza del pacchetto. Come per le reti FDDI, si presume che i pacchetti contengano un pacchetto LLC. Indipendentemente dal fatto che l'opzione '-e' sia specificata o meno, le informazioni di routing di origine vengono stampate per i pacchetti instradati all'origine. (N.B .: La seguente descrizione presuppone la familiarità con l'algoritmo di compressione SLIP descritto in RFC-1144.) Sui collegamenti SLIP, vengono stampati un indicatore di direzione ("I" per l'entrata, "O" per l'uscita), il tipo di pacchetto e le informazioni di compressione. Il tipo di pacchetto viene stampato per primo. I tre tipi sono ip , utcp , e ctcp . Non vengono stampate ulteriori informazioni sul collegamento ip pacchetti. Per i pacchetti TCP, l'identificatore della connessione viene stampato seguendo il tipo. Se il pacchetto è compresso, viene stampata l'intestazione codificata. I casi speciali sono stampati come* S + n e* SA + n , dove n è la quantità con cui il numero di sequenza (o numero di sequenza e ack) è cambiato. Se non è un caso speciale, vengono stampate zero o più modifiche. Un cambiamento è indicato da U (puntatore urgente), W (finestra), A (ack), S (numero di sequenza) e I (ID pacchetto), seguito da un delta (+ n o -n) o un nuovo valore (= n). Infine, viene stampata la quantità di dati nel pacchetto e la lunghezza dell'intestazione compressa. Ad esempio, la seguente riga mostra un pacchetto TCP compresso in uscita, con un identificatore di connessione implicito; l'ack è cambiato di 6, il numero di sequenza di 49 e l'ID di pacchetto di 6; ci sono 3 byte di dati e 6 byte di intestazione compressa: O ctcp * A + 6 S + 49 I + 6 3 (6)
Pacchetti Arp / rarp. L'output Arp / rarp mostra il tipo di richiesta e i suoi argomenti. Il formato è inteso per essere auto-esplicativo. Ecco un breve esempio tratto dall'inizio di un 'rlogin' dall'host rtsg ospitare CSAM : arp who-has csam tell rtsgarp reply csam is-at CSAM
La prima riga dice che rtsg ha inviato un pacchetto arp per chiedere l'indirizzo Ethernet del csam dell'host internet. Csam risponde con il suo indirizzo Ethernet (in questo esempio, gli indirizzi Ethernet sono in maiuscolo e gli indirizzi internet in minuscolo). Questo sarebbe meno ridondante se avessimo fatto tcpdump -n : arp who-ha 128.3.254.6 dice 128.3.254.68risposta arp 128.3.254.6 is-at 02: 07: 01: 00: 01: c4
Se avessimo fatto tcpdump -e , il fatto che il primo pacchetto sia trasmesso e il secondo sia point-to-point sarebbe visibile: RTSG Broadcast 0806 64: arp who-has csam tell rtsgCSAM RTSG 0806 64: arp reply csam is-at CSAM
Per il primo pacchetto questo dice che l'indirizzo di origine Ethernet è RTSG, la destinazione è l'indirizzo di trasmissione Ethernet, il campo di testo contiene hex 0806 (tipo ETHER_ARP) e la lunghezza totale era di 64 byte. Pacchetti TCP (N.B .: La seguente descrizione presuppone una certa familiarità con il protocollo TCP descritto in RFC-793. Se non si ha familiarità con il protocollo, né questa descrizione né tcpdump saranno di grande utilità per voi) . Il formato generale di una linea di protocollo TCP è: src> dst: opzioni urgenti per i flag data-seqno ack window
src e dst sono gli indirizzi e le porte IP di origine e destinazione. bandiere sono alcune combinazioni di S (SYN), F (FIN), P (PUSH) o R (RST) o un singolo '.' (nessuna bandiera). Data-Nseq descrive la porzione di spazio di sequenza coperta dai dati in questo pacchetto (vedi esempio sotto). ack è il numero di sequenza dei prossimi dati previsti per l'altra direzione su questa connessione. Finestra è il numero di byte di spazio buffer di ricezione disponibile nell'altra direzione su questa connessione. Urg indica che ci sono dati "urgenti" nel pacchetto. Opzioni sono le opzioni TCP racchiuse tra parentesi angolari (ad es. Src, dst, e bandiere sono sempre presenti Gli altri campi dipendono dal contenuto dell'intestazione del protocollo tcp del pacchetto e vengono emessi solo se appropriati. Ecco la parte iniziale di un rlogin dall'host rtsg ospitare CSAM . rtsg.1023> csam.login: S 768512: 768512 (0) vinci 4096 La prima riga dice che la porta tcp 1023 su rtsg ha inviato un pacchetto alla porta accesso su csam. IlS indica che il SYN la bandiera è stata impostata. Il numero di sequenza del pacchetto era 768512 e non conteneva dati. (La notazione è "first: last (nbytes)", che significa "numeri di sequenza" primo fino a ma non compreso scorso che è nbytes byte di dati utente '.) Non c'era nessun ack piggy-backed, la finestra di ricezione disponibile era 4096 byte e c'era un'opzione di dimensione massima del segmento che richiedeva un mss di 1024 byte. Csam risponde con un pacchetto simile tranne che include un ack piggybacked per SYN di rtsg. Rtsg then acks csam's SYN. Il '.' significa che non sono stati impostati flag. Il pacchetto non conteneva dati quindi non vi è alcun numero di sequenza dati. Si noti che il numero di sequenza ack è un numero intero piccolo (1). La prima volta tcpdump vede una 'conversazione' tcp, stampa il numero di sequenza dal pacchetto. Sui pacchetti successivi della conversazione, viene stampata la differenza tra il numero di sequenza del pacchetto corrente e questo numero di sequenza iniziale. Ciò significa che i numeri di sequenza dopo il primo possono essere interpretati come posizioni di byte relative nel flusso di dati della conversazione (con il primo byte di dati ogni direzione è "1"). '-S' sovrascriverà questa funzione, causando l'output dei numeri di sequenza originali. Sulla sesta riga, rtsg invia csam 19 byte di dati (byte da 2 a 20 nel lato rtsg -> csam della conversazione). Il flag PUSH è impostato nel pacchetto. Sulla settima riga, csam dice che sono ricevuti i dati inviati da rtsg fino a ma non includendo il byte 21. La maggior parte di questi dati è apparentemente seduta nel buffer del socket poiché la finestra di ricezione di csam ha ottenuto 19 byte più piccoli. Csam invia anche un byte di dati a rtsg in questo pacchetto. Nell'ottava e nella nona riga, csam invia due byte di dati urgenti e inviati a rtsg. Se l'istantanea fosse abbastanza piccola tcpdump non ha acquisito l'intestazione TCP completa, interpreta il più possibile l'intestazione possibile e quindi segnala "| tcp '' per indicare che il resto non può essere interpretato. Se l'intestazione contiene un'opzione fasulla (una con una lunghezza troppo piccola o oltre la fine dell'intestazione), tcpdump lo segnala come " cattivo opt '' e non interpreta ulteriori opzioni (poiché è impossibile stabilire da dove iniziano). Se la lunghezza dell'intestazione indica che le opzioni sono presenti ma la lunghezza del datagramma IP non è abbastanza lunga perché le opzioni siano effettivamente lì, tcpdump lo segnala come " cattiva lunghezza hdr ''. Cattura i pacchetti con particolari combinazioni di flag. Ci sono otto bit nella sezione dei bit di controllo dell'intestazione TCP: CWR | ECE | URG | ACK | PSH | RST | SYN | FIN Supponiamo di voler guardare i pacchetti usati per stabilire una connessione TCP. Ricorda che TCP utilizza un protocollo di handshake a tre vie quando inizializza una nuova connessione; la sequenza di connessione per quanto riguarda i bit di controllo TCP è: Ora siamo interessati a catturare pacchetti che hanno solo il bit SYN impostato (Passo 1). Si noti che non vogliamo pacchetti dal passo 2 (SYN-ACK), solo un semplice SYN iniziale. Ciò di cui abbiamo bisogno è un'espressione di filtro corretta per tcpdump . Richiama la struttura di un'intestazione TCP senza opzioni: 0 15 31-----------------------------------------------------------------| porta sorgente | porto di destinazione |-----------------------------------------------------------------| numero di sequenza |-----------------------------------------------------------------| numero di riconoscimento |-----------------------------------------------------------------| HL | rsvd | C | E | U | A | P | R | S | F | dimensione della finestra |-----------------------------------------------------------------| Checksum TCP | puntatore urgente |-----------------------------------------------------------------
Un'intestazione TCP di solito contiene 20 ottetti di dati, a meno che non siano presenti opzioni. La prima riga del grafico contiene gli ottetti 0-3, la seconda riga mostra gli ottetti 4-7, ecc. Iniziando a contare con 0, i bit di controllo TCP rilevanti sono contenuti nell'ottetto 13: 0 7| 15| 23| 31----------------|---------------|---------------|----------------| HL | rsvd | C | E | U | A | P | R | S | F | dimensione della finestra |----------------|---------------|---------------|----------------| | 13 ° ottetto | | |
Diamo un'occhiata più da vicino all'ottetto n. 13: | | |---------------| | C | E | U | A | P | R | S | F | |---------------| |7 5 3 0|
Questi sono i bit di controllo TCP a cui siamo interessati. Abbiamo numerato i bit in questo ottetto da 0 a 7, da destra a sinistra, quindi il bit PSH è il bit numero 3, mentre il bit URG è il numero 5. Ricordiamo che vogliamo catturare i pacchetti con il solo set SYN. Vediamo cosa succede all'ottetto 13 se un datagramma TCP arriva con il bit SYN impostato nella sua intestazione: | C | E | U | A | P | R | S | F | |---------------| |0 0 0 0 0 0 1 0| |---------------| |7 6 5 4 3 2 1 0|
Guardando la sezione dei bit di controllo vediamo che è impostato solo il bit numero 1 (SYN). Supponendo che l'ottetto numero 13 sia un numero intero senza segno a 8 bit nell'ordine dei byte di rete, il valore binario di questo ottetto è: 00000010 La sua rappresentazione decimale è: 7 6 5 4 3 2 1 00*2 + 0*2 + 0*2 + 0*2 + 0*2 + 0*2 + 1*2 + 0*2 = 2
Abbiamo quasi finito, perché ora sappiamo che se è impostato solo SYN, il valore del 13 ° ottetto nell'intestazione TCP, quando interpretato come un numero intero senza segno a 8 bit nell'ordine dei byte di rete, deve essere esattamente 2. Questa relazione può essere espressa come tcp 13 == 2 Possiamo usare questa espressione come filtro per tcpdump per vedere i pacchetti con solo SYN impostato: tcpdump -i xl0 tcp 13 == 2 L'espressione dice "lascia che il 13 ° ottetto di un datagramma TCP abbia il valore decimale 2", che è esattamente ciò che vogliamo. Ora, supponiamo di aver bisogno di catturare i pacchetti SYN, ma non ci importa se ACK o qualsiasi altro bit di controllo TCP è impostato allo stesso tempo. Guarda cosa succede all'ottetto 13 quando arriva un datagramma TCP con il set SYN-ACK: | C | E | U | A | P | R | S | F | |---------------| |0 0 0 1 0 0 1 0| |---------------| |7 6 5 4 3 2 1 0|
I bit 1 e 4 sono ora impostati nel 13 ° ottetto. Il valore binario dell'ottetto 13 è: 00010010 che si traduce in decimale: 7 6 5 4 3 2 1 00*2 + 0*2 + 0*2 + 1*2 + 0*2 + 0*2 + 1*2 + 0*2 = 18
Non possiamo semplicemente usare 'tcp 13 == 18' nel tcpdump espressione del filtro, in quanto selezionarebbe solo i pacchetti con SYN-ACK impostato, ma non quelli con solo SYN impostato. Ricorda che non ci interessa se ACK o qualsiasi altro bit di controllo è impostato fino a quando SYN è impostato. Per raggiungere il nostro obiettivo, dobbiamo logicamente AND il valore binario dell'ottetto 13 con qualche altro valore per preservare il bit SYN. Sappiamo che vogliamo che SYN sia impostato in ogni caso, quindi logicamente AND il valore nel 13 ° ottetto con il valore binario di un SYN: 00010010 SYN-ACK 00000010 SYN AND 00000010 (vogliamo SYN) AND 00000010 (vogliamo SYN) -------- -------- = 00000010 = 00000010
Vediamo che questa operazione AND fornisce lo stesso risultato indipendentemente dall'impostazione di ACK o di un altro bit di controllo TCP. La rappresentazione decimale del valore AND così come il risultato di questa operazione è 2 (binario 00000010), quindi sappiamo che per i pacchetti con SYN impostato la seguente relazione deve essere vera: ((valore di ottetto 13) AND (2)) == (2) Questo ci indica il tcpdump espressione del filtro tcpdump -i xl0 'tcp 13 & 2 == 2' Si noti che è necessario utilizzare virgolette singole o una barra rovesciata nell'espressione per nascondere il carattere speciale AND ('&') dalla shell. Pacchetti UDP. Il formato UDP è illustrato da questo pacchetto rwho: actinide.who> broadcast.who: udp 84
Questo dice che porto chi sull'host actinide inviato un datagramma udp alla porta chi sull'host trasmissione , l'indirizzo di trasmissione Internet. Il pacchetto conteneva 84 byte di dati utente. Alcuni servizi UDP vengono riconosciuti (dal numero di porta di origine o di destinazione) e le informazioni di protocollo di livello superiore stampate, in particolare, richieste di servizio Domain Name (RFC-1034/1035) e Sun RPC (RFC-1050) in NFS. Richieste del server dei nomi UDP (N.B .: La seguente descrizione presuppone la familiarità con il protocollo del servizio di dominio descritto in RFC-1035. Se non si ha familiarità con il protocollo, la seguente descrizione avrà poco senso). Le richieste del server dei nomi sono formattate come: src> dst: id op? flags qtype qclass name (len) h2opolo.1538> helios.dominio: 3+ A? ucbvax.berkeley.edu. (37)
Ospite h2opolo ha chiesto al server di dominio helios per un record di indirizzo (qtype = A) associato al nome ucbvax.berkeley.edu. L'ID della query era '3'. Il '+' indica il ricorsione desiderata la bandiera è stata impostata. La lunghezza della query era di 37 byte, escluse le intestazioni del protocollo UDP e IP. L'operazione di query era normale, domanda , quindi il campo operativo è stato omesso. Se l'op fosse stato qualcos'altro, sarebbe stato stampato tra il "3" e il "+". Allo stesso modo, il qclass era quello normale, C_IN e omesso. Qualsiasi altra qclass sarebbe stata stampata immediatamente dopo la "A". Alcune anomalie vengono controllate e possono generare campi aggiuntivi racchiusi tra parentesi quadre: se una query contiene una risposta, record di autorità o sezione record aggiuntivi, ancount , nscount , o arcount sono stampati come ' n a ',' n né ' n au 'dove n è il conteggio appropriato. Se uno qualsiasi dei bit di risposta è impostato (AA, RA o rcode) o uno qualsiasi dei bit `deve essere zero 'sono impostati nei byte due e tre,` b2 & 3 = X 'è stampato, dove X è il valore esadecimale dei byte di intestazione due e tre. Risposte del server dei nomi UDP. Le risposte del server dei nomi sono formattate come: src> dst: id op rcode flags a / n / au data class (len) helios.dominio> h2opolo.1538: 3 3/3/7 A 128.32.137.3 (273)helios.dominio> h2opolo.1537: 2 NXDomain * 0/1/0 (97)
Nel primo esempio, helios risponde alla query id 3 da h2opolo con tre record di risposta, tre record del server dei nomi e sette record aggiuntivi. Il primo record di risposta è di tipo A (indirizzo), ei suoi dati sono l'indirizzo internet 128.32.137.3. La dimensione totale della risposta era di 273 byte, escludendo le intestazioni UDP e IP. Omissione (query) e codice di risposta (NoError) sono stati omessi, così come la classe (C_IN) del record A. Nel secondo esempio, helios risponde alla query 2 con un codice di risposta di dominio inesistente (NXDomain) senza risposte, un name server e nessun record di autorizzazione. Il '*' indica che il risposta autorevole il bit è stato impostato. Poiché non ci sono state risposte, non sono stati stampati tipi, classi o dati. Altri caratteri di bandiera che potrebbero apparire sono '-' (ricorsione disponibile, RA, non set) e '|' (messaggio troncato, TC, impostato). Se la sezione "domanda" non contiene esattamente una voce, " n q 'è stampato. Si noti che le richieste e le risposte del name server tendono ad essere grandi e predefinite snaplen di 68 byte potrebbe non acquisire abbastanza del pacchetto da stampare. Utilizzare il-S flag per aumentare lo snaplen se è necessario investigare seriamente sul traffico del name server. '-s 128'ha funzionato bene per me. Decodifica SMB / CIFS. tcpdump include una decodifica SMB / CIFS / NBT piuttosto estesa per i dati su UDP / 137, UDP / 138 e TCP / 139. Viene anche eseguita una decodifica primitiva dei dati SMX IPX e NetBEUI. Di default viene eseguita una decodifica abbastanza minimale, con una decodifica molto più dettagliata eseguita se si utilizza -v. Tieni presente che con -v un singolo pacchetto SMB può occupare una pagina o più, quindi usa solo -v se vuoi davvero tutti i dettagli cruenti. Se si decodificano le sessioni SMB contenenti stringhe Unicode, è possibile impostare la variabile d'ambiente USE_UNICODE su 1. Una patch per il rilevamento automatico delle stringhe Unicode sarebbe benvenuta. Per informazioni sui formati di pacchetti SMB e su cosa significano tutti i campi, vedi www.cifs.org o la directory pub / samba / specs / sul tuo sito mirror samba.org preferito. Le patch SMB sono state scritte da Andrew Tridgell ([email protected]). Richieste e risposte NFS. Le richieste e le risposte di Sun NFS (Network File System) sono stampate come: src.xid> dst.nfs: len op args src.nfs> dst.xid: rispondi alle statistiche sui risultati sushi.6709> wrl.nfs: 112 readlink fh 21,24 / 10,73165wrl.nfs> sushi.6709: rispondi ok 40 readlink "../var"sushi.201b> wrl.nfs: 144 lookup fh 9,74 / 4096,6878 "xcolors"wrl.nfs> sushi.201b: risposta ok 128 lookup fh 9,74 / 4134,3150
Nella prima riga, host Sushi invia una transazione con id 6709 a WRL (si noti che il numero che segue l'host src è un ID transazione, non la porta di origine). La richiesta era di 112 byte, escluse le intestazioni UDP e IP. L'operazione era a readlink (leggi il link simbolico) sul file handle ( fh ) 21,24 / 10,731657119. (Se uno è fortunato, come in questo caso, l'handle del file può essere interpretato come una coppia di numeri di dispositivo maggiore, minore, seguita dal numero di inode e dal numero di generazione.) WRL risponde "ok" con il contenuto del link. Nella terza riga, Sushi chiede WRL cercare il nome xcolors 'nel file di directory 9,74 / 4096,6878. Si noti che i dati stampati dipendono dal tipo di operazione. Il formato è pensato per essere auto-esplicativo se letto in congiunzione con una specifica del protocollo NFS. Se viene fornito il flag -v (verbose), vengono stampate ulteriori informazioni. Per esempio: sushi.1372a> wrl.nfs: 148 leggi fh 21,11 / 12,195 8192 byte @ 24576wrl.nfs> sushi.1372a: rispondi ok 1472 leggi REG 100664 ids 417/0 sz 29388
(-v stampa anche i campi TTL, ID, lunghezza e frammentazione intestazione IP, che sono stati omessi da questo esempio.) Nella prima riga, Sushi chiede WRL leggere 8192 byte dal file 21,11 / 12,195, con l'offset di byte 24576. WRL risponde "ok"; il pacchetto mostrato sulla seconda riga è il primo frammento della risposta, e quindi è lungo solo 1472 byte (gli altri byte seguiranno nei frammenti successivi, ma questi frammenti non hanno intestazioni NFS o anche UDP e quindi potrebbero non essere stampati, a seconda dell'espressione del filtro utilizzata). Poiché v
Formato di output Tcpdump