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命令可以立即列出所有連接到本地網絡的設備,那就足夠了。。。但我沒有找到這樣的東西。
我做錯什么了嗎?你能給我指路嗎?在
提前謝謝
總結
以上是生活随笔為你收集整理的python 局域网 主机名_使用python获取连接到本地网络(基于主机名)的所有设备的ip...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php crypt mysql pass
- 下一篇: 一元钱硬币值多少钱啊?