web-dev-qa-db-ja.com

tcpdump – -G、-W、-Cを使用してキャプチャファイルをローテーション

30分のデータを48個のファイルに周期的にキャプチャするローテーションtcpdump出力をキャプチャできるようにしたいと思っています。

manページ はこれが可能であることを意味しますが、私のテストでは私が探している結果が生成されないようです:

-W

      -Cオプションと組み合わせて使用​​すると、作成されるファイルの数が指定した数に制限され、最初からファイルの上書きが開始されるため、「回転'バッファ。さらに、ファイルの最大数をサポートするのに十分な先頭の0を付けてファイルに名前を付け、正しくソートできるようにします。

      -Gオプションと組み合わせて使用​​すると、作成されるローテーションダンプファイルの数が制限され、制限に達するとステータス0で終了します。 -Cと共に使用した場合、この動作により、タイムスライスごとに循環ファイルが生成されます。

OS X 10.9.5/10.10.3クライアントでこれを実行しています。これがtestコマンドです。 3番目のファイルの後に終了します。

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

-W 3ではなく-W 48と書いたからです。ただし、コマンドには他のエラーがあります。

オプション-Gは、次のことを意味します。

-Grotate_seconds

      指定した場合、-wオプションで指定したダンプファイルを rotate_seconds 秒ごとにローテーションします。保存ファイルは-wで指定された名前を持ち、strftime(3)で定義された時刻形式を含む必要があります。時間形式が指定されていない場合、新しいファイルはそれぞれ以前のファイルを上書きします。

      -Cオプションと組み合わせて使用​​すると、ファイル名は「 file <count>」の形式になります。

あなたが-G 3を書いたので、あなたが述べている間、あなたはこれを3秒ごとに回転させます

... 30分のデータをキャプチャします

また、命名スキームが間違っています:上記から、

-Cオプションと組み合わせて使用​​すると、ファイル名は「 file <count>」の形式になります。

したがって、名前の時間形式を指定しても意味がありません。

さらに、-Cオプションには引数がありませんが、 manページ によれば、次のようになります。

tcpdump [-AdDefIKlLnNOpqRStuUvxX] [-B buffer_size ] [-cカウント]
[-C file_size ] [-G rotate_seconds ] [-F file ] [-I interface ] [- -m module ] [-M secret ] [-r file ] [-s snaplen ] [-T type ] [-w file ] [-W filecount ] [-E spi @ ipaddr algo:secret、... ] [-y datalinktype ] [-z postrotate-command ] [-Z user ] [ expression ]

man page は次のように述べています:

-C

      生パケットを保存ファイルに書き込む前に、ファイルが現在 file_size より大きいかどうかを確認し、大きい場合は、現在の保存ファイルを閉じて新しいファイルを開きます。最初のsavefileの後のSavefileは、-wフラグで指定された名前を持ち、1から始まり、上に向かって番号が続きます。 file_size の単位は数百万バイトです(1,048,576バイトではなく、1,000,000バイト)。

したがって、100 MBのファイルを作成するには、-C 100を指定する必要があります。

最後に、コマンドは次のようになります。

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

これにより、ファイル名(trace1、trace2、...)が周期的に回転し、期間48で、1800秒(= 30分)ごと、または100 MBごとのいずれか早い方に回転します。

13
MariusMatutiae

展開時 flabdabletの答え (変更-G 1800から-G 300 – 5分ごとのローテーション–テスト目的のみ)、

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

%m=month%d=day of month%H=hour of day%M=minute of day%S=second of day%s=millisecond of day、 その結果

/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

これらの厄介な断続的な問題のトレースを整理するのに非常に役立ちます。また、rootでない場合は、Sudoにして、もちろんNohupにすることもできます。

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

必要なのは

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

-Gが-wファイル名で期待するstrftime形式指定子は、完全な日付と時刻を表す必要はありません。そこに%Hと%Mがあり、回転時間がちょうど30分である場合、tcpdumpの特定の呼び出しは、30分間隔で2つの異なる%M値を生成するだけであり、昨日のトレースファイルは、同じ時間が経過すると上書きされますそして分数が再び転がります。

3
flabdablet

いくつかの実験の後、私は@MariusMatutiaeの答えを期待どおりに動作させることができませんでした。時間が制限要因になり、ファイル名に時間形式が追加されなかった場合、現在のpcapファイルは単に上書きされます。

たとえば、次のことを試してください。

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

最終的にはtrace.pcap0繰り返し書き込まれます。

コメントで示唆されているように、ファイル名に時間フォーマットを追加すると、ファイルのリストが増えていくだけです。

したがって、私は単純なサイズ制限のあるファイルを使用する必要がありました。

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

ええ、それは MariusMatutiae's の答えが言うように機能しないようです。

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

-C 100のタイムスタンプが最も早く、100MBよりもはるかに小さいため、httpdebug.pcap03MBファイルを30分間でできるだけ多くキャプチャしているように見えます。 30分のマーク。 30分に達すると、httpdebug.pcap00に戻り、100MBに達すると数値が増加します。これは、30分の間に多くのリクエストがある場合、非常に高いhttpdebug.pcapXXの数値になることを意味します。一定期間内に多くのリクエストに到達しない場合、これらの高いhttpdebug.pcapXXの数値は上書きされません。

だから私はタイムスライスあたりの循環ファイルはタイムスライスが-G 1800であり、-G 1800ごとに循環し、毎回インクリメントすることを意味していると考えています-C 100

-W 48が影響するかどうかはわかりませんが、httpdebug.pcap47に到達すると(カウントが0から始まる場合)、パケットのキャプチャが停止します。


やや最近、紛らわしい言い回しについて GitHubの問題 が公開されました。彼らは実装を変更しませんでしたが、ドキュメントを少しわかりやすくしようとしました。

提案された変更2019年1月28日 に統合されました。

本日、2019年3月17日の時点で、現在のドキュメントは次のとおりです。

-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.

それでも少しわかりにくいと思いますが、上記の私の結論との違いは、-W-C -Gと併用してもファイル名以外には影響しないということです。

一般に、-Wはファイル数を制限するために使用されます。したがって、無期限にキャプチャしたい場合は使用しないでください。

0
dosentmatter