2013-07-16 39 views
7

因此,我有一个Python应用程序,但我想知道是否从另一台远程计算机启动了计算机(正在运行该应用程序)。Python - 检测远程计算机是否打开

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

+0

我认为你的想法是正确的,你到目前为止尝试过什么? –

+2

标题有误导性,或者只是想检测应用程序是否正在运行。如果以后那么任何类型的ping都会执行。 – Ma3x

+0

我同意w/@Ma3x,这个问题真的没有太多的w/Python。 – Sabuncu

回答

0

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

0

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

我觉得在这里,UDP可能比TCP更好。它的轻量级,不消耗大量系统资源,理论上更快。下行将会出现丢包现象。你可以通过加入一些逻辑来避开这种情况,例如当连续接收到10个数据包(间隔10秒)时,则声明另一个系统不可达。

+0

嘿,那是我的回答:) –

3

首先,您应该知道没有标准的方法来确定计算机是否处于开启状态,并且这不是语言/平台相关的。一台电脑可以伪造你想要检查的任何状态。

通常的方式检查计算机是否正在发送Ping(ICMP回声请求)。 This answer演示了如何使用Python发送Ping。

17

如果你的目标实际上是测试特定服务是否在远程机器上运行,你可以测试是否该服务应该运行的网络端口可达。示例:

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,然后检查此端口。

+0

对于Windows机器不工作 –