如何发现不同子网上的硬件?

时间:2014-04-08 15:34:21

标签: python udp gevent subnet

我正在使用Python来发现使用UDP广播连接到网络的硬件的实用程序。设备响应UDP boradcast,并从那里定期查询他们的板载web服务器以获取数据文件。在做了一些研究之后,我意识到看起来不可能从不同子网上的设备广播和接收响应。我无法访问路由器来更改配置,也无法保证广播能够通过。

我看过this SO question/answer提到ip-multicasting但我不确定它是否适用于我,因为据我所知,这些设备无法加入多播组(至少这是我的理解ip-multicasting如何工作)。

我建议的解决方案是使用像gevent这样的库来轮询用户定义的IP地址范围或子网上所有用于设备数据文件的IP。这显然需要一些时间,但不必经常运行,可能每周或每月一次。

所以,从我的稀疏描述来看,我提议的可能是唯一的方法吗?或者有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

在我看来,这更像是一个网络问题,而不是一个蟒蛇问题。

你不能通过广播来访问它们,因为你不在那个网络上,这样做的配置至少似乎不安全。

但是您可以为子网中的每个主机生成单独的消息。如果子网类似于192.168.1.0/24(/ 24 与255.255.255.0相同),则应向以下每个主机发送消息:

for i in range(1, (2<<(31-**24**)) - 1):
     print "192.168.1." + str(i)

通过这种方式,您可以为子网中的每个可能主机生成单播包。可以在线找到为子网生成IP地址的更一般规则。

答案 1 :(得分:0)

一种方法是维护可从所有其他对等端访问的对等端上的硬件列表。例如如果所有其他对等方都具有Internet连接,则可以在Internet上访问对等方。当对等体连接到可从所有其他对象访问的对等体时,它的IP端点将被知道并且可以被注册。然后其他同行可以要求列出已注册的同伴。