tcpdumpを使って-w
オプションでキャプチャ結果をファイルに保存する際に,
- 一定のファイルサイズ毎
- 一定時間毎
で,保存先のファイルを変更する方法.
一定のファイルサイズ毎
-C
オプションでファイルサイズ(MByte単位)を指定する.1Mbyte毎にローテーションしたい場合は
$ sudo tcpdump -w test.pcap -C 1 -ni eth0
とする.1Mbyteを超える毎に,test.pcap, test.pcap1, test.pcap2, test.pcap3, のように保存先のファイルが変更される.
一定時間毎
-G
オプションで秒数を指定し,-w
で指定する保存先のファイル名にstrftime(3)に準じた時刻情報のフォーマットを含める.60秒ごとにローテーションし,ファイル名に年月日(%F)時分秒(T)を入れたい場合は
$ sudo tcpdump -w test-%F-%T.pcap -G 60 -ni eth0
とする.60秒経過する毎に,test-2014-06-10-10:49:09.pcap, test-2014-06-10-10:50:09.pcap, というファイルができる.
ファイル名に時刻情報のフォーマットが含まれていない場合(-w test.pcap
など)には, ファイルが上書きされる ので注意が必要.
ローテーション後にコマンドを実行
-z
オプションでコマンドを指定すると,ローテーションされたファイルに対してコマンドを実行できる.例えば,ローテーションされたファイルをgzipで圧縮したい場合には
$ sudo tcpdump -w test.pcap -C 1 -z gzip -ni eth0
とすると,ローテーション直後に自動的に
$ gzip test.pcap
が実行される.
-z
オプションで指定するコマンドとして,2つ以上の引数が必要なコマンドや第1引数以外にファイル名を取るコマンドを使いたい場合は,そのコマンドをwrapしたシェルスクリプトなどを作り,そのスクリプトを-zで実行する必要がある.