Cómo capturar los últimos N segundos de paquetes usando tcpdump

14

¿Cómo puedo capturar los últimos N segundos de paquetes usando tcpdump?

Flimzy
fuente
1
"Dame" no te llevará lejos aquí. Tal vez debería mostrarnos lo que ha intentado hasta ahora y dónde exactamente tiene problemas que no puede resolver.
matthias krull
El comando bash que quieres es: "man tcpdump"
William Pursell

Respuestas:

15

Si solo desea que tcpdump se ejecute durante n segundos y luego salga, puede usar el tiempo de espera.

Por ejemplo:

timeout 2 tcpdump -eni mon0

De lo contrario, no creo que tcpdump tenga una opción para hacer esto.

siesta
fuente
Lamentablemente, el comando de tiempo de espera no está presente en CentOS 5.x. Fue agregado en una versión más reciente de coreutils. Otra motivación para mí para actualizar el sistema operativo.
Mister_Tom
Supongo que si no tiene tiempo de espera, podría crear algo así como tiempo de espera con un script:
siesta
Funciona muy bien para mi. Usé esto para monitorear todo el tráfico de un programa que no funcionaba. Comencé tcpdump con un tiempo de espera de N segundos. Luego comencé el programa (que toma hasta N segundos).
Trevor Boyd Smith
La pregunta pide capturar los últimos N segundos. Su respuesta le dice cómo capturar los primeros N segundos.
Flimzy
3

Creo que la mejor manera de lograr esto es con el indicador -G de tcpdump, que, cuando se usa con -w, guardará su volcado en un nuevo archivo cada N segundos. Por ejemplo:

tcpdump -w outfile-% s -G 10

Esto creará un nuevo archivo con el nombre de 'outfile-XXXX' (donde XXXX representa el número de segundos desde la época) cada 10 segundos.

Consulte las páginas de manual de tcpdump (8) y strftime (3) para obtener detalles adicionales.

Flimzy
fuente
tcpdump 3.9.4 como se envió con CentOS 5.10 no tiene la opción -G. Realmente necesito actualizar mi sistema operativo.
Mister_Tom
-G no detiene el comando tcpdump. Todavía funciona para siempre. El tiempo de espera 2 tcpdump detendrá el comando después de 2 segundos.
ciceron
@ciceron: La pregunta no era sobre detener tcpdump. Se trataba de capturar los últimos N segundos . Su sugerencia capturará los primeros N segundos. Decididamente no es lo que solicitó el OP.
Flimzy
1

Puede usar tethereal en lugar de tcpdump. Puede usar esta opción de línea de comandos:

-a duration:X
Ugo
fuente
Si bien esto puede responder la pregunta, sería una mejor respuesta si pudiera proporcionar alguna explicación de por qué lo hace.
DavidPostill
tcpdump en sí mismo no permite un rastreo de paquetes con tiempo limitado, pero tshark sí. (Nota: desde que se hizo y respondió esta pregunta, Ethereal se convirtió en Wireshark) tshark -a duration:600 -i eth0 -w $(hostname).10mins.pcapcapturará diez minutos de tráfico de la interfaz eth0 en el archivo $ (nombre de host) .10mins.pcap
Andrew Beals
0

tcpdump options -w new.tcpdump

ps -ef |grep tcpdump

tome nota de PID, diga que es 11193

at 11:00 kill 11193

ahora solo espera hasta las 11:00 y tu captura se matará pero se guardará

Espartaco
fuente
fwiw pgrep es una alternativa mucho mejor a ps | grep; Especialmente aquí.
Buena persona
0

Estaba tratando de resolver el mismo problema, así que escribí un script portátil para ejecutar tcpdump durante n segundos.

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

Uso ./tcpdump_for_n_sec.sh sec args para tcpdump

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

sudo tcpdump -i -w & esto se ejecutará tcpdump está en modo de suspensión

  • w: guardar la salida en el archivo .pcap &: el proceso tcpdump se ejecutará en modo de suspensión nota: asegúrese de tener suficiente espacio disponible si lo desea. ejecutarlo por un tiempo. No se interrumpirá si cierra sesión hasta que finalice el proceso.
Lin-man
fuente