平台/版本独立的方式来找到我的Linux中的所有接口的IP地址只使用标准库
问题描述:
我不想使用ifconfig
,因为输出在所有发行版中都不相同:我想要一致的方式来查找所有接口的IP地址。平台/版本独立的方式来找到我的Linux中的所有接口的IP地址只使用标准库
我打算通过解析/proc/net/dev
然后使用接口名称使用siocgifconf ioctl找到here找到IP地址来获取接口名称。但也有人说,不是在所有版本的Linux上工作。
我在找东西,不使用任何非默认Python库像netifaces
。据说ioctl不适用于所有Linux版本。
答
可以使用netifaces
包可使用easy_install
安装:
from netifaces import interfaces, ifaddresses, AF_INET
for ifaceName in interfaces():
addresses = [i['addr'] for i in ifaddresses(ifaceName).setdefault(AF_INET, [{'addr':'No IP addr'}])]
print '%s: %s' % (ifaceName, ', '.join(addresses))
答
如果你的问题是:“如何让我的电脑的所有IP地址”,我会回答
>>> import socket
>>> socket.gethostbyname_ex(socket.gethostname())
('strauch', [], ['172.16.0.100', '192.168.157.1', '192.168.60.1'])
它不能告诉接口,但使用它们全部。
+1
但它只显示环回IP,它没有显示我的接口IP是192.168.1.3。 – Nikhil
可能的重复http://stackoverflow.com/questions/6243276/how-to-get-the-physical-interface-ip-address-from-an-interface(它也有一个链接到另一个可能的愚蠢! ) – AlG
@AIG我正在寻找一些不使用任何非标准库的东西。据说ioctl不适用于所有Linux版本,所以它不是一个重复的问题。 – Nikhil
我不明白你将如何比'netifaces'好得多,它看起来好像是为了做你想做的事情而明确创建的:独立于平台。如果您最喜爱的发行版不适用于此,那么如何提交问题/拉取请求? –