Cómo capturar la salida de tcpdump

Cómo capturar la salida de tcpdump

Me gustaría capturar el resultado de tcpdump y usarlo como entrada para un segundo comando. Por cierto, ¡no quiero usar el formato pcap!

Lo intenté

sudo tcpdump -q ip > ./out.txt

Cuando miré el archivo, vi que todo el STDOUT estaba escrito en el archivo todo el tiempo, pero esperaba que el archivo se sobrescribiera únicamente con el nuevo contenido. ¿Todo el STDOUT se almacena en el búfer o se borra cuando se escribe en el terminal?

  • ¿Hay alguna manera de poder leer solo las actualizaciones parciales de STDOUT?
  • ¿Cómo puedo redirigir la salida continuamente desde tcpdump a otro cmd?

Esto funciona ?

sudo tcpdump -q ip | my_command

Respuesta1

Para sobrescribir siempre el archivo con cada nueva tcpdumplínea:

sudo tcpdump -l -q ip | awk '{system("echo " $0 " > out")}'

Para utilizar la salida para otro comando, por ejemploawk

  • $3= solo la 3ra columna

    sudo tcpdump -l -q ip | awk '{print $3}'
    
  • Filtrado portcp

    sudo tcpdump -l -q ip | awk '/tcp/ {print $0}'
    
  • O una combinación:

    sudo tcpdump -l -q ip | awk '/tcp/ {"echo " $0 " > out"}'
    

deman tcpdump

   -l     Make  stdout  line  buffered.
          Useful if you want to see the data while capturing it.
          E.g.,
                 tcpdump -l | tee dat
          or
                 tcpdump -l > dat & tail -f dat

información relacionada