如何使用 ping 命令设置短暂的超时时间?

如何使用 ping 命令设置短暂的超时时间?

我正在尝试编写一个脚本,列出我的 LAN 上的所有主机(大约有 20 个),并在每个主机旁边写上 ping 状态。我有 DHCP 租约文件,所以我有所有的 IP(例如,10.0.0.1、10.0.0.2 等),我需要的只是每个主机的 ping 状态。

因此,我的脚本为每个主机启动一次 ping:

ping -c 1 10.0.0.1

不幸的是,当主机离线时,ping 需要很长时间才能超时。我检查了man ping,似乎有两个选项可以设置超时延迟:-w deadline-W timeout。我想我对后者感兴趣。

所以我尝试了这个:

ping -c 1 -W 1 10.0.0.1

但是每个离线主机等待一秒钟仍然太长了。我尝试将其设置为一秒以下,但它似乎根本没有考虑这个参数:

ping -c 1 -W 0.1 10.0.0.1  # timeout option is ignored, apparently

有没有办法将超时设置为较低的值?如果没有,还有其他选择吗?

编辑

  • 操作系统是 Debian Lenny。
  • 我尝试 ping 的主机实际上是接入点。它们与用户位于同一 VLAN 和子网中(为了简化部署和替换)。这就是为什么我不想扫描所有子网(例如ping -b)。

编辑#2

我接受了这个fping解决方案(感谢所有其他答案)。这个命令正是我想要的:

fping -c1 -t500 10.0.0.1 10.0.0.2 10.0.0.3 10.0.0.4

此命令最多需要 500 毫秒才能完成,并同时提供所有主机的 ping 状态:

10.0.0.1 : [0], 84 bytes, 5.71 ms (5.71 avg, 0% loss)
10.0.0.2 : [0], 84 bytes, 7.95 ms (7.95 avg, 0% loss)
10.0.0.3 : [0], 84 bytes, 16.1 ms (16.1 avg, 0% loss)
10.0.0.4 : [0], 84 bytes, 48.0 ms (48.0 avg, 0% loss)

10.0.0.1 : xmt/rcv/%loss = 1/1/0%, min/avg/max = 5.71/5.71/5.71
10.0.0.2 : xmt/rcv/%loss = 1/1/0%, min/avg/max = 7.95/7.95/7.95
10.0.0.3 : xmt/rcv/%loss = 1/1/0%, min/avg/max = 16.1/16.1/16.1
10.0.0.4 : xmt/rcv/%loss = 1/1/0%, min/avg/max = 48.0/48.0/48.0

在 Debian Lenny 上,安装很简单:

aptitude update
aptitude install fping

答案1

可能比你正在使用的股票 ping 更好。你使用的是什么操作系统?

  • “fping 与 ping 的不同之处在于,您可以在命令行上指定任意数量的目标,或者指定包含要 ping 的目标列表的文件。”
  • “fping 不会一直向一个目标发送消息直到它超时或回复,而是会发送一个 ping 数据包并以循环方式转到下一个目标。”
  • “与 ping 不同,fping 旨在用于脚本,因此其输出设计为易于解析。”

例子:

fping -c1 -t500 10.0.0.1 10.0.0.2 10.0.0.3 10.0.0.4
  • -c发送到每个目标的请求数据包的数量。
  • -t初始目标超时(以毫秒为单位)

答案2

对于寻求涉及的解决方案的人ping,请使用-i开关。

ping -i 0.2 www.google.com

或者,如果你想使用 0.1,你需要以 root 身份运行它

sudo ping -i 0.1 www.google.com

无需下载额外的实用程序。

答案3

timeout您可以使用Ubuntu/Debian 上的命令设置短暂的超时:

timeout 0.2 ping -c1 fqdn || { do_work }

答案4

使用-w切换,在 Windows 和 Debian 上都是如此。

这是一种快速检查机器是否响应的方法,假设机器将在少于指定的秒数内做出响应。

ping -w 1 192.168.80.105

PING 192.168.80.105 (192.168.80.105) 56(84) bytes of data.

--- 192.168.80.105 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 999ms

相关内容