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 tcpdump
línea:
sudo tcpdump -l -q ip | awk '{system("echo " $0 " > out")}'
Para utilizar la salida para otro comando, por ejemploawk
$3
= solo la 3ra columnasudo tcpdump -l -q ip | awk '{print $3}'
Filtrado por
tcp
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