tcpdumpのキャプチャ時間を指定する
はじめに
ネットワークのトラブルシューティングやパケットの流れを追うときに使用するtcpdumpだが、 通常実行時はscript等で制御していない限りキャプチャを実行し続ける。
どうせならコマンドオプションで実行時間を指定できないかと思い調べた。
(終了するのを忘れてpcapファイルが肥大化してたとか避けたい。。)
結論
-W
オプションと -G
オプションというtcpdumpのログローテートオプションを使用することによって実現可能。
-W
はログローテートの実行回数、-G
はログローテートの実行間隔を指定する。
例えばeth0に流れるすべてのパケットを60秒間キャプチャして、pcapファイルに保存したい場合は以下のようにする。
# tcpdump -i eth0 -w ./test.pcap -W1 -G60
ローテート回数を1回、間隔を60秒に指定している。よって実行時間が60秒に達した時点でローテートが実施されコマンドが終了する。 (基本的にファイルを分割して保存したいとかなければ、ローテート回数は1回で良いと思う)
あとがき
さらに調べたところcronでtcpdumpを実行する際に timeout
コマンドで実行時間を指定している方がいた。
秒数以外の値を何も指定しない場合は TERM
シグナルで引数で指定しているコマンドを終了させるので、この方法も良さそう。
(この方法のほうが楽のような気がしてきた。)