python 3:ipaddr / netaddr模块

时间:2010-04-26 16:06:26

标签: python python-3.x subnet cidr

我必须在这里做错事......我目前正在尝试使用内置模块验证ip是否在特定子网内。

我正在使用activepython:

ActivePython 3.1.2.3 (ActiveState Software Inc.) based on
Python 3.1.2 (r312:79147, Mar 22 2010, 12:20:29) [MSC v.1500 32 bit (Intel)] on win32

在更改日志中有这个:

Python News
(editors: check NEWS.help for information about editing NEWS using ReST.)

What's New in Python 3.1.2?
Release date: 2010-03-20

----- snip -----

Removed the ipaddr module. 
Issue #3613: base64.{encode,decode}string are now called 
System Message: WARNING/2 (, line 706)

----- snip -----

Issue #3959: The ipaddr module has been added to the standard library. Contributed by Google.
那个和其他谷歌搜索让我相信ipaddr是一个内置的但是:

>>> import ipaddr
Traceback (most recent call last):
  File "", line 1, in 
ImportError: No module named ipaddr
>>> from ipaddr import *
Traceback (most recent call last):
  File "", line 1, in 
ImportError: No module named ipaddr

所以我想我会安装netaddr并尝试使用它,而我从netaddr获得的是:

>>> import netaddr
Traceback (most recent call last):
  File "", line 1, in 
  File "C:\Python31\lib\site-packages\netaddr\__init__.py", line 18, in 
    from netaddr.ip import IPAddress, IPNetwork, IPRange, all_matching_cidrs, \
  File "C:\Python31\lib\site-packages\netaddr\ip\__init__.py", line 1877, in 
    IPV6_LOOPBACK = IPAddress('::1')
  File "C:\Python31\lib\site-packages\netaddr\ip\__init__.py", line 262, in __init__
    self.value = addr
  File "C:\Python31\lib\site-packages\netaddr\ip\__init__.py", line 292, in _set_value
    % value)
netaddr.core.AddrFormatError: failed to detect IP version: '::1'

我感到非常沮丧,我不确定从哪里开始...建议?

3 个答案:

答案 0 :(得分:3)

{3.1}开发周期中添加ipaddr模块(在alpha 2和beta 1之间),但在3.1的第​​一个候选版本之前删除。它不是任何已发布的Python版本的标准库的一部分。您仍然可以从PyPI

下载并安装它

netaddr失败似乎是netaddr本身的错误。它试图检测IPv6支持并失败。我猜这是模块中的一个错误,但修复或解决方法更难以猜测。

答案 1 :(得分:3)

netaddr还不支持Python 3.x(如README中所述)。

但是,它将在即将发布的版本(0.7.5)中完成。我会把它作为一个提示,我应该快点把它拿出来!

我在项目错误跟踪器上添加了一张票: -

http://code.google.com/p/netaddr/issues/detail?id=55

感谢。

答案 2 :(得分:2)

模块ipaddress包含在python 3.3中,它是ipaddr模块的新版本。

ipaddress向后兼容PyPI上可用的ipaddr模块。

主要区别是:

  • ipaddress *网络类等同于严格标志设置为True的ipaddr * Network类对应物。
  • ipaddress *接口类等同于严格标志设置为False的ipaddr * Network类对应物。
  • ipaddress中的工厂函数已重命名,以便从类中消除歧义。
  • 重命名了一些属性以消除其目的的歧义。 (例如,network,network_address)
    • 在ipaddr中返回容器的许多方法和函数现在返回迭代器。这包括子网,address_exclude,summarize_address_range和collapse_address_list。

有关详细信息,请参阅PEP-3144