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.