Ich möchte die Ausgabe von tcpdump erfassen und als Eingabe für einen zweiten Befehl verwenden. Übrigens möchte ich nicht das PCAP-Format verwenden!
Ich habe es versucht
sudo tcpdump -q ip > ./out.txt
Als ich mir die Datei ansah, sah ich, dass der gesamte STDOUT die ganze Zeit in die Datei geschrieben wurde, aber ich hatte erwartet, dass die Datei nur mit dem neuen Inhalt überschrieben wird. Wird der gesamte STDOUT gepuffert oder gelöscht, wenn er in das Terminal geschrieben wird?
- Gibt es eine Möglichkeit, nur die teilweisen Aktualisierungen von STDOUT zu lesen?
- Wie kann ich die Ausgabe von tcpdump kontinuierlich auf einen anderen Befehl umleiten?
Funktioniert das ?
sudo tcpdump -q ip | my_command
Antwort1
Um die Datei immer mit jeder neuen tcpdump
Zeile zu überschreiben:
sudo tcpdump -l -q ip | awk '{system("echo " $0 " > out")}'
Um die Ausgabe für einen anderen Befehl zu verwenden, zBawk
$3
= nur die 3. Spaltesudo tcpdump -l -q ip | awk '{print $3}'
Filtern nach
tcp
sudo tcpdump -l -q ip | awk '/tcp/ {print $0}'
Oder eine Kombination:
sudo tcpdump -l -q ip | awk '/tcp/ {"echo " $0 " > out"}'
ausman 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