その手の平は尻もつかめるさ

ギジュツ的な事をメーンで書く予定です

定期的にtcpdumpをある期間だけ実行したいという時

tcpdumpの提供する-Wオプションと-Gオプション,ならびにcrontabを併用するといける.

tcpdumpの-Wオプションはログローテーションを行う回数で,-Gはそのローテーション期間を秒数で指定できる.
例えば

$ tcpdump -w ./%Y%m%d%H%M%S.pcap -W1 -G60

などとやると,ログローテーション1回,ローテーション期間は60秒となるので,つまり60秒tcpdumpを実行した後にexitする (ローテーション1回指定なので).
ちなみに-wオプションで指定するファイル書き出し先についてはstrptimeと同じフォーマットが利用できるのでこういう時に便利.

あとはcrontabでこのコマンドを仕込んでやるとOK (id:hirose31さんから「crontabでは%をエスケープする必要がある」との指摘があり修正しました).

55 * * * * tcpdump -w /var/pcap/\%Y\%m\%d\%H\%M\%S.pcap -W1 -G600

例えば上記のようなcrontabを書いてやると,毎時55分にtcpdumpを起動して,そこから10分間キャプチャを取る,ということができる.

シナリオとして「毎時0分付近のリクエストの失敗が多い」という問題の調査を行うときなんかに,こういったcronを仕込んでおくと,サクッと欲しい部分のパケットだけ解析できるようになるし,何より不要なパケットキャプチャでディスク容量を食わなくて良い.