Wie kann ich tcpdump für jedes erfasste Paket in eine Datei schreiben lassen?

13632
sudurais

Ich verwende die folgende Version von tcpdump:

  • tcpdump version 4.0.0
  • libpcap Version 1.0.0

Ich möchte, dass tcpdump für jedes erfasste Paket in eine Datei schreibt. Derzeit konnte ich die erfassten Pakete nur sehen, wenn ich tcpdump beendet habe.

tcpdump -i em1 -w /tmp/pkts.pcap -s 1500 

Ich muss aufhören, um öffnen zu können /tmp/pkts.pcap- bis dahin gehe ich davon aus, dass tcpdump puffert. Gibt es eine Möglichkeit, dass tcpdump sofort in die Datei geschrieben wird, anstatt zu puffern?

3
Sie könnten es wahrscheinlich sofort in eine Datei schreiben lassen, aber der beste Fall ist folgendes: Wenn Sie die Datei geöffnet haben, während `tcpdump` noch ausgeführt wurde, werden die Ergebnisse, die in die Datei geschrieben wurden, nach dem Öffnen nicht angezeigt Wenn Sie die Datei erneut öffnen, werden aktuellere Ergebnisse angezeigt. Der schlimmste Fall ist, dass `tcpdump` die vollständige Kontrolle über die Datei übernimmt und Ihnen den Zugriff auf diese Datei nicht gestattet, bis` tcpdump` abgeschlossen ist. Wenn Sie mit keinem dieser Szenarien leben können, möchten Sie möglicherweise eine andere (robustere) Lösung wie [Wireshark] (http://www.wireshark.org/) betrachten. ubiquibacon vor 13 Jahren 0
@typoking: danke. Wireshark wäre der bessere Weg. Also keine Möglichkeit, Tcpdump zu optimieren. Es gibt -U Option, aber es funktioniert nicht in 4.0.0, nehme ich an .. sudurais vor 13 Jahren 0
Sie können versuchen, den Befehl tail in einer separaten Sitzung zu verwenden, um die wachsende Protokolldatei anzuzeigen: z. B. tail -f Protokolldateiname Linker3000 vor 13 Jahren 0
"Es gibt die Option -U, aber es funktioniert nicht in 4.0.0, nehme ich an." Also nehme ich an, Sie haben es versucht und es hat nicht das getan, was Sie erwartet hatten. (Wenn Sie * es * nicht * versucht haben, probieren Sie es aus, bevor Sie annehmen, dass es nicht funktioniert.) vor 10 Jahren 0

1 Antwort auf die Frage

5
agtoever

Verwenden Sie die -UOption in Kombination mit der -wOption und prüfen Sie, ob Sie eine Version von libcap haben, die dies unterstützt pcap_dump_flush(). Aus der Manpage (Version 4.3.0-1):

 -U If the -w option is not specified, make the printed packet output ``packet- buffered''; i.e., as the description of the contents of each packet is printed, it will be written to the standard output, rather than, when not writing to a terminal, being written only when the output buffer fills.  If the -w option is specified, make the saved raw packet output ``packet-buffered''; i.e., as each packet is saved, it will be written to the output file, rather than being written only when the output buffer fills.  The -U flag will not be supported if tcpdump was built with an older version of libpcap that lacks the pcap_dump_flush() function. 
`pcap_dump_flush ()` wurde in libpcap 0.8 eingeführt, und das `-U`-Flag wurde in tcpdump 3.8 eingeführt. Daher haben libpcap 1.0.0 / tcpdump 4.0.0 Unterstützung. vor 10 Jahren 1