Following system colour scheme - Python 增强提案 Selected dark colour scheme - Python 增强提案 Selected light colour scheme - Python 增强提案

Python 增强提案

PEP 3144 – Python 标准库的 IP 地址操作库

作者:
Peter Moody <pmoody at google.com>
BDFL 委托
Alyssa Coghlan
讨论至:
ipaddr-py-dev@googlegroups.com
状态:
最终版
类型:
标准跟踪
创建日期:
2012年2月6日
Python 版本:
3.3
决议:
Python-Dev 消息

目录

摘要

本 PEP 提出了一个用于 Python 的 IP 地址操作模块的设计方案。

PEP 接受

本 PEP 于 2012 年 5 月 15 日被 Alyssa Coghlan 接受。

动机

现有的几个非常好的 Python IP 地址模块。事实是,所有这些模块都在坚持 Pythonic 原则和网络工程师及管理员所依赖的简写之间苦苦挣扎。ipaddress 旨在取得正确的平衡。

基本原理

几个 Python IP 地址操作模块的存在证明了对本模块旨在提供的功能有迫切的需求。

背景

PEP 3144ipaddr 之前曾被提议纳入。此处指定的库版本与 PyPI 上的版本和之前讨论过的版本不兼容。为了避免混淆当前 ipaddr 的用户,我将此版本的库重命名为 ipaddress

ipaddr 和 ipaddress 之间的主要区别是

  • ipaddress *网络类等同于 ipaddr *网络类,并将 strict 标志设置为 True
  • ipaddress *接口类等同于 ipaddr *网络类,并将 strict 标志设置为 False
  • ipaddress 中的工厂函数已重命名,以与类区分开来。
  • 一些属性也已重命名,以区分其用途。(例如 network, network_address
  • ipaddr 中返回容器的一些方法和函数现在返回迭代器。这包括 subnetsaddress_excludesummarize_address_rangecollapse_address_list

由于 ipaddressipaddr 之间的 API 发生了不兼容的更改,因此建议使用新的临时 API 状态添加该模块

python-dev 上的相关消息

规范

ipaddr 模块总共定义了 6 个新的公共类,其中 3 个用于操作 IPv4 对象,3 个用于操作 IPv6 对象。这些类如下:

  • IPv4Address/IPv6Address - 这些定义了单个地址,例如,通过对 www.google.com 进行 A 记录查询返回的 IPv4 地址 (74.125.224.84) 或通过对 ipv6.google.com 进行 AAAA 记录查询返回的 IPv6 地址 (2001:4860:4001:801::1011)。
  • IPv4Network/IPv6Network - 这些定义了网络或地址组,例如,为多播使用保留的 IPv4 网络 (224.0.0.0/4) 或为多播保留的 IPv6 网络 (ff00::/8,哇,这可真大)。
  • IPv4Interface/IPv6Interface - 这些混合类指的是给定网络上的单个地址。例如,网络 192.0.2.0/24 上的 IPV4 地址 192.0.2.1 可以表示为 192.0.2.1/24。同样,网络 2001:DB8::/96 上的 IPv6 地址 2001:DB8::1 可以表示为 2001:DB8::1/96。将分配给计算机网络接口的地址这样表示非常常见,因此得名 Interface。

所有 IPv4 类都共享某些特性和方法;表示它们所需的位数,它们是否属于某些特殊的 IPv4 网络范围等。同样,所有 IPv6 类都共享特性和方法。

ipaddr 大量使用继承来尽可能避免代码重复。父类是私有的,但在此处列出:

  • _IPAddrBase - 提供所有 ipaddr 对象通用的方法。
  • _BaseAddress - 提供 IPv4AddressIPv6Address 通用的方法。
  • _BaseInterface - 提供 IPv4InterfaceIPv6Interface 以及 IPv4NetworkIPv6Network 通用的方法(ipaddr 将网络类视为接口的一种特殊情况)。
  • _BaseV4 - 提供所有 IPv4 类通用的方法和变量(例如,_max_prefixlen)。
  • _BaseV6 - 提供所有 IPv6 类通用的方法和变量。

不同 IP 版本对象之间的比较会导致 TypeError [1]。此外,具有不同 _Base 父类的对象比较也会导致 TypeError。_Base 父类限制的作用是 IPv4Interface 可以与 IPv4Network 进行比较,而 IPv6Interface 可以与 IPv6Network 进行比较。

参考实现

当前的参考实现可以在以下网址找到

http://code.google.com/p/ipaddress-py/source/browse/ipaddress.py

或者查看 tar 包以包含 README 和单元测试。http://code.google.com/p/ipaddress-py/downloads/detail?name=ipaddress-1.0.tar.gz

有关使用参考实现的更多信息,请访问:http://code.google.com/p/ipaddr-py/wiki/Using3144

参考资料


来源:https://github.com/python/peps/blob/main/peps/pep-3144.rst

上次修改:2025-02-01 08:59:27 GMT