2

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

我正在使用activepython:

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

在变更日志中有这个:

蟒蛇新闻
(编辑:查看 NEWS.help 以获取有关使用 ReST 编辑 NEWS 的信息。)

Python 3.1.2 有什么新功能?
发布日期:2010-03-20

----- 剪断 -----

删除了 ipaddr 模块。
问题 #3613:base64.{encode,decode}string 现在被调用
系统消息:WARNING/2(,第 706 行)

----- 剪断 -----

问题 #3959:ipaddr 模块已添加到标准库中。由谷歌提供。

那个和其他谷歌搜索让我相信 ipaddr 是一个内置的,但是:

>>> 导入ipaddr
回溯(最近一次通话最后):
  文件“”,第 1 行,在
ImportError:没有名为 ipaddr 的模块
>>> 从 ipaddr 导入 *
回溯(最近一次通话最后):
  文件“”,第 1 行,在
ImportError:没有名为 ipaddr 的模块

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

>>> 导入网络地址
回溯(最近一次通话最后):
  文件“”,第 1 行,在
  文件“C:\Python31\lib\site-packages\netaddr\__init__.py”,第 18 行,在
    从 netaddr.ip 导入 IPAddress、IPNetwork、IPRange、all_matching_cidrs、\
  文件“C:\Python31\lib\site-packages\netaddr\ip\__init__.py”,第 1877 行,在
    IPV6_LOOPBACK = IPAddress('::1')
  文件“C:\Python31\lib\site-packages\netaddr\ip\__init__.py”,第 262 行,在 __init__
    自我价值=地址
  _set_value 中的文件“C:\Python31\lib\site-packages\netaddr\ip\__init__.py”,第 292 行
    % 价值)
netaddr.core.AddrFormatError: 检测 IP 版本失败: '::1'

我感到相当沮丧,我不知道从这里去哪里......建议?

4

3 回答 3

3

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

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

于 2010-04-26T16:25:04.443 回答
3

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

但是,它将在即将发布的版本 (0.7.5) 中使用。我会以此为暗示,我应该快点把它拿出来!

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

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

谢谢。

于 2010-04-27T21:36:24.563 回答
2

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

ipaddressipaddr与PyPI 上可用的模块向后不兼容。

主要区别在于:

  • ipaddress *Network 类等效于 ipaddr *Network 类对应项,其严格标志设置为 True。
  • ipaddress *Interface 类等效于 ipaddr *Network 类对应项,其严格标志设置为 False。
  • ipaddress 中的工厂函数被重命名以消除它们与类的歧义。
  • 一些属性也被重命名以消除它们的用途。(例如网络,network_address)
    • 在 ipaddr 中返回容器的许多方法和函数现在返回迭代器。这包括子网、address_exclude、summarize_address_range 和 collapse_address_list。

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

于 2014-08-05T14:33:57.800 回答