如何加快离线机器的检测?

我想检测一台关机机器,因为我发现机器上没有任何服务。 例如:

$ time telnet 192.168.1.140 80 # An existing machine, no service Trying 192.168.1.140... telnet: connect to address 192.168.1.140: Connection refused telnet: Unable to connect to remote host: Connection refused real 0m0.003s user 0m0.001s sys 0m0.001s 

所以需要3毫秒才能找出这个现有的机器上没有服务。 但是当我执行:

 $ time telnet 192.168.1.222 80 # This machine is shutdown Trying 192.168.1.222... telnet: connect to address 192.168.1.222: No route to host telnet: Unable to connect to remote host: No route to host real 0m3.017s user 0m0.001s sys 0m0.001s 

需要3秒钟才能确定这台机器正在关机。 服务testing时间的1000倍。

有没有办法缩短这个延迟?

您可以使用ping超时一秒(-W),但只有在所有相关主机都能正常应答ping的情况下才能使用ping。 否则,在本地networking上,你可以发出ARP请求,这通常是非常快的答案,但我不知道有一个程序,这是一个可configuration的超时(arping不提供超时)。 然而,为此目的创build一个小脚本不应该太困难。

编辑:关于这个的一些额外的评论:首先,我不相信你的问题存在一个通用的解决scheme。 Telnet只能通知你有关被拒绝的连接如此之快,因为目标主机告诉它在80端口上没有任何东西。如果你要在目标上configuration防火墙来静默地丢弃80端口的所有数据包,那么telnet需要在超时之前因为它需要一个离线主机。 第二:你可以用上面提到的方法或多或less地解决这个问题,但这是不可靠的,因为在负载较重的主机上,ping和arp的响应时间可能相当长。

为什么你需要这个快速的离线检测?

如果你通过主机名而不是IP地址进行远程login,它不会更快解决吗? 路由器应该认识到主机不存在并立即断开连接。