【问题标题】:How to schedule tcpdump to run for a specific period of time?如何安排 tcpdump 在特定时间段内运行?
【发布时间】:2014-09-08 19:25:16
【问题描述】:

每次手动运行tcpdump时,我都必须使用Ctrl+C来停止它。现在我想用 cronjob 安排我的tcpdump,我只需要它运行 1 个半小时。不手动运行Ctrl+C或者kill命令,怎么能自动停止呢?这是我正在测试的命令:

tcpdump -i eth0 'port 8080' -w  myfile

我可以安排另一个 cronjob 来终止 tcpdump 进程,但这似乎不是一个好主意。

【问题讨论】:

标签: linux tcpdump


【解决方案1】:

您可以结合 -G {sec}(每 x 秒旋转转储文件)和 -W {count}(限制转储文件数)来获得您想要的:

tcpdump -G 15 -W 1 -w myfile -i eth0 'port 8080'

会运行 15 秒然后停止。将 1.5 小时变为秒,它应该可以工作。

【讨论】:

  • 注意:如果您没有收到任何流量,则此技巧无效。
  • 是的,tcpdump 在收到数据包之前不会旋转、关闭或以其他方式执行任何操作。
  • 使用:-w myfile-%Y-%m-%d_%H.%M.%S。使用-w myfile,tcpdump 将在指定秒数后继续覆盖同一个文件。您必须提供具有strftime 指定时间格式的文件名以避免覆盖。
【解决方案2】:

你可以使用超时

timeout 5400 tcpdump -i eth0 'port 8080' -w myfile

【讨论】:

  • 这样看起来更简单更高效。
  • timeout 90m 更舒适。
  • 这个更安全,因为如果该接口没有流量,tcpdump -G 将无限期运行。
【解决方案3】:

你可以这样做:

tcpdump -i eth0 'port 8080' -w  myfile & 
pid=$!
sleep 1.5h
kill $pid

【讨论】:

  • 如果你有单个tcpdump实例,可以使用pkill tcpdump
【解决方案4】:

在 Ubuntu 14.04 上最适合我的方法

sudo -i
crontab -e

然后添加一行

30 17 * * * /usr/sbin/tcpdump -G 12600 -W 1 -s 3000 -w /home/ubuntu/capture-file.pcap port 5060 or portrange 10000-35000

注意事项

  • -G 标志表示转储运行的秒数,此示例每天从下午 5:30 到晚上 9:00 运行
  • -W 是 tcpdump 将执行的迭代次数
  • 在您保存并退出文件之前,不会添加 Cron 作业
  • 此示例用于捕获 Asterisk 电话服务器的数据包

【讨论】:

    【解决方案5】:

    你可以使用

    watch tcpdump -i eth0 'port 8080' -w  myfile
    

    这将每 2 秒运行一次。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-24
      • 2020-09-21
      • 2013-11-27
      • 1970-01-01
      • 2017-12-13
      • 1970-01-01
      相关资源
      最近更新 更多