Python - 检测远程计算机是否已打开

时间:2013-07-16 17:06:50

标签: python udp heartbeat

所以,我有一个Python应用程序,但我想知道计算机(运行该应用程序)是否已打开,来自另一台远程计算机。

有没有办法做到这一点?我正在考虑使用UDP数据包,使用计数器发送某种保持活动状态。防爆。客户端每隔5分钟向服务器发送一个UDP“keep-alive”数据包。提前谢谢!

5 个答案:

答案 0 :(得分:20)

如果您的目标实际上是测试特定服务是否在远程计算机上运行,​​则可以测试是否可以运行此服务应运行的网络端口。例如:

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
    s.connect(('hostname', 22))
    print "Port 22 reachable"
except socket.error as e:
    print "Error on connect: %s" % e
s.close()

如果您要测试的应用程序旨在运行,例如端口1337,然后检查此端口。

答案 1 :(得分:4)

首先,您应该知道没有标准方法来确定计算机是否打开,这不依赖于语言/平台。计算机可以伪造您尝试检查的任何状态。

但检查计算机是否开启的常用方式正在发送Ping(ICMP Echo请求)。 This answer显示了如何使用Python发送Ping。

答案 2 :(得分:0)

您正在寻找的是网络/主机监控工具,或者只是一个简单的心跳监控器。根据具体情况(如要监控的主机数量),Nagios,Munin或Heartbeat等内容可能有所帮助。

答案 3 :(得分:0)

是的,这就是要走的路。有点像发送心跳ping。由于它的UDP和它只是一个标题消息,你可以减少频率说10秒。这不应该导致任何可测量的系统性能降低,因为我们正在谈论它只有两个系统。

我觉得,与TCP相比,UDP可能更好。它轻巧,不消耗大量系统资源,理论上更快。下行可能会丢包。您可以通过放置一些逻辑来规避这种情况,例如当没有连续接收10个数据包(间隔10秒)时,则声明另一个系统无法访问。

答案 4 :(得分:0)

在您的应用中添加网络服务器。

http://www.tornadoweb.org/en/stable/ http://webpy.org/