跳转到主要内容

便携式网络接口信息。

项目描述

原始致谢

此软件包不是我的。原始代码的全部荣誉归功于Alastair Houghton [alastair AT alastairs-place DOT net] 的netifaces软件包。还应感谢Kevin Kelley [kelleyk AT kelleyk D0T net],他负责将原始的netifaces代码移植到Python 3.x并创建了netifaces-py3软件包。

有何不同

此软件包是从https://github.com/kelleyk/py3k-netifaces分叉的,并进行了少量修改。这些更改包括

  • 遵循标准主.次.微命名规范的版本号。

  • 更新setup.py,修复了一些与Python 2.5相关的问题(原始软件包支持Python 2.5)

  • 删除了minisix作为依赖项

  • https://gist.github.com/opalmer/6558607合并的代码,该代码修复了在Windows上编译时的一个错误。此补丁已提交给原始的netifaces作者,但从未得到回复。

创建此软件包的原因

通常,当遇到开源Python软件包问题时,应向作者提交补丁,进行审核,然后最终合并。然而,有时这并不会发生,出于某种原因,软件包会被复制、修复,并以另一个名称发布。

那么为什么创建netifaces-merged?我创建此软件包有几个原因,但总的来说,原因是为了跨平台稳定性,并且可以在Python版本之间使用单个软件包,而无需外部依赖。

在尝试完成这项任务时,第一个问题是netifaces库存在一个错误,这破坏了Windows编译。我曾就这个问题给作者发过邮件,并附上了补丁,但不幸的是,我从未收到回复。虽然有一些绕过它的方法,比如在运行我的setup.py文件时对源代码进行猴子补丁,但我认为这也不是一个很好的解决方案,无论是对于我自己的库还是对于将来使用netifaces的任何人。

快进几个月,我开始将我的部分库转换为Python 3.x。不幸的是,netifaces仍然没有更新,但有人,感谢Kevin Kelley,足够好地将它移植到Python 3。这次的问题是setup.py不是为旧版本的Python设计的,而且依赖于一个模块,截至本文写作时,它还不存在于PyPi中,也没有与netifaces-py3一起打包。除此之外,PyPi中现有的包被认为是一个愚蠢的二进制包,使用pip无法安装到虚拟环境中。

我欢迎将我的工作和Kevin的工作合并到netifaces中,但在那之前,我将维护这个包一段时间。

netifaces 0.9.0

1. 这是啥?

有一段时间我一直很烦恼,因为没有简单的方法可以从Python中获取机器网络接口的地址。这个问题很难解决,因为几乎不可能以可移植的方式完成。然而,在我看来,应该有一个包,你可以通过easy_install安装它,它会处理你正在使用的机器上的细节,然后你可以继续编写Python代码,而不必关心系统依赖的低级网络API的繁琐细节。

这个包试图解决这个问题。

2. 我怎么使用它?

首先,你需要安装它,你可以通过以下命令来完成

tar xvzf netifaces-0.4.tar.gz cd netifaces-0.4 python setup.py install

完成这些后,你需要启动Python并执行以下类似操作

>>> import netifaces

然后如果你输入

>>> netifaces.interfaces()
['lo0', 'gif0', 'stf0', 'en0', 'en1', 'fw0']

你将看到你机器的接口标识符列表。

你可以通过以下方式请求特定接口的地址

>>> netifaces.ifaddresses('lo0')
{18: [{'addr': ''}], 2: [{'peer': '127.0.0.1', 'netmask': '255.0.0.0', 'addr': '127.0.0.1'}], 30: [{'peer': '::1', 'netmask': 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', 'addr': '::1'}, {'peer': '', 'netmask': 'ffff:ffff:ffff:ffff::', 'addr': 'fe80::1%lo0'}]}

嗯,这个结果看起来有点神秘;让我们分解一下,并解释每一部分代表什么。它返回了一个字典,所以让我们先看看这里

{ 18: […], 2: […], 30: […] }

每个数字都代表一个特定的地址族。在这种情况下,我们有三个地址族列出;在我的系统中,18是AF_LINK(表示链路层接口,例如以太网),2是AF_INET(普通互联网地址),30是AF_INET6(IPv6)。

但是等等!不要在你的代码中使用这些数字。这里的数值是系统相关的;幸运的是,我在编写netifaces时想到了这一点,因此该模块声明了一系列你可能需要的值。例如。

>>> netifaces.AF_LINK
18

再次强调,在你的系统中,数字可能不同。

所以,我们已经确定,返回的字典为每个具有地址的地址族都有一个条目。现在让我们看看AF_INET地址

>>> addrs = netifaces.ifaddresses('lo0')
>>> addrs[netifaces.AF_INET]
[{'peer': '127.0.0.1', 'netmask': '255.0.0.0', 'addr': '127.0.0.1'}]

你可能想知道为什么这个值是列表。原因是接口可能有多个地址,甚至在同一族中。我再重复一遍:你可以将多个相同类型的地址与每个接口关联起来。

请求特定接口的“地址”是没有意义的。

好吧,所以,我们可以看到这个特定的接口只有一个地址,而且因为它是一个环回接口,所以它是点对点,因此有一个对等地址而不是广播地址。

让我们看看一个更有趣的接口。

>>> addrs = netifaces.ifaddresses('en0')
>>> addrs[netifaces.AF_INET]
[{'broadcast': '10.15.255.255', 'netmask': '255.240.0.0', 'addr': '10.0.1.4'}, {'broadcast': '192.168.0.255', 'addr': '192.168.0.47'}]

这个接口有两个地址(看吧,我早就告诉你了……)它们都是普通的IPv4地址,尽管其中一个网络的子网掩码已经从默认值更改。如果你的系统将子网掩码设置为地址范围的默认值,则可能不会显示。

因为这个接口不是点对点,它也有广播地址。

现在,假设我们想要获取MAC地址,而不是IP地址;即运行此接口的以太网适配器的硬件地址。我们可以这样做

>>> addrs[netifaces.AF_LINK]
[{'addr': '00:12:34:56:78:9a'}]

请注意,如果没有实现getifaddrs()的平台,则可能无法获得此信息,除非它们恰好实现了SIOCGIFHWADDR。还请注意,您只能获取地址;您不太可能看到任何带有AF_LINK地址的其他内容。哦,而且不要假设所有AF_LINK地址都是以太网;例如,您可能在Mac上,在这种情况下

>>> addrs = netifaces.ifaddresses('fw0')
>>> addrs[netifaces.AF_LINK]
[{'addr': '00:12:34:56:78:9a:bc:de'}]

不,这不是一个异常长的以太网MAC地址——这是一个FireWire地址。

3. 它在哪些平台上工作?

嗯,看这里,事情是这样的。它在Mac OS X上进行了测试,并且似乎可以正常工作。(OS X方便地提供了一些SIOCGIFxxx ioctl(),这意味着它们中的大多数也已经过测试,唯一的明显例外是SIOCGIFHWADDR ioctl(),OS X根本就没有这个。)

它可能在大多数其他相对较小的UNIX-like系统上正常工作。如果您确实需要更改某些内容,请发送给我,邮箱地址为 <alastair AT alastairs-place.net>,我会看看是否可以将其合并。

它也在Windows上运行得很好,使用GetAdaptersInfo()函数。请注意,但在Windows上,目前无法检索IPv6地址。我目前没有使用Windows,所以这不是我的优先事项。如果您知道如何修复它,请给我发邮件,我会考虑添加必要的代码。

4. 这个软件的许可证是什么?

这是一个MIT风格的许可证。以下是内容

版权所有(c)2007,2008 阿拉斯泰尔·霍顿
版权所有(c)2011 凯文·凯利
版权所有(c)2013 奥利弗·帕尔默

特此授予任何人获取本软件及其相关文档文件(“软件”)副本的许可,免费使用软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本,并允许获得软件的人这样做,前提是遵守以下条件

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

软件按“原样”提供,不提供任何形式的保证,无论是明示的还是隐含的,包括但不限于适销性、特定用途适用性和非侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任承担责任,无论是否因合同、侵权或其他行为而产生,与软件或其使用或其他交易有关。

项目详情


下载文件

下载适用于您平台文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源分布

netifaces-merged-0.9.0.tar.gz (21.8 kB 查看哈希值)

上传时间

构建分发

netifaces_merged-0.9.0-py3.3-win32.egg (12.9 kB 查看哈希值)

上传于 源代码

netifaces_merged-0.9.0-py3.3-macosx-10.9-x86_64.egg (10.3 kB 查看哈希值)

上传于 源代码

netifaces_merged-0.9.0-py3.3-linux-x86_64.egg (21.6 kB 查看哈希值)

上传于 源代码

netifaces_merged-0.9.0-py2.7-win32.egg (12.2 kB 查看哈希值)

上传于 源代码

netifaces_merged-0.9.0-py2.7-macosx-10.9-intel.egg (13.0 kB 查看哈希值)

上传于 源代码

netifaces_merged-0.9.0-py2.7-linux-x86_64.egg (21.2 kB 查看哈希值)

上传于 源代码

netifaces_merged-0.9.0-py2.6-win32.egg (12.5 kB 查看哈希值)

上传于 源代码

netifaces_merged-0.9.0-py2.6-macosx-10.9-intel.egg (13.0 kB 查看哈希值)

上传于 源代码

netifaces_merged-0.9.0-py2.6-linux-x86_64.egg (21.1 kB 查看哈希值)

上传于 源代码

netifaces-merged-0.9.0.win32-py3.3.exe (213.8 kB 查看哈希值)

上传于 源代码

netifaces-merged-0.9.0.win32-py2.7.exe (218.3 kB 查看哈希值)

上传于 源代码

netifaces-merged-0.9.0.win32-py2.6.exe (218.5 kB 查看哈希值)

上传于 源代码

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面