便携式网络接口信息。
项目描述
Linux/macOS |
|
Windows |
1. 这是啥?
有一段时间,我一直很烦恼,因为从Python中获取机器网络接口的地址(们)没有简单的方法。这种困难有很好的原因,那就是以可移植的方式做到这一点几乎是不可能的。然而,在我看来,应该有一个可以easy_install的包来处理您所使用机器上的这些细节,这样您就可以继续编写Python代码,而不必担心系统相关的低级网络API的细节。
此包试图解决这个问题。
2. 我怎么用?
首先,您需要安装它,可以通过输入以下命令来完成
tar xvzf netifaces-0.10.8.tar.gz cd netifaces-0.10.8 python setup.py install
请注意,您需要您平台的相关开发工具,因为netifaces是用C编写的,以这种方式安装将编译扩展。
完成之后,您需要启动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'}]
您可能想知道为什么这个值是一个列表。原因是接口可能拥有多个地址,甚至在同一族内。我再重复一遍:您可以为每个接口关联多个同类型的地址。
请求“特定接口的”地址没有意义。
没错,我们可以看到这个特定的接口只有一个地址,因为它是一个回环接口,所以它是点对点的,因此有一个peer地址而不是广播地址。
让我们看看一个更有趣的接口。
>>> 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地址,也就是运行此接口的以太网适配器的硬件地址。我们可以这样做:
>>> 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地址。
从版本0.10.0开始,您还可以获取您机器上的网关列表
>>> netifaces.gateways() {2: [('10.0.1.1', 'en0', True), ('10.2.1.1', 'en1', False)], 30: [('fe80::1', 'en0', True)], 'default': { 2: ('10.0.1.1', 'en0'), 30: ('fe80::1', 'en0') }}
这个字典以地址族为键——在这种情况下,是AF_INET——每个条目都是一个包含网关的列表,格式为(address, interface, is_default)元组。请注意,这里我们有两个单独的IPv4(AF_INET)网关;一些操作系统支持这种配置,可以根据源路由包,或者基于管理配置的路由表进行路由。
为了方便,我们还允许您使用特殊值'default'索引字典,它返回一个将地址族映射到每个情况的默认网关的字典。因此,您可以使用以下方法获取默认IPv4网关:
>>> gws = netifaces.gateways() >>> gws['default'][netifaces.AF_INET] ('10.0.1.1', 'en0')
请注意,对于任何给定的地址族,可能没有默认网关;这在IPv6中非常常见,在IPv4中较少见,但即使对于AF_INET也可能发生。
顺便说一下,如果您正在尝试配置您的机器以使用同一地址族的多个网关,那么仔细查看您操作系统的文档是一个非常不错的想法,因为一些系统可能会变得极度混乱,或者以非显而易见的方式路由数据包。
我非常想听到任何(任何平台)的人的信息,对于他们来说,gateways()方法没有产生预期的结果。从操作系统(无论我们谈论的是哪个操作系统)中提取这些信息相当复杂,因此我预计至少有一个系统,这种方法根本不起作用。
3. 这太棒了!它在哪些平台上运行?
它在OS X、Linux和Windows上进行了常规测试。它也已在Solaris上成功使用,并预期将在其他类UNIX系统上正常运行。如果您正在运行不受支持的东西,并且希望贡献补丁,请使用Github发送拉取请求。
4. 这个项目使用什么许可协议?
这是一个MIT风格的许可协议。请参阅LICENSE。
5. 为什么跳到0.10.0?
因为有人发布了带有版本0.9.0的netifaces分支。希望跳过版本号可以消除任何混淆。此外,从0.10.0开始,现在支持Python 3,还包含了其他功能/错误修复。请参阅CHANGELOG以获取更改的更完整列表。
项目详情
下载文件
下载您平台上的文件。如果您不确定选择哪一个,请了解更多关于安装包的信息。
源分布
构建分布
netifaces-0.11.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 043a79146eb2907edf439899f262b3dfe41717d34124298ed281139a8b93ca32 |
|
MD5 | 3146dcb3297dd018ae5eb9a52b440419 |
|
BLAKE2b-256 | a69186a6eac449ddfae239e93ffc1918cf33fd9bab35c04d1e963b311e347a73 |
netifaces-0.11.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e76c7f351e0444721e85f975ae92718e21c1f361bda946d60a214061de1f00a1 |
|
MD5 | b22bd98bb09fb8ec640d85505e1356b2 |
|
BLAKE2b-256 | 6b07613110af7b7856cf0bea173a866304f5476aba06f5ccf74c66acc73e36f1 |
netifaces-0.11.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 841aa21110a20dc1621e3dd9f922c64ca64dd1eb213c47267a2c324d823f6c8f |
|
MD5 | 06b00fc16be2b5279fbed3861109ff7a |
|
BLAKE2b-256 | f1522e526c90b5636bfab54eb81c52f5b27810d0228e80fa1afac3444dd0cd77 |
netifaces-0.11.0-cp39-cp39-macosx_11_0_arm64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 54ff6624eb95b8a07e79aa8817288659af174e954cca24cdb0daeeddfc03c4ff |
|
MD5 | 4bbac3ebf528bbc3825eddc3717284f1 |
|
BLAKE2b-256 | c08cb8d1e0bb4139e8b9b8acea7157c4106eb020ea25f943b364c763a0edba0a |
netifaces-0.11.0-cp39-cp39-macosx_10_15_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 5be83986100ed1fdfa78f11ccff9e4757297735ac17391b95e17e74335c2047d |
|
MD5 | eba522f146f3f71edd5310a70c449e57 |
|
BLAKE2b-256 | dd51316a0e27e015dff0573da8a7629b025eb2c10ebbe3aaf6a152039f233972 |
netifaces-0.11.0-cp38-cp38-win_amd64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 469fc61034f3daf095e02f9f1bbac07927b826c76b745207287bc594884cfd05 |
|
MD5 | 5b7fa60403814cbbaaf778af08aecf0e |
|
BLAKE2b-256 | d76cd24d9973e385fde1440f6bb83b481ac8d1627902021c6b405f9da3951348 |
哈希值 用于 netifaces-0.11.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c92ff9ac7c2282009fe0dcb67ee3cd17978cffbe0c8f4b471c00fe4325c9b4d4 |
|
MD5 | 61dd6d07b08b4290ad7e612df6c1a802 |
|
BLAKE2b-256 | 776ceb2b7c9dbbf6cd0148fda0215742346dc4d45b79f680500832e8c6457936 |
哈希值 用于 netifaces-0.11.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 96c0fe9696398253f93482c84814f0e7290eee0bfec11563bd07d80d701280c3 |
|
MD5 | 5011081fca3de01f913c97e4c8419286 |
|
BLAKE2b-256 | 13d3805fbf89548882361e6900cbb7cc50ad7dec7fab486c5513be49729d9c4e |
哈希值 用于 netifaces-0.11.0-cp38-cp38-macosx_10_15_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3ecb3f37c31d5d51d2a4d935cfa81c9bc956687c6f5237021b36d6fdc2815b2c |
|
MD5 | 9984a723441b1cd63dd2cdbcbd7fe3ea |
|
BLAKE2b-256 | 1db40ba3c00f8bbbd3328562d9e7158235ffe21968b88a21adf5614b019e5037 |
哈希值 用于 netifaces-0.11.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 48324183af7f1bc44f5f197f3dad54a809ad1ef0c78baee2c88f16a5de02c4c9 |
|
MD5 | 30bb5c3e6f43ae5193ce7955e4c84d80 |
|
BLAKE2b-256 | c805b41bbe076da2316f4521decf22346b1f20cb81484dc49424a9e58e6f50ae |
哈希值 用于 netifaces-0.11.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 18917fbbdcb2d4f897153c5ddbb56b31fa6dd7c3fa9608b7e3c3a663df8206b5 |
|
MD5 | aad2ab3d093a9815c752cdb2f973aaac |
|
BLAKE2b-256 | d86f3cb4f56b5298905e55fbbb8eb468e2db13375f74504d162bbaa9488a306e |
哈希值 用于 netifaces-0.11.0-cp37-cp37m-macosx_10_15_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 84e4d2e6973eccc52778735befc01638498781ce0e39aa2044ccfd2385c03246 |
|
MD5 | 16e141c05d14787719105e0fa4f67171 |
|
BLAKE2b-256 | cb08b02f45cde4d0a6250ced65fad02ca08b48d0938ee1d64b9880f82b27ccab |
哈希值 用于 netifaces-0.11.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 28f4bf3a1361ab3ed93c5ef360c8b7d4a4ae060176a3529e72e5e4ffc4afd8b0 |
|
MD5 | 1a8fb7129c31dbad0a42190b16683de4 |
|
BLAKE2b-256 | 4749bf6c18d33682ec5cca15ba37f86d0a04979cfa15a9e51c86673c1831d04c |
哈希值 用于 netifaces-0.11.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c37a1ca83825bc6f54dddf5277e9c65dec2f1b4d0ba44b8fd42bc30c91aa6ea1 |
|
MD5 | 341e3bd15dfe6cb03eeaaffac3b947bf |
|
BLAKE2b-256 | 9561762ab93c47553a4501fbac46bbe0e27c9e80a4a9d0696917ca9c5ab2d5b9 |
哈希值 for netifaces-0.11.0-cp36-cp36m-macosx_10_15_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | aab1dbfdc55086c789f0eb37affccf47b895b98d490738b81f3b2360100426be |
|
MD5 | be1b6ae9a56460ad5ebff5e24e813b32 |
|
BLAKE2b-256 | ea1457dcb067e83a6615b60d3635cdaa05b4b7c7fa8b21a1ae5fcab5513bda20 |
哈希值 for netifaces-0.11.0-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 50721858c935a76b83dd0dd1ab472cad0a3ef540a1408057624604002fcfb45b |
|
MD5 | 889537de972afe544be5a789f0bd88ac |
|
BLAKE2b-256 | 895cf44769f4afa88a1e8888eb81771a00a54227d40858f81bdf9f5fc1ec110c |
哈希值 for netifaces-0.11.0-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 815eafdf8b8f2e61370afc6add6194bd5a7252ae44c667e96c4c1ecf418811e4 |
|
MD5 | 86d337579dfd21793ebd53dce1fe226f |
|
BLAKE2b-256 | 73b1a8285eb5c37592fd202037f5ccac64faf59f990b3d85a881286881ef2ba4 |
哈希值 for netifaces-0.11.0-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c03fb2d4ef4e393f2e6ffc6376410a22a3544f164b336b3a355226653e5efd89 |
|
MD5 | 5dd8f1e6f595311eea9e4dbac09127b7 |
|
BLAKE2b-256 | 89b2b0201e550aee1fb84de0a951bfb74a91b67d49a77d8cb5334b7585e40a77 |
哈希值 for netifaces-0.11.0-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 08e3f102a59f9eaef70948340aeb6c89bd09734e0dca0f3b82720305729f63ea |
|
MD5 | 55df88de5eb8c602ef6ecaf04ef593fc |
|
BLAKE2b-256 | 0a0f6cd5502483369f1141dbb5335f8db145d1684b6f3ada4964cfa6b24a4b62 |
哈希值 for netifaces-0.11.0-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 5f9ca13babe4d845e400921973f6165a4c2f9f3379c7abfc7478160e25d196a4 |
|
MD5 | ad279ad8b6ddc014c6fa83df1f35c865 |
|
BLAKE2b-256 | 1a29fedda8ef898f12af8edde0355775e1564acf358261c974f2929e9307597e |
哈希值 for netifaces-0.11.0-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | eb4813b77d5df99903af4757ce980a98c4d702bbcb81f32a0b305a1537bdf0b1 |
|
MD5 | d11128eda69a0df8b60946c2399a80ee |
|
BLAKE2b-256 | e9500c9f1703cf67ab6605ac7c03ddf8d0a1fb6862e5ad2be349c42b40381f12 |