在Python中检查远程主机是否在线

14 投票
7 回答
57098 浏览
提问于 2025-04-15 20:58

我怎么能在没有端口号的情况下检查远程主机是否在线呢?除了用普通的ping命令,还有其他方法吗?

有可能远程主机会丢掉ping的数据包。

7 个回答

3
HOST_UP  = os.system("ping -c 5 " + SOMEHOST.strip(";")) == 0

为了去掉那些讨厌的脚本执行,只需要加上 .strip(";") 这个命令。

-c 5 

如果想增加 ping 请求的数量,所有请求都通过的话就返回 True。

注意:这个方法只在 Linux 系统上有效,在 Windows 系统上总是返回 True。

3

最好的方式是进行协议层面的PING,也就是连接到服务器并与之互动,但不进行实际的工作。这样做的原因是,这才是唯一能真正确认服务是否正常的方法。单纯的ICMP ECHO(也就是我们常说的ping)只能告诉你对方的网络接口是否正常,即使这样也可能被阻挡。顺便说一下,我见过一些机器,所有用户进程都崩溃了,但仍然可以被ping通。在现在这个应用服务器的时代,光是建立网络连接可能还不够;如果托管的应用程序宕机或者其他原因无法使用呢?正如我所说,直接与您关心的实际服务进行互动,是最好的、最可靠的方法。

21

这个对我来说很好用:

import os
SOMEHOST = 'localhost'

HOST_UP  = os.system(f"ping -c 1 {SOMEHOST}") == 0

注意:

  • 正如评论中提到的,SOMEHOST 这个变量不应该来自任何可能有恶意的输入。

撰写回答