2012-04-24 22 views
18

In tcpdump, come posso acquisire tutto il traffico IP in entrata destinato alla mia macchina? Non mi interessa il mio traffico locale.Cattura il traffico in entrata in tcpdump

Devo solo dire:

tcpdump ip dst $MyIpAddress and not src net $myIpAddress/$myNetworkBytes 

... o mi sto perdendo qualcosa?

+0

Che cos'è "icoming IP traffic"? Anche i pacchetti per l'indirizzo di broadcast stanno arrivando. – harper

risposta

20

In shell Bash provare questo:

tcpdump -i eth0 tcp and dst host $MyIpAddress and not src net $MyNetworkAddress/$myNetworkBytes 

o questa formulazione equivalente:

tcpdump -i eth0 ip proto \\tcp and dst host $MyIpAddress and not src net $MyNetworkAddress/$myNetworkBytes 

Sul mio sistema questo risolve a qualcosa di simile:

tcpdump -i eth0 tcp and dst host 10.0.0.35 and not src net 10.0.0.0/24 

Se volete vedere tutto il traffico verso l'host di destinazione, non solo il traffico del protocollo TCP che è possibile fare:

tcpdump -i eth0 dst host $MyIpAddress and not src net $MyNetworkAddress/$myNetworkBytes 

Alcune note:

  1. ho cambiato $myIpAddress/$myNetworkBytes-$MyNetworkAddress/$myNetworkBytes. Questo perché l'intenzione evidente della regola è di escludere il traffico dalla rete locale, e lo correct way per specificare un indirizzo di rete è quello di specificare l'indirizzo IP più basso della rete (che è chiamato indirizzo di rete)/maschera di rete. Se si specifica un indirizzo diverso da quello l'indirizzo più basso della gamma per una rete con una maschera di $ myNetworkBytes, allora si otterrà il messaggio di errore:

    tcpdump: non-network bits set in "10.0.0.3/24" 
    
  2. Nel primo esempio 'tcp' è una parola chiave nel linguaggio di espressione libpcap (man pcap-filter), mentre nel secondo esempio, 'tcp' viene utilizzato come valore di ip proto. Per indicare che il 'tcp' nella seconda istanza è un valore e non un'altra parola chiave 'tcp', ho bisogno di sfuggire al 'tcp' con una doppia barra rovesciata. Deve essere una doppia barra rovesciata in modo che l'interprete di Bash passi una sola barra retroversa all'interprete libpcap (Bash mangia la prima barra rovesciata, libpcap ottiene la seconda.) Per ridurre la confusione di escape doppia, potrebbe essere utile entrare nel abitudine di doppio citare tutta la parte espressione del comando:

    tcpdump -i eth0 "ip proto \tcp and dst host $MyIpAddress and not src net $MyNetworkAddress/$myNetworkBytes" 
    
  3. per evitare le avvertenze e le sorprese, è meglio utilizzare l'identificatore di interfaccia -i eth0 o qualsiasi interfaccia che si desidera. Non tutte le interfacce hanno necessariamente un indirizzo IP assegnato e senza essere specifici, potresti vedere il traffico che non avevi intenzione di vedere. Questo è particolarmente vero per i sistemi su cui è in esecuzione il gestore di rete, che sembra avere una propria idea su quali interfacce aggiungere e quando.

+0

Ehi, grazie per la risposta. Mi interessa anche il traffico UDP, ecco perché non ho inserito 'tcp' nel filtro sopra. Sono sicuro che sia qualcosa di banale, ma potresti chiarire perché devo inserire il mio indirizzo di rete invece del mio indirizzo IP? Non dovrebbe avere lo stesso effetto, una volta specificato il numero di byte di rete? –

+0

La risposta modificata per rispondere al commento –

10

Nessuno dei precedenti funziona molto bene per una casella con più IP.

questo ha funzionato molto bene per me su un server DNS con molti ips legati ad esso:

tcpdump -l -n -i pub dst port 53 and inbound

potrebbe non funzionare su tutte le versioni di tcpdump però.

# tcpdump -V 
tcpdump version 4.1-PRE-CVS_2012_03_26 
libpcap version 1.4.0 
+1

apprezza la parola chiave "inbound" – bbonev

0

-Q direzione --direction = direzione Scegliere inviare/ricevere direzione direzione per cui devono essere catturate pacchetti. I valori possibili sono in', out 'e `inout'. Non disponibile su tutte le piattaforme.

+0

Nice! Non sapevo di questa opzione. –