So erfassen Sie die letzten N Sekunden von Paketen mit tcpdump

14

Wie kann ich mit tcpdump die letzten N Sekunden von Paketen erfassen?

Fadenscheinig
quelle
1
"Gib mir" wird dich hier nicht weit bringen. Vielleicht sollten Sie uns zeigen, was Sie bisher versucht haben und wo genau Sie Probleme haben, die Sie nicht selbst lösen können.
Matthias Krull
Der gewünschte Bash-Befehl lautet: "man tcpdump"
William Pursell

Antworten:

15

Wenn Sie möchten, dass tcpdump nur n Sekunden lang ausgeführt und dann beendet wird, können Sie eine Zeitüberschreitung verwenden.

Beispielsweise:

timeout 2 tcpdump -eni mon0

Ansonsten glaube ich nicht, dass tcpdump eine Option dazu hat.

Siesta
quelle
Leider ist der Befehl timeout in CentOS 5.x nicht vorhanden. Es wurde in einer neueren Version von Coreutils hinzugefügt. Eine weitere Motivation für mich, das Betriebssystem zu aktualisieren.
Mister_Tom
Ich nehme an, wenn Sie keine Zeitüberschreitung haben, können Sie stattdessen eine Zeitüberschreitung mit einem Skript erstellen:
Siesta
Funktioniert gut für mich. Ich habe dies verwendet, um den gesamten Datenverkehr für ein Programm zu überwachen, das nicht funktioniert hat. Ich habe tcpdump mit einem Timeout von N Sekunden gestartet. Dann habe ich das Programm gestartet (was bis zu N Sekunden dauert).
Trevor Boyd Smith
In der Frage werden Sie aufgefordert, die letzten N Sekunden zu erfassen . In Ihrer Antwort erfahren Sie, wie Sie die ersten N Sekunden erfassen .
Flimzy
3

Ich denke, der beste Weg, dies zu erreichen, ist das Flag -G von tcpdump, das, wenn es mit -w verwendet wird, Ihren Dump alle N Sekunden in einer neuen Datei speichert. Zum Beispiel:

tcpdump -w outfile-% s -G 10

Dadurch wird alle 10 Sekunden eine neue Datei mit dem Namen "outfile-XXXX" (wobei XXXX die Anzahl der Sekunden seit der Epoche darstellt) erstellt.

Weitere Informationen finden Sie in den Manpages zu tcpdump (8) und strftime (3).

Fadenscheinig
quelle
tcpdump 3.9.4 ist im Lieferumfang von CentOS 5.10 nicht mit der Option -G ausgestattet. Ich muss mein Betriebssystem wirklich aktualisieren.
Mister_Tom
-G stoppt den Befehl tcpdump nicht. Es läuft immer noch. Das Timeout 2 tcpdump stoppt den Befehl nach 2 Sekunden.
Ciceron
@ciceron: Es ging nicht darum, tcpdump zu stoppen. Es ging darum, die letzten N Sekunden zu erfassen . Ihr Vorschlag erfasst die ersten N Sekunden. Entscheidend nicht, wonach das OP gefragt hat.
Flimzy
1

Sie können tethereal anstelle von tcpdump verwenden. Sie können diese Befehlszeilenoption verwenden:

-a duration:X
Ugo
quelle
Während dies die Frage beantworten mag, wäre es eine bessere Antwort, wenn Sie eine Erklärung dafür liefern könnten .
DavidPostill
tcpdump selbst erlaubt keine zeitlich begrenzte Paketverfolgung, tshark jedoch. (nb da diese Frage gestellt und beantwortet wurde, wurde Ethereal zu Wireshark) tshark -a duration:600 -i eth0 -w $(hostname).10mins.pcaperfasst zehn Minuten Datenverkehr von der Schnittstelle eth0 in die Datei $ (Hostname) .10mins.pcap
Andrew Beals
0

tcpdump options -w new.tcpdump

ps -ef |grep tcpdump

Notieren Sie sich die PID, sagen Sie, es ist 11193

at 11:00 kill 11193

Warten Sie jetzt bis 11:00 Uhr und Ihre Aufnahme wird getötet, aber gespeichert

Spartacus
quelle
fwiw pgrep ist eine viel bessere Alternative zu ps | grep; besonders hier.
Gute Person
0

Ich habe versucht, das gleiche Problem zu lösen, also habe ich ein portables Skript geschrieben, um tcpdump für n Sekunden auszuführen.

#tcpdump_for_n_sec.sh
n=$1
shift #remove first arg from $@ 
tcpdump $@ & x=$!
sleep $n
kill $x

Verwendung ./tcpdump_for_n_sec.sh sec args for tcpdump

./tcpdump_for_n_sec.sh 5 i- any not port 22 -s0 -wfile.pcap
lafferc
quelle
0

sudo tcpdump -i -w & dies wird ausgeführt, wenn tcpdump im Ruhemodus ist

  • w: Ausgabe in der .pcap-Datei speichern &: Der tcpdump-Prozess wird im Energiesparmodus ausgeführt. um es für eine Weile laufen zu lassen. Es wird nicht unterbrochen, wenn Sie sich abmelden, bis Sie den Prozess beenden.
Lin-man
quelle