Come acquisire gli ultimi N secondi di pacchetti usando tcpdump


14

Come posso catturare gli ultimi N secondi di pacchetti usando tcpdump?


1
"Dammi" non ti porterà lontano qui. Forse dovresti mostrarci cosa hai provato finora e dove esattamente hai problemi che non puoi risolvere da solo.
— Matthias Krull,

Il comando bash che vuoi è: "man tcpdump"
— William Pursell,

Risposte:


15

Se vuoi solo eseguire tcpdump per n secondi e poi uscire, puoi usare il timeout.

Per esempio:

timeout 2 tcpdump -eni mon0

Altrimenti non credo che tcpdump abbia un'opzione per farlo.


Sfortunatamente il comando di timeout non è presente in CentOS 5.x. È stato aggiunto in una nuova versione di coreutils. Un'altra motivazione per me per aggiornare il sistema operativo.
— Mister_Tom,

Suppongo che se non hai il timeout, potresti invece creare qualcosa di simile al timeout con una sceneggiatura:
— siesta

Funziona benissimo per me. L'ho usato per monitorare tutto il traffico per un programma che non funzionava. Ho iniziato tcpdump con un timeout di N secondi. Quindi ho avviato il programma (che richiede fino a N secondi).
— Trevor Boyd Smith,

La domanda chiede di catturare gli ultimi N secondi. La tua risposta dice come catturare i primi N secondi.
— Flimzy,

3

Penso che il modo migliore per ottenere questo risultato sia con il flag -G di tcpdump, che, se usato con -w, salverà il tuo dump in un nuovo file ogni N secondi. Per esempio:

tcpdump -w outfile-% s -G 10

Questo creerà un nuovo file con il nome di 'outfile-XXXX' (dove XXXX rappresenta il numero di secondi dall'epoca) ogni 10 secondi.

Vedi le pagine man per tcpdump (8) e strftime (3) per ulteriori dettagli.


tcpdump 3.9.4 fornito con CentOS 5.10 non ha l'opzione -G. Ho davvero bisogno di aggiornare il mio sistema operativo.
— Mister_Tom,

-G non interrompe il comando tcpdump. Funziona ancora per sempre. Il timeout 2 tcpdump interromperà il comando dopo 2 secondi.
— Ciceron

@ciceron: la domanda non riguardava l'arresto di tcpdump. Si trattava di catturare gli ultimi N secondi . Il tuo suggerimento acquisirà i primi N secondi. Decisamente non quello che l'OP ha richiesto.
— Flimzy,

1

È possibile utilizzare tethereal anziché tcpdump. È possibile utilizzare questa opzione della riga di comando:

-a duration:X

Sebbene ciò possa rispondere alla domanda, sarebbe una risposta migliore se tu potessi fornire qualche spiegazione sul perché lo faccia.
— DavidPostill

tcpdump stesso non consente una traccia dei pacchetti limitata nel tempo, ma lo fa tshark. (nb da quando questa domanda è stata posta e risposta, Ethereal è diventato Wireshark) tshark -a duration:600 -i eth0 -w $(hostname).10mins.pcapacquisirà dieci minuti di traffico dall'interfaccia eth0 nel file $ (nome host) .10mins.pcap
— Andrew Beals

0

tcpdump options -w new.tcpdump

ps -ef |grep tcpdump

prendere nota del PID, dire che è 11193

at 11:00 kill 11193

ora aspetta solo fino alle 11:00 e la tua cattura verrà uccisa ma salvata


fwiw pgrep è un'alternativa molto migliore a ps | grep; soprattutto qui.
— Brava persona,

0

Stavo cercando di risolvere lo stesso problema, quindi ho scritto uno script portatile per eseguire tcpdump per n secondo.

#tcpdump_for_n_sec.sh
n=$1
shift #remove first arg from $@ 
tcpdump $@ & x=$!
sleep $n
kill $x

Utilizzo ./tcpdump_for_n_sec.sh sec args per tcpdump

./tcpdump_for_n_sec.sh 5 i- any not port 22 -s0 -wfile.pcap

0

sudo tcpdump -i -w e questo funzionerà tcpdump è in modalità sospensione

  • w: salva l'output nel file .pcap e: il processo tcpdump verrà eseguito in modalità di sospensione nota: assicurati di avere abbastanza spazio disponibile se lo desideri. per eseguirlo per un po '. Non si interromperà se disconnettersi fino a quando non si interrompe il processo.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.