我有一个 Web 应用程序,它运行数千个 IP 地址并检查它们是否在线。基本上,如果服务器响应时间超过 250 毫秒,在我们的情况下,它就被视为离线。如果我们可以让 ping 命令在大约 300 毫秒后放弃,而不是 -W 参数的最小值 1 秒,那么将节省大量时间。
答案1
发现了一个类似的问题,答案是 ping 的替代方案,称为 fping。也许它会对你有用。 https://serverfault.com/questions/200468/how-can-i-set-a-short-timeout-with-the-ping-command
答案2
从 ping 的手册页来看,-o 似乎只发送 1 个数据包......
ping -W 250 -o
这应该会返回得更快,-W 参数以毫秒为单位,因此应该发送 1 个数据包并仅等待 250 毫秒即可获得响应。
编辑你确定吗?:
$ ping -W 250 -o google.com
PING google.com (74.125.224.178): 56 data bytes
64 bytes from 74.125.224.178: icmp_seq=0 ttl=51 time=18.850 ms
--- google.com ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 18.850/18.850/18.850/0.000 ms
答案3
在 Mac Maverick 上运行。在 39 秒内 ping 256 个地址,即 151ms/ping。
$cat netcheck
i=255
while
test $i -ge 0
do
address=192.168.1.$i
if
ping -i .1 -c 1 -W 50 $address > /dev/null
then
echo $address
fi
let i=$i-1
done
$time ./netcheck
192.168.1.255
192.168.1.254
192.168.1.241
192.168.1.216
192.168.1.174
192.168.1.148
192.168.1.108
192.168.1.102
192.168.1.0
real 0m38.653s
user 0m0.369s
sys 0m0.616s
$