我正在尝试编写一个脚本,列出 LAN 上的所有主机(大约有 20 个)并在每个主机旁边写入 ping 状态。我有 DHCP 租约文件,所以我有所有的 IP(比如 10.0.0.1、10.0.0.2 等),我需要的只是每个主机的 ping 状态。
因此,我的脚本为每个主机启动一个 ping:
ping -c 1 10.0.0.1
Run Code Online (Sandbox Code Playgroud)
不幸的是,当主机离线时,ping 需要很长时间才能超时。我查了一下man ping,似乎有两个选项可以设置超时延迟:-w deadline和-W timeout。我想我对后者感兴趣。
所以我试过这个:
ping -c 1 -W 1 10.0.0.1
Run Code Online (Sandbox Code Playgroud)
但是每个离线主机等待一秒钟仍然太长。我试图将其设置为低于一秒,但它似乎根本没有考虑该参数:
ping -c 1 -W 0.1 10.0.0.1 # timeout option is ignored, apparently
Run Code Online (Sandbox Code Playgroud)
有没有办法将超时设置为较低的值?如果没有,是否有其他选择?
编辑
ping -b例如)。编辑 #2
我接受了fping解决方案(感谢所有其他答案)。这个命令完全符合我的要求:
fping -c1 -t500 10.0.0.1 10.0.0.2 10.0.0.3 10.0.0.4
Run Code Online (Sandbox Code Playgroud)
此命令最多需要 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
Run Code Online (Sandbox Code Playgroud)
在 Debian Lenny 上,安装很简单:
aptitude update
aptitude install fping
Run Code Online (Sandbox Code Playgroud)
小智 52
对于寻找涉及 的解决方案的人ping,请使用-i开关。
ping -i 0.2 www.google.com
Run Code Online (Sandbox Code Playgroud)
或者,如果您想使用 0.1,则需要以 root 身份运行它
sudo ping -i 0.1 www.google.com
Run Code Online (Sandbox Code Playgroud)
无需下载额外的实用程序。
Jor*_*ell 27
您可以timeout在 Ubuntu/Debian 上使用以下命令设置短超时:
timeout 0.2 ping -c1 fqdn || { do_work }Run Code Online (Sandbox Code Playgroud)
小智 7
在 Windows 和 Debian 上使用-w开关。
这是一种检查机器是否完全响应的快速方法,假设它会在小于指定秒数的时间内做出响应。
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
Run Code Online (Sandbox Code Playgroud)
如果您的所有主机都在物理 LAN 上,您可能需要查看 arp ping 工具。它执行相同的操作,但使用第 2 层 arp 数据包来执行“ping”。您可以结合使用 arpping 和 icmp ping(或者实际上是 tcp ping)来收集失败原因。示例是 tcp 堆栈崩溃,虽然现在很少见,但我们可以发现机器 tcp 堆栈是否崩溃,因为机器不会响应 ping,但它会响应 arp(这是主机上的另一段代码) 。
结合使用 arpping、tcpping 和 icmp ping,您可以查明计算机上的服务是否已崩溃、tcp 堆栈是否已崩溃,或者计算机是否已完全锁定。如果您有托管以太网交换机,您可以获得物理链路数据,显示机器是否实际打开,或已物理拔出。我们遇到过这样的情况:机器(公共房间中的客户端)将被关闭,我们收集该数据并发送唤醒 LAN 数据包,以启动机器。:-)
无论您构建什么解决方案,如果您的网络繁忙,请考虑实施某种 QoS,以便您的监控数据包在网络上优先,由于网络拥塞而丢失测量数据包可能会发出错误警报。如果确实使用服务质量来监控数据包,那么您需要考虑收集有关网络利用率的数据。
因此,您可以根据需要使监控解决方案变得复杂或简单。我们发现即使是最基本的监控系统也是朝着正确方向迈出的一步,至少有一些管理员正在密切关注机器:-)。
祝你好运!
小智 5
@jordon-bedwell 有一个很好的建议。
@laszlo-valko /sf/ask/1425164121/解释说 ping 超时仅在确定 IP 地址后才开始。如果您使用 DNS 并且您的工作站处于离线状态,则 ping 无法确定 IP 地址,因此在返回 false 之前似乎会等待大约默认的 20 秒以上。
当使用域名运行 ping 时,使用 Linux“超时”工具可以提供更多控制。
多谢你们
| 归档时间: |
|
| 查看次数: |
231893 次 |
| 最近记录: |