it-swarm.com.de

tcpdump - dreht Capture-Dateien mit -G, -W und -C

Ich möchte in der Lage sein, eine rotierende tcpdump-Ausgabe zu erfassen, die zyklisch Daten im Wert von 30 Minuten in 48 Dateien aufzeichnet.

Die Manpage impliziert, dass dies möglich sein sollte, aber meine Tests scheinen nicht das gewünschte Ergebnis zu liefern:

-W

      In Verbindung mit der Option -C wird die Anzahl der erstellten Dateien auf die angegebene Anzahl begrenzt und das Überschreiben von Dateien von Anfang an gestartet, wodurch ein "rotierender" Puffer erstellt wird. Außerdem werden die Dateien mit genügend führenden Nullen benannt, um die maximale Anzahl von Dateien zu unterstützen, sodass sie korrekt sortiert werden können.

      In Verbindung mit der Option -G wird die Anzahl der gedrehten Speicherauszugsdateien begrenzt, die erstellt werden. Bei Erreichen des Grenzwerts wird der Status 0 angezeigt. Wenn es auch mit -C verwendet wird, führt das Verhalten zu zyklischen Dateien pro Zeitscheibe.

Ich verwende dies auf OS X 10.9.5/10.10.3-Clients. Hier ist der Testbefehl; Es wird nur nach der 3. Datei beendet:

tcpdump -i en0 -w /var/tmp/trace-%Y-%M-%d_%H.%M.%S.pcap -W 3 -G 3 -C -K -n
11
Andrew

Das liegt daran, dass Sie -W 3 anstelle von -W 48 geschrieben haben. Es gibt jedoch andere Fehler in Ihrem Befehl.

Die Option -G bedeutet:

-Grotate_seconds

      Wenn angegeben, wird die mit der Option -w angegebene Sicherungsdatei alle rotate_seconds Sekunden gedreht. Savefiles haben den durch -w angegebenen Namen, der ein durch strftime (3) definiertes Zeitformat enthalten sollte. Wenn kein Zeitformat angegeben ist, überschreibt jede neue Datei die vorherige.

      In Verbindung mit der Option -C haben Dateinamen die Form ' file <count>'.

Seit du -G 3 geschrieben hast, drehst du diesen alle 3 Sekunden, während du angegeben hast

... die Daten im Wert von 30 Minuten erfasst

Auch das Benennungsschema ist falsch: von oben,

In Verbindung mit der Option -C haben Dateinamen die Form ' file <count>'.

Daher ist es nicht sinnvoll, das Zeitformat für den Namen anzugeben.

Außerdem hat die Option -C kein Argument, während sie laut der Manpage :

tcpdump [ - AdDefIKlLnNOpqRStuUvxX ] [ - B buffer_size ] [ - c count ]
[ - C Dateigröße ] [ - G rotate_seconds ] [ - F file ] [ - I Schnittstelle ] [ - m Modul ] [ - M secret ] [ - r file ] [ - s snaplen ] [ - T type ] [ - w file ] [ - W filecount ] [ - E spi @ ipaddr algo: secret, ... ] [ - y Datentyp ] [ - z Nachdrehbefehl ] [ - Z Benutzer ] [ Ausdruck ]

Die Manpage besagt:

-C

      Überprüfen Sie vor dem Schreiben eines Rohpakets in eine Sicherungsdatei, ob die Datei derzeit größer als file_size ist, und schließen Sie in diesem Fall die aktuelle Sicherungsdatei und öffnen Sie eine neue. Savefiles nach dem ersten Savefile haben den Namen, der mit dem -w Flag angegeben wurde, gefolgt von einer Zahl, die bei 1 beginnt und aufwärts geht. Die Einheiten von Dateigröße sind Millionen von Bytes (1.000.000 Bytes, nicht 1.048.576 Bytes).

Sie sollten also -C 100 angeben, um 100MB-Dateien zu erstellen.

Am Ende sollte Ihr Befehl lauten:

tcpdump -i en0 -w /var/tmp/trace -W 48 -G 1800 -C 100 -K -n

Dadurch werden Dateien (mit den Namen trace1, trace2, ...) zyklisch mit der Periode 48 entweder alle 1800 Sekunden (= 30 Minuten) oder alle 100 MB gedreht, je nachdem, was zuerst eintritt.

12
MariusMatutiae

Erweiterung der Antwort von flabdablet (Änderung von -G 1800 in -G 300 - Rotation alle fünf Minuten - nur zu Testzwecken),

tcpdump -i en0 -w /var/tmp/trace-%m-%d-%H-%M-%S-%s -W 3 -G 300

wird Ihnen %m=month, %d=day of month, %H=hour of day, %M=minute of day, %S=second of day, %s=millisecond of day geben, was zu

/var/temp/trace-03-02-08-30-56-1520002568
/var/temp/trace-03-02-08-35-56-1520002568
/var/temp/trace-03-02-08-40-56-1520002568

Sehr nützlich für die Organisation von Spuren für diese lästigen intermittierenden Probleme. Wenn Sie kein root-Benutzer sind, möchten Sie möglicherweise Sudo und natürlich ein Nohup daraus machen:

Sudo bash -c "Nohup tcpdump -i en0 -w /var/tmp/trace-%m-%d-%H-%M-%S-%s -W 3 -G 300 &"
6
jarofnstdkys

Mir scheint, dass alles, was Sie brauchen, ist

tcpdump -i en0 -G 1800 -w /var/tmp/trace-%H-%M.pcap

Der strftime-Formatbezeichner, den -G im Dateinamen -w erwartet, muss kein vollständiges Datum und keine vollständige Uhrzeit darstellen. Mit nur% H und% M und einer Rotationszeit von genau einer halben Stunde werden bei jedem Aufruf von tcpdump immer nur zwei unterschiedliche% M-Werte im Abstand von einer halben Stunde generiert, und die gestrigen Trace-Dateien werden zur selben Stunde überschrieben und Minutenzahlen rollen wieder herum.

3
flabdablet

Nach einigem Experimentieren konnte ich @MariusMatutiae nicht wie erwartet zur Arbeit bringen. Wenn die Zeit zum begrenzenden Faktor wurde und das Zeitformat nicht zum Dateinamen hinzugefügt wurde, wird die aktuelle pcap-Datei einfach überschrieben.

Versuchen Sie zum Beispiel:

tcpdump -i en0 -w /var/tmp/trace -W 10 -G 5 -C 1

Alles, was Sie am Ende haben, ist, dass trace.pcap0 immer und immer wieder geschrieben wird.

Wie es in dem Kommentar vorgeschlagen wurde, wenn Sie die Zeitformatierung zum Dateinamen hinzufügen, landen Sie einfach bei jeder wachsenden Liste von Dateien.

Daher musste ich mich an Dateien mit einfacher Größe halten:

tcpdump -i en0 -w /var/tmp/trace -W 48 -C 100
1
Swinster

Ja, es scheint nicht zu funktionieren, wie MariusMatutiaes Antwort sagt.

tcpdump ...{other options}... -w httpdebug.pcap -W 48 -G 1800 -C 100
$ ls -l
-rw-r--r--. 1 tcpdump tcpdump  100007441 Mar 17 17:57 httpdebug.pcap00
-rw-r--r--. 1 tcpdump tcpdump   46895104 Mar 17 18:02 httpdebug.pcap01
-rw-r--r--. 1 tcpdump tcpdump   93091143 Mar 17 17:47 httpdebug.pcap02
-rw-r--r--. 1 tcpdump tcpdump    5372072 Mar 17 16:17 httpdebug.pcap03

Es sieht für mich so aus, als würde es in einem Zeitraum von 30 Minuten so viele -C 100MB-Dateien wie möglich erfassen, da httpdebug.pcap03 den frühesten Zeitstempel hat und viel kleiner als 100MB ist. Sobald es 30 Minuten erreicht, scheint es zu httpdebug.pcap00 zurückzukehren und die Zahl zu erhöhen, wenn es 100 MB erreicht. Dies bedeutet, dass Sie bei vielen Anfragen in einem Zeitraum von 30 Minuten zu sehr hohen httpdebug.pcapXX-Zahlen gelangen. Wenn Sie nie mehr so ​​viele Anfragen in einem Zeitraum erreichen, werden diese hohen httpdebug.pcapXX-Zahlen niemals überschrieben.

Ich denke also, dass zyklische Dateien pro Zeitscheibe bedeuten, dass die Zeitscheibe -G 1800 ist und jeden -G 1800 durchläuft und jeden -C 100 inkrementiert.

Ich bin nicht sicher, ob -W 48 das beeinflusst, aber wenn Sie zu httpdebug.pcap47 gelangen (die Zählung beginnt bei 0`), werden keine Pakete mehr erfasst.


Vor einiger Zeit gab es ein GitHub-Problem , das sich mit dem verwirrenden Wortlaut befasste. Sie haben die Implementierung nicht geändert, aber versucht, die Dokumentation ein wenig übersichtlicher zu gestalten.

Die vorgeschlagenen Änderungen wurden am 28. Januar 2019 zusammengeführt.

Ab heute, dem 17. März 2019, ist hier die aktuelle Dokumentation:

-C :

.BI \-C " file_size"
Before writing a raw packet to a savefile, check whether the file is
currently larger than \fIfile_size\fP and, if so, close the current
savefile and open a new one.  Savefiles after the first savefile will
have the name specified with the
.B \-w
flag, with a number after it, starting at 1 and continuing upward.
The units of \fIfile_size\fP are millions of bytes (1,000,000 bytes,
not 1,048,576 bytes).

-G :

.BI \-G " rotate_seconds"
If specified, rotates the dump file specified with the
.B \-w
option every \fIrotate_seconds\fP seconds.
Savefiles will have the name specified by
.B \-w
which should include a time format as defined by
.BR strftime (3).
If no time format is specified, each new file will overwrite the previous.
Whenever a generated filename is not unique, tcpdump will overwrite the
preexisting data; providing a time specification that is coarser than the
capture period is therefore not advised.
.IP
If used in conjunction with the
.B \-C
option, filenames will take the form of `\fIfile\fP<count>'.

-W :

.B \-W
Used in conjunction with the
.B \-C
option, this will limit the number
of files created to the specified number, and begin overwriting files
from the beginning, thus creating a 'rotating' buffer.
In addition, it will name
the files with enough leading 0s to support the maximum number of
files, allowing them to sort correctly.
.IP
Used in conjunction with the
.B \-G
option, this will limit the number of rotated dump files that get
created, exiting with status 0 when reaching the limit.
.IP
If used in conjunction with both
.B \-C
and
.B \-G,
the
.B \-W
option will currently be ignored, and will only affect the file name.

Ich denke immer noch, dass es etwas verwirrend ist, aber ich vermute, der Unterschied zu meiner obigen Schlussfolgerung besteht darin, dass -W bei Verwendung mit -C -G nur den Dateinamen beeinflusst.

Im Allgemeinen wird -W verwendet, um die Anzahl der Dateien zu begrenzen. Verwenden Sie es also nicht, wenn Sie auf unbestimmte Zeit aufnehmen möchten.

0
dosentmatter