Ich möchte tcpdump rohe Paketdaten in eine Datei schreiben und Paketanalyse in der Standardausgabe anzeigen, während die Pakete erfasst werden (durch Analyse meine ich die Zeilen, die normal angezeigt werden, wenn -w fehlt). Kann mir bitte jemand sagen, wie man das macht?Wie kann ich tcpdump schreiben in Datei und Standardausgabe die entsprechenden Daten?
35
A
Antwort
69
Hier ist eine nette Art und Weise zu tun, was Sie wollen:
tcpdump -w - | tee somefile | tcpdump -r -
Was es tut:
-w -
tcpdump
Binärdatenstdout
tee
schreibt ein, dass binäre Daten zu schreiben, sagt Datei und zu seinem eigenenstdout
-r -
sagt der zweitetcpdump
seine Daten zu erhalten, von seinemstdin
-1
tcpdump ${ARGS} &
PID=$!
tcpdump ${ARGS} -w ${filename}
kill $PID
diese Technik verwenden, ist Wireshark von einigen der Dateien beschwerte behauptet, dass das letzte Paket ist unvollständig. Ich nehme an, tcpdump würde alle Daten vor dem Beenden unbuffered und schreiben, aber, falls nicht, würde die Option -U hier nützlich sein. Auf der Manpage: 'Verwenden Sie das Flag -U, um zu veranlassen, dass Pakete geschrieben werden, sobald sie empfangen wurden. (Es wird versucht, keine gepufferten/noch nicht geschriebenen Dateien zu verlieren, wenn tcpdump beendet wird). Ich hatte jedoch keine Änderung, um das zu bestätigen. – maganap
Warum kann es nicht sein? Tcpdump host | tee/tmp/output'. Dies vermeidet einen zweiten tcpdump, den Sie am Ende verwenden. Recht ? –
deppfx
@deppfx Das würde funktionieren, nur um den Text zu speichern. '-w' veranlasst' tcpdump', die Daten in das Standard-Binärformat zu schreiben. – cnicutar