python 局域网 主机名_使用python获取连接到本地网络(基于主机名)的所有设备的ip...

这绝对不是重复的。在

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

我已经知道解决方案:import socket

socket.gethostbyname('pc_name')

如果我知道答案,为什么我要问?给我一点时间,因为我得不到稳定的结果。在

情况:

我需要找到几个具有相同主机名的覆盆子pi的IP地址,比如:

^{pr2}$

所以根据socket文档(如果我没看错的话)socket.gethostbyname('MyPi')

但是,只返回一个IPsocket.gethostbyname_ex('MyPi')

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

我在家里模拟的情况和结果都很不满意。

我把我的raspberry pi称为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 "", line 1, in

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是我的工作电脑现在在家里的本地ip地址(其余的似乎是我工作时的网络)。在

换言之:我有两台主机名相同的机器,我的IP地址为零或只有一个,而我的工作电脑只有一台机器,我得到同一台机器的多个IP,可以说这些IP甚至不是来自实际的本地网络)

PS(万一你会建议我‘arp-a’):通用命令‘arp-a’是无用的,因为它显示最近与命令机联系的所有本地IP。所以我需要ping特定的设备来查看arp-a命令中列出的设备。

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

老实说,如果有python命令可以立即列出所有连接到本地网络的设备,那就足够了。。。但我没有找到这样的东西。

我做错什么了吗?你能给我指路吗?在

提前谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值