在循环中运行tcpdump

时间:2018-06-04 21:15:03

标签: bash tcpdump

我想运行一个脚本,使用tcpdump和ping来捕获来自服务器的流量。

我希望它启动tcpdump,暂停,ping一个端点,睡眠X秒,然后重复该过程。但我想让它在每次ping之间启动和停止tcpdump。我认为下面的代码可以工作,但是在单次ping之后它会跳出循环?

为什么会这样?

#!/bin/bash

#start a process in the background (it happens to be a TCP HTTP sniffer on  the loopback interface, for my apache server):

for i in {1...4}
do
        tcpdump host 8.8.8.8  -ttt &
        sleep 1
        ping -I eth0 8.8.8.8 -c 1

        #.....other commands that send packets to tcpdump.....
        sleep 1
        pkill tcpdump
done

1 个答案:

答案 0 :(得分:3)

问题在于您的范围 - 您有一段额外的时间。因此,您只需使用字符串{1...4}而不是1 2 3 4循环一次。

您可以将代码编写为:

#!/bin/bash
for i in {1..4}
do
  tcpdump host 8.8.8.8 -ttt &
  sleep 1
  ping -I eth0 8.8.8.8 -c 1
  sleep 1
  kill "$!"                      # kill the background process
done