运行 tcpdump 循环
Run tcpdump in a loop
我想要 运行 一个使用 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...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
我想要 运行 一个使用 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...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