我必须在这里做错事......我目前正在尝试使用内置模块验证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'
我感到非常沮丧,我不确定从哪里开始...建议?
答案 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
模块。
主要区别是:
有关详细信息,请参阅PEP-3144。