我想运行一个脚本,使用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
答案 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