Site cover image

Site icon imagePlug me in

学習した内容や趣味のアウトプット場

⏱️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 シグナルで引数で指定しているコマンドを終了させるので、この方法が一番シンプルな印象です。 (この方法のほうが楽のような気がしてきた。)

参考文献