在我的网络中,我有一台 Linux 主机作为默认网关,位于 192.168.150.1。在另一台主机 192.168.150.4 上,我有此脚本来测量发送 arp 请求和接收请求之间的时间:
#!/usr/bin/env bash
for i in $(seq 30 $END); do
sudo ifconfig enp3s0 up
sleep 5s;
arping -I enp3s0 -c 1 192.168.150.1
echo $(date +%s.%5N) | tee -a ./ifuptimes.txt;
sleep 55s;
sudo ifconfig enp3s0 down;
sleep 1m;
done;
奇怪的是,当在脚本中发送 arping 时,192.168.150.1 处的目标只会偶尔响应,而在终端中手动运行它时每次都会得到响应。为什么会发生这种情况?我该如何修复它?
答案1
事实证明,启用接口和发送 arp 请求之间的 5 秒间隔不足以使接口准备就绪(我的经验测试显示大约需要 10 秒)。增加间隔可使脚本正常工作。
答案2
我有这个脚本来测量发送 arp 请求和接收 arp 请求之间的时间
也许最好启动 wireshark(或 tcpdump),删除 arp 表并运行 arping。在 wireshark 中,您可以看到 arp 请求和 arp 响应,包括时间。
我希望这可以帮助你。
为什么要断开以太网接口并循环运行?
我猜测问题是由于 ifup 太慢或者类似情况(DHCP,...)。
为什么不是“cron”或“at”或“watch”?