我有一个功能,目前通过这样做对同一网络中的远程机器进行快速 ping 操作:
ping -n 1
然后,它评估命令是否成功(1 或 0)以确定机器是否已打开电源。
似乎这种方法无法正常工作,因为只有当我尝试 ping 的 IP 的 DNS 解析失败时,我才能从 ping 中得到 1。在任何其他情况下,ping 似乎都会返回零(即使机器确实已关闭),因为它似乎自行回环。
有人有什么好的选择吗?我正在考虑使用 telnet,但这可能需要很长时间才能超时,而我想要最好的性能。
答案1
ICMP 数据报为 32 位,您无需建立任何连接(例如,与使用 TCP 时不同)。正如某些人所说,DNS 与将其定向到 IP
无关,ARP 才是那里工作/失败的那个。ping
使用简单的ping
(我不会只 ping 一次)并具有静态 ARP 映射(如@EEAA 所述)或在检查任何内容之前填满服务器的 ARP 缓存,这样当您的交换机询问谁拥有正在 ping 的 IP 的 MAC 地址时就不会出现延迟(并且可能导致故障)
答案2
首先,导致第一次 ping 失败的不是 DNS 解析,而是 ARP 解析。
第二,增加 ping 次数。这是每个商业和 F/OSS 监控系统所做的。