平台/版本独立的方式来找到我的Linux中的所有接口的IP地址只使用标准库

问题描述:

我不想使用ifconfig,因为输出在所有发行版中都不相同:我想要一致的方式来查找所有接口的IP地址。平台/版本独立的方式来找到我的Linux中的所有接口的IP地址只使用标准库

我打算通过解析/proc/net/dev然后使用接口名称使用siocgifconf ioctl找到here找到IP地址来获取接口名称。但也有人说,不是在所有版本的Linux上工作。

我在找东西,不使用任何非默认Python库netifaces。据说ioctl不适用于所有Linux版本。

+1

可能的重复http://*.com/questions/6243276/how-to-get-the-physical-interface-ip-address-from-an-interface(它也有一个链接到另一个可能的愚蠢! ) – AlG

+0

@AIG我正在寻找一些不使用任何非标准库的东西。据说ioctl不适用于所有Linux版本,所以它不是一个重复的问题。 – Nikhil

+0

我不明白你将如何比'netifaces'好得多,它看起来好像是为了做你想做的事情而明确创建的:独立于平台。如果您最喜爱的发行版不适用于此,那么如何提交问题/拉取请求? –

可以使用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)) 
+0

感谢您的答案,但我不想使用非默认库。 .. – Nikhil

+0

以独立于平台的方式获取机器网络接口的地址并不容易。如果你不能使用'netifaces',你可能想看看它的源代码:https://bitbucket.org/al45tair/netifaces – Jaco

+0

感谢您的链接,我会研究它.. – Nikhil

如果你的问题是:“如何让我的电脑的所有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