2014-09-01 4 views

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ärdaten stdout
  • tee schreibt ein, dass binäre Daten zu schreiben, sagt Datei und zu seinem eigenen stdout
  • -r - sagt der zweite tcpdump seine Daten zu erhalten, von seinem stdin
+1

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

+0

Warum kann es nicht sein? Tcpdump host | tee/tmp/output'. Dies vermeidet einen zweiten tcpdump, den Sie am Ende verwenden. Recht ? – deppfx

+2

@deppfx Das würde funktionieren, nur um den Text zu speichern. '-w' veranlasst' tcpdump', die Daten in das Standard-Binärformat zu schreiben. – cnicutar

-1
tcpdump ${ARGS} & 
PID=$! 
tcpdump ${ARGS} -w ${filename} 
kill $PID