使用python

时间:2018-08-25 15:41:46

标签: python raspberry-pi device hostname local-network

这绝对不是重复的。

我正在做一个应用程序,我需要找到我设备的IP。我知道他们的名字,我需要通过他们的名字获得他们的IP。 Linux应该很简单,但是我需要跨平台的态度,因此我使用python。

我已经知道解决方法:

import socket
socket.gethostbyname('pc_name')

如果我知道解决方案,为什么要问?好吧,请给我一点时间,因为我没有得到稳定的结果。

情况: 我需要找到几个具有相同主机名的树莓派的IP-可以说:

Raspberry pi device 1: Hostname: 'MyPi', Local IP: 10.0.0.33

Raspberry pi device 2: Hostname: 'MyPi', Local IP: 10.0.0.34

Raspberry pi device 3: Hostname: 'MyPi', Local IP: 10.0.0.35

所以根据套接字文档(如果我没看错),

socket.gethostbyname('MyPi') 

仅返回一个IP,但是

socket.gethostbyname_ex('MyPi') 

应返回特定主机名的所有IP。

我模拟了家里的情况,结果令人非常不满意。 我将树莓派称为Android手机:“ Galaxy-J5-2016”。为了确保我尝试通过地址找到它们:

>>> socket.gethostbyaddr('10.0.0.33')
('Galaxy-J5-2016', [], ['10.0.0.33'])
>>> socket.gethostbyaddr('10.0.0.34')
('Galaxy-J5-2016', [], ['10.0.0.34'])

好,它们存在。当我在写本文之前对其进行测试时,如果搜索

,我什至得到一个结果
socket.gethostbyname('Galaxy-J5-2016')

现在,即使我尝试也找不到任何东西

socket.gethostbyname_ex('Galaxy-J5-2016')

以上两个命令只是等待而没有响应,然后对此进行响应:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
socket.gaierror: [Errno 11001] getaddrinfo failed

发生了另一种现象:当我在工作笔记本电脑上尝试最后提到的命令时(即使我的工作PC不与任何其他计算机共享主机名),

>>> socket.gethostbyname_ex('WORK_PC.DOM1.DOM2')
('WORK_PC.DOM1.DOM2', [], ['172.xx.xx.1', '10.0.xx.1', '172.xx.xx.241', 
 '192.xx.xx.1', '192.xx.xx.1', **'10.0.0.41'**])
有趣的是, 10.0.0.41 是我的WORK PC现在在家中拥有的本地IP地址(其余似乎是我工作中的网络)。

换句话说::我有两台具有相同主机名的机器,但得到零或只有一个IP地址,而我的工作PC只是一台机器,而我却获得了同一台机器的多个IP,这些IP可以说甚至不是来自实际的本地网络)

PS(如果您会建议我使用“ arp -a”):通用命令“ arp -a”无用,因为它显示了最近与命令机联系的所有本地IP。因此,我需要ping特定设备以查看在arp -a命令中列出的设备。

PS2:另外,我也不需要任何需要通过所有IP的解决方案。此解决方案非常慢,因为ping不存在的IP将导致几秒钟的超时。 255 IP +超时不好。

老实说,如果存在python命令立即列出所有连接到本地网络的设备,它就足够了……但是我没有找到类似的东西。

我做错什么了吗?你能指导我吗?

预先感谢

0 个答案:

没有答案