如何安排tcpdump在特定时间段内运行?

Gar*_*ary 32 linux tcpdump

每次,当我手动运行时tcpdump,我必须使用Ctrl+ C来停止它.现在我想安排我tcpdump的cronjob,我只需要它运行1个半小时.无需手动运行Ctrl+ C或kill命令,如何自动停止?这是我正在测试的命令:

tcpdump -i eth0 'port 8080' -w  myfile
Run Code Online (Sandbox Code Playgroud)

我可以安排另一个cronjob来杀死这个tcpdump过程,但这似乎不是一个好主意.

Pau*_*bel 49

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

tcpdump -G 15 -W 1 -w myfile -i eth0 'port 8080'
Run Code Online (Sandbox Code Playgroud)

将运行15秒然后停止.转1.5小时到秒,它应该工作.

  • 注意:如果您没有收到任何流量,此技巧不起作用. (28认同)
  • 使用:`-w myfile-%Y-%m-%d_%H.%M.%S`。使用“-w myfile”,tcpdump 将在指定的秒数后继续覆盖同一文件。您必须提供由“strftime”指定的时间格式的文件名,以避免覆盖。 (3认同)

小智 36

你可以使用超时

timeout 5400 tcpdump -i eth0 'port 8080' -w myfile
Run Code Online (Sandbox Code Playgroud)

  • “超时90m”对眼睛来说更容易。 (4认同)

kiw*_*san 17

你可以这样做:

tcpdump -i eth0 'port 8080' -w  myfile & 
pid=$!
sleep 1.5h
kill $pid
Run Code Online (Sandbox Code Playgroud)


Rya*_*ley 5

在 Ubuntu 14.04 上最适合我的方法

sudo -i
crontab -e
Run Code Online (Sandbox Code Playgroud)

然后添加行

30 17 * * * /usr/sbin/tcpdump -G 12600 -W 1 -s 3000 -w /home/ubuntu/capture-file.pcap port 5060 or portrange 10000-35000
Run Code Online (Sandbox Code Playgroud)

笔记

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