这绝对不是重复的。在
我正在做一个应用程序,我需要找到我的设备的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命令可以立即列出所有连接到本地网络的设备,那就足够了。。。但我没有找到这样的东西。
我做错什么了吗?你能给我指路吗?在
提前谢谢