tcpdump - Drehen Sie die Aufnahmedateien mit -G, -W und -C

14

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

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 -COption wird dadurch die Anzahl der erstellten Dateien auf die angegebene Anzahl begrenzt, und es wird von Anfang an mit dem Überschreiben von Dateien begonnen, 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 -GOption wird dadurch die Anzahl der erstellten gedrehten Dump-Dateien begrenzt, die beim Erreichen des Grenzwerts mit dem Status 0 beendet werden. Bei Verwendung mit -Cwird das Verhalten zu zyklischen Dateien pro Zeitscheibe führen.

Ich führe dies auf OS X 10.9.5 / 10.10.3-Clients aus. 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
Andrew
quelle
Bitte sehen Sie meine Antwort
MariusMatutiae

Antworten:

13

Das liegt daran, dass du -W 3statt geschrieben hast -W 48. Es gibt jedoch andere Fehler in Ihrem Befehl.

Die Option -Gbedeutet:

-G rotate_seconds

      Wenn angegeben, wird die mit der -wOption angegebene Speicherauszugsdatei alle Sekunden gedreht. Sicherungsdateien haben den angegebenen Namen, -wder ein durch strftime (3) definiertes Zeitformat enthalten soll. Wenn kein Zeitformat angegeben ist, überschreibt jede neue Datei die vorherige.

      In Verbindung mit der -COption haben Dateinamen die Form ' Datei <Anzahl>'.

Seit Sie geschrieben haben -G 3, drehen Sie dies alle 3 Sekunden, während Sie angegeben haben

... die Daten im Wert von 30 Minuten erfassen

Auch das Namensschema ist falsch: von oben,

In Verbindung mit der -COption haben Dateinamen die Form ' Datei <Anzahl>'.

Daher macht es keinen Sinn, das Zeitformat für den Namen anzugeben.

Darüber hinaus hat die -COption kein Argument, während sie laut Manpage Folgendes sollte:

tcpdump [  -AdDefIKlLnNOpqRStuUvxX  ] [  -B  Puffergröße  ] [  -c  Anzahl  ]
-C  Dateigröße  ] [  -G  Drehsekunden  ] [  -F  Datei  ] [  -I  Schnittstelle  ] [  -m  Modul  ] [  -M  Geheimnis  ] [  -r  Datei  ] [  -s  snaplen  ] [  -T-  Typ  ] [  -w  Datei  ] [  -W  Dateizahl  ] [  -E  spi @ ipaddr algo: geheim, ... ] [  -y  Datentyp  ] [  -z  Postrotate-Befehl  ] [  -Z  Benutzer  ] [  Ausdruck  ]

In der Manpage heißt es:

-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. Sicherungsdateien nach der ersten Sicherungsdatei haben den Namen, der mit dem -wFlag angegeben ist, und eine Nummer danach, beginnend bei 1 und weiter nach oben. Die Einheiten von file_size sind Millionen von Bytes (1.000.000 Bytes, nicht 1.048.576 Bytes).

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

Am Ende sollte Ihr Befehl sein:

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 dem Zeitraum 48 gedreht, entweder alle 1800 Sekunden (= 30 Minuten) oder alle 100 MB, je nachdem, was zuerst eintritt.

MariusMatutiae
quelle
Die Antwort am Ende fehlt die Bedingung If no time format is specified, each new file will overwrite the previous.(ich habe die Antwort aktualisiert.)
okwap
2
@okwap, als Sie die Antwort bearbeitet haben (um -% Y-% m-% d_% H:% M:% S hinzuzufügen), haben Sie den zyklischen Teil der Verwendung von -G, -C und -W zusammen gebrochen. Die ursprüngliche Antwort mit nur / var / tmp / trace für den Dateinamen -w war korrekt und erzeugte die beabsichtigten zyklischen Ausgaben wie beschrieben (trace1, trace2, ...). Wenn Sie -G, -C und -W zusammen verwenden, können Sie das strftime-Format im Dateinamen nicht verwenden und erhalten trotzdem die zyklischen Ausgaben. Bei Ihrer Bearbeitung schreibt tcpdump Dateien nur nicht zyklisch weiter, da sich die Dateinamen nie wiederholen.
Bill Menees
@ BillMenees Vielen Dank, dass Sie mich darauf aufmerksam gemacht haben. Ich habe die Bearbeitung von okwap rückgängig gemacht.
Marius Matutiae
Genau wie Swinster im Kommentar unten stelle ich fest, dass diese Antwort nicht das erwartete Verhalten erzeugt. Wenn Sie -w -W -C und -G zusammen verwenden, wird dieselbe Datei immer wieder überschrieben. Es wird nicht veranlasst, dass eine Anzahl von Dateien wie erwartet -W <n> erstellt wird.
Niels2000
6

Erweiterung der Antwort von flabdablet (Wechsel -G 1800zu -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

geben Sie %m=month, %d=day of month, %H=hour of day, %M=minute of day, %S=second of day, %s=millisecond of day, 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, um Spuren für diese lästigen intermittierenden Probleme zu organisieren. Wenn Sie nicht root sind, möchten Sie es vielleicht sudound machen es natürlich zu einem Nohup:

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

Mir scheint, 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 generiert jeder Aufruf von tcpdump immer nur zwei verschiedene% M-Werte im Abstand von einer halben Stunde, und die Trace-Dateien von gestern werden zur selben Stunde überschrieben und Minutenzahlen rollen wieder herum.

flabdablet
quelle
1

Nach einigen Experimenten konnte ich die Antwort von @MariusMatutiae nicht wie erwartet zum Laufen 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, wird trace.pcap0immer und immer wieder geschrieben.

Wenn Sie, wie im Kommentar vorgeschlagen, die Zeitformatierung zum Dateinamen hinzufügen, erhalten Sie einfach jede wachsende Liste von Dateien.

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

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

Ja, es scheint nicht zu funktionieren, wie die Antwort von Marius Matutiae 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 -C 100es in einem Zeitraum von 30 Minuten so viele MB-Dateien wie möglich erfassen, da httpdebug.pcap03es den frühesten Zeitstempel hat und viel kleiner als 100 MB ist. Es scheint also, als wäre es bei einer 30-Minuten-Marke geschnitten worden. Sobald es 30 Minuten erreicht hat, scheint es zurück zu springen httpdebug.pcap00und die Zahl zu erhöhen, wenn es 100 MB erreicht. Dies bedeutet, dass Sie, wenn Sie innerhalb von 30 Minuten viele Anfragen haben, sehr hohe httpdebug.pcapXX-Zahlen erhalten. Wenn Sie in einem Zeitraum nie mehr so ​​viele Anfragen erreichen, werden diese hohen httpdebug.pcapXX-Zahlen nie mehr überschrieben.

Ich denke also, dass zyklische Dateien pro Zeitscheibe bedeuten, dass die Zeitscheibe ist -G 1800und sie alle zyklisch -G 1800und inkrementiert -C 100.

Ich bin mir nicht sicher, ob dies -W 48Auswirkungen hat, aber wenn Sie dazu kommen httpdebug.pcap47(die Zählung beginnt bei 0 ", werden keine Pakete mehr erfasst.


Vor kurzem wurde ein GitHub-Problem mit dem verwirrenden Wortlaut eröffnet. Sie haben die Implementierung nicht geändert, aber sie haben versucht, die Dokumentation ein wenig klarer 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 ein wenig verwirrend ist, aber ich denke, der Unterschied zu meiner obigen Schlussfolgerung besteht darin, dass es besagt, -Wdass die Verwendung mit -C -Gnichts anderes als den Dateinamen beeinflusst.

Wird im Allgemeinen -Wzum Begrenzen der Anzahl von Dateien verwendet. Verwenden Sie es also nicht, wenn Sie unbegrenzt erfassen möchten.

dosentmatter
quelle