ipaddress ---IPv4/IPv6操作库

源代码: Lib/ipaddress.py


ipaddress 提供在IPv4和IPv6地址和网络上创建、操作和操作的功能。

此模块中的函数和类使处理与IP地址相关的各种任务变得简单,包括检查两个主机是否位于同一子网上、在特定子网上的所有主机上迭代、检查字符串是否表示有效的IP地址或网络定义等。

这是完整的模块API参考,有关概述和介绍,请参见 IP地址模块简介 .

3.3 新版功能.

便利工厂功能

这个 ipaddress 模块提供工厂功能,方便创建IP地址、网络和接口:

ipaddress.ip_address(address)

返回一 IPv4AddressIPv6Address 对象,取决于作为参数传递的IP地址。可以提供IPv4或IPv6地址;小于的整数 2**32 will be considered to be IPv4 by default. A ValueError is raised if * 地址*不代表有效的IPv4或IPv6地址。

>>> ipaddress.ip_address('192.168.0.1')
IPv4Address('192.168.0.1')
>>> ipaddress.ip_address('2001:db8::')
IPv6Address('2001:db8::')
ipaddress.ip_network(address, strict=True)

返回一 IPv4NetworkIPv6Network 对象,取决于作为参数传递的IP地址。 地址 表示IP网络的字符串或整数。可以提供IPv4或IPv6网络;整数小于 2**32 will be considered to be IPv4 by default. * 严格的 * is passed to IPv4Network or IPv6Network constructor. A ValueError is raised if * 地址*不代表有效的IPv4或IPv6地址,或者如果网络设置了主机位。

>>> ipaddress.ip_network('192.168.0.0/28')
IPv4Network('192.168.0.0/28')
ipaddress.ip_interface(address)

返回一 IPv4InterfaceIPv6Interface 对象,取决于作为参数传递的IP地址。 地址 是表示IP地址的字符串或整数。可以提供IPv4或IPv6地址;小于的整数 2**32 will be considered to be IPv4 by default. A ValueError is raised if * 地址*不代表有效的IPv4或IPv6地址。

这些便利功能的一个缺点是需要同时处理IPv4和IPv6格式,这意味着错误消息提供关于精确错误的最小信息,因为这些功能不知道是否有意使用IPv4或IPv6格式。通过直接调用适当的特定于版本的类构造函数,可以获得更详细的错误报告。

IP地址

地址对象

这个 IPv4AddressIPv6Address 对象共享许多公共属性。一些仅对IPv6地址有意义的属性也由 IPv4Address 对象,以便更容易地编写正确处理两个IP版本的代码。地址对象是 hashable ,因此它们可以用作字典中的键。

class ipaddress.IPv4Address(address)

构造一个IPv4地址。安 AddressValueError 如果 地址 不是有效的IPv4地址。

以下内容构成有效的IPv4地址:

  1. 一种十进制点表示法的字符串,由四个十进制整数组成,包含在0-255之间,用点隔开(例如 192.168.0.1 )每个整数表示地址中的八位字节。只有小于8的值才允许使用前导零(因为此类字符串的十进制和八进制解释之间没有歧义)。

  2. 一个整型数,可容纳32位。

  3. 一个整型 bytes 长度为4的对象(最重要的八位字节优先)。

>>> ipaddress.IPv4Address('192.168.0.1')
IPv4Address('192.168.0.1')
>>> ipaddress.IPv4Address(3232235521)
IPv4Address('192.168.0.1')
>>> ipaddress.IPv4Address(b'\xC0\xA8\x00\x01')
IPv4Address('192.168.0.1')
version

适当的版本号: 4 对于IPv4, 6 对于IPv6。

max_prefixlen

此版本的地址表示中的位总数: 32 对于IPv4, 128 对于IPv6。

前缀定义了地址中的前导位数,通过比较来确定地址是否是网络的一部分。

compressed
exploded

以点分十进制表示法表示的字符串。前导零从未包含在表示中。

由于IPv4没有为八位字节设置为零的地址定义速记符号,因此这两个属性始终与 str(addr) 对于IPv4地址。公开这些属性可以更容易地编写能够处理IPv4和IPv6地址的显示代码。

packed

这个地址的二进制表示-a bytes 对象的适当长度(最重要的八位字节优先)。IPv4为4字节,IPv6为16字节。

reverse_pointer

IP地址的反向DNS PTR记录的名称,例如:

>>> ipaddress.ip_address("127.0.0.1").reverse_pointer
'1.0.0.127.in-addr.arpa'
>>> ipaddress.ip_address("2001:db8::1").reverse_pointer
'1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa'

这是可以用于执行ptr查找的名称,而不是解析的主机名本身。

3.5 新版功能.

is_multicast

True 如果地址是为多播保留的。参见 RFC 3171 (对于IPv4)或 RFC 2373 (对于IPv6)。

is_private

True 如果为专用网络分配了地址。见 iana-ipv4-special-registry (对于IPv4)或 iana-ipv6-special-registry (对于IPv6)。

is_global

True 如果为公用网络分配了地址。见 iana-ipv4-special-registry (对于IPv4)或 iana-ipv6-special-registry (对于IPv6)。

3.4 新版功能.

is_unspecified

True 如果未指定地址。见 RFC 5735 (对于IPv4)或 RFC 2373 (对于IPv6)。

is_reserved

True 如果地址另有规定,则IETF保留。

is_loopback

True 如果这是一个环回地址。见 RFC 3330 (对于IPv4)或 RFC 2373 (对于IPv6)。

True 如果该地址是为链接本地使用而保留的。参见 RFC 3927 .

IPv4Address.__format__(fmt)

返回IP地址的字符串表示形式,由显式格式字符串控制。 fmt 可以是以下之一: 's' ,默认选项,等效于 str()'b' 对于填充零的二进制字符串, 'X''x' 对于大写或小写的十六进制表示形式,或 'n' ,这相当于 'b' 对于IPv4地址和 'x' 用于IPv6。对于二进制和十六进制表示法,格式说明符 '#' 和分组选项 '_' 都是有空的。 __format__ 由以下用户使用 formatstr.format 还有f弦。

>>> format(ipaddress.IPv4Address('192.168.0.1'))
'192.168.0.1'
>>> '{:#b}'.format(ipaddress.IPv4Address('192.168.0.1'))
'0b11000000101010000000000000000001'
>>> f'{ipaddress.IPv6Address("2001:db8::1000"):s}'
'2001:db8::1000'
>>> format(ipaddress.IPv6Address('2001:db8::1000'), '_X')
'2001_0DB8_0000_0000_0000_0000_0000_1000'
>>> '{:#_n}'.format(ipaddress.IPv6Address('2001:db8::1000'))
'0x2001_0db8_0000_0000_0000_0000_0000_1000'

3.9 新版功能.

class ipaddress.IPv6Address(address)

构造一个IPv6地址。一个 AddressValueError 如果 地址 不是有效的IPv6地址。

以下内容构成有效的IPv6地址:

  1. 由八组四个十六进制数字组成的字符串,每组代表16位。这些组用冒号隔开。这描述了 爆炸了的 (长手)符号。字符串也可以是 压缩的 (速记法)用各种方法。见 RFC 4291 有关详细信息。例如, "0000:0000:0000:0000:0000:0abc:0007:0def" 可以压缩到 "::abc:7:def" .

    可选地,字符串还可以有一个作用域区域ID,用后缀表示 %scope_id . 如果存在,作用域ID必须为非空,并且不能包含 % . 见 RFC 4007 详细情况。例如, fe80::1234%1 可能识别地址 fe80::1234 在节点的第一个链接上。

  2. 一个适合128位的整数。

  3. 一个整型 bytes 对象长度16,大尾数。

>>> ipaddress.IPv6Address('2001:db8::1000')
IPv6Address('2001:db8::1000')
>>> ipaddress.IPv6Address('ff02::5678%1')
IPv6Address('ff02::5678%1')
compressed

地址表示法的一种简短形式,省略了组中前导零,完全由零组成的组的最长序列折叠成一个空组。

这也是返回的值 str(addr) 对于IPv6地址。

exploded

地址表示的一种长形式,包括所有前导零和完全由零组成的组。

有关以下属性和方法的信息,请参见 IPv4Address 班级:

packed
reverse_pointer
version
max_prefixlen
is_multicast
is_private
is_global
is_unspecified
is_reserved
is_loopback

3.4 新版功能: is_global

is_site_local

True 如果该地址是为站点本地使用而保留的。请注意,站点本地地址空间已被弃用 RFC 3879 . 使用 is_private 测试此地址是否在由定义的唯一本地地址空间中 RFC 4193 .

ipv4_mapped

对于似乎是IPv4映射地址的地址(从 ::FFFF/96 ,此属性将报告嵌入的IPv4地址。对于任何其他地址,此属性将 None .

scope_id

对于由定义的作用域地址 RFC 4007 ,此属性将地址所属的地址作用域的特定区域标识为字符串。如果未指定作用域区域,则此属性将为 None .

sixtofour

对于看起来是6to4地址的地址(从 2002::/16 如由 RFC 3056 ,此属性将报告嵌入的IPv4地址。对于任何其他地址,此属性将 None .

teredo

对于似乎是Teredo地址的地址(从 2001::/32 如由 RFC 4380 ,此属性将报告嵌入的 (server, client) IP地址对。对于任何其他地址,此属性将 None .

IPv6Address.__format__(fmt)

请参阅中相应的方法文档 IPv4Address

3.9 新版功能.

转换为字符串和整数

要与网络接口(如套接字模块)进行互操作,地址必须转换为字符串或整数。这是使用 str()int() 内置函数:

>>> str(ipaddress.IPv4Address('192.168.0.1'))
'192.168.0.1'
>>> int(ipaddress.IPv4Address('192.168.0.1'))
3232235521
>>> str(ipaddress.IPv6Address('::1'))
'::1'
>>> int(ipaddress.IPv6Address('::1'))
1

请注意,IPv6作用域地址转换为不带作用域区域ID的整数。

算子

地址对象支持一些运算符。除非另有说明,否则只能在兼容对象(即IPv4与IPv4、IPv6与IPv6)之间应用运算符。

比较运算符

地址对象可以与常用的比较运算符集进行比较。具有不同作用域区域ID的相同IPv6地址不相等。例如:

>>> IPv4Address('127.0.0.2') > IPv4Address('127.0.0.1')
True
>>> IPv4Address('127.0.0.2') == IPv4Address('127.0.0.1')
False
>>> IPv4Address('127.0.0.2') != IPv4Address('127.0.0.1')
True
>>> IPv6Address('fe80::1234') == IPv6Address('fe80::1234%1')
False
>>> IPv6Address('fe80::1234%1') != IPv6Address('fe80::1234%2')
True

算术运算符

整数可以加上或减去地址对象。一些例子:

>>> IPv4Address('127.0.0.2') + 3
IPv4Address('127.0.0.5')
>>> IPv4Address('127.0.0.2') - 3
IPv4Address('126.255.255.255')
>>> IPv4Address('255.255.255.255') + 1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ipaddress.AddressValueError: 4294967296 (>= 2**32) is not permitted as an IPv4 address

IP网络定义

这个 IPv4NetworkIPv6Network 对象提供了定义和检查IP网络定义的机制。网络定义包括 mask 和A 网络地址 ,因此定义了一个IP地址范围,当用掩码屏蔽(二进制和)时,该范围等于网络地址。例如,带有掩码的网络定义 255.255.255.0 以及网络地址 192.168.1.0 由包含范围内的IP地址组成 192.168.1.0192.168.1.255 .

前缀、网络掩码和主机掩码

有几种等效的方法来指定IP网络掩码。一 前缀 /<nbits> 表示在网络掩码中设置了多少高阶位的符号。A 网罩 是一个设置了一些高阶位的IP地址。因此,前缀 /24 相当于网络掩码 255.255.255.0 在IPv4中,或 ffff:ff00:: 在IPv6中。此外,A 主机掩码网罩 ,并且有时用于(例如在Cisco访问控制列表中)表示网络掩码。主机掩码相当于 /24 在IPv4中 0.0.0.255 .

网络对象

由地址对象实现的所有属性也由网络对象实现。此外,网络对象实现其他属性。所有这些都是 IPv4NetworkIPv6Network ,因此为了避免重复,它们只记录在 IPv4Network . 网络对象是 hashable ,因此它们可以用作字典中的键。

class ipaddress.IPv4Network(address, strict=True)

构造一个IPv4网络定义。 地址 可以是以下之一:

  1. 由IP地址和可选掩码组成的字符串,用斜线分隔。 (/ )。IP地址是网络地址,掩码可以是单个数字,这意味着它是 前缀 或IPv4地址的字符串表示形式。如果是后者,则该遮罩被解释为 网罩 如果它以非零字段开头,或作为 主机掩码 如果它以一个零字段开头,则作为 网罩 . 如果没有提供面罩,则认为 /32 .

    例如,以下内容 地址 规格相同: 192.168.1.0/24192.168.1.0/255.255.255.0192.168.1.0/0.0.0.255 .

  2. 一个整型数,可容纳32位。这相当于一个单地址网络,网络地址为 地址 面具是 /32 .

  3. 一个整型 bytes 对象长度为4,大尾数。解释类似于整数 地址 .

  4. 地址描述和网络掩码的两个元组,其中地址描述要么是字符串、32位整数、4字节压缩整数,要么是现有的IPv4Address对象;网络掩码要么是表示前缀长度的整数(例如 24 )或表示前缀掩码的字符串(例如 255.255.255.0

AddressValueError 如果 地址 不是有效的IPv4地址。A NetmaskValueError 如果掩码对IPv4地址无效,则引发。

如果 strictTrue 主机位在提供的地址中设置,然后 ValueError 被引发。否则,主机位将被屏蔽,以确定适当的网络地址。

除非另有说明,接受其他网络/地址对象的所有网络方法都将引发 TypeError 如果参数的IP版本与不兼容 self .

在 3.5 版更改: 为添加了两个元组形式 地址 构造函数参数。

version
max_prefixlen

请参阅中相应的属性文档 IPv4Address .

is_multicast
is_private
is_unspecified
is_reserved
is_loopback

如果网络地址和广播地址都为真,则这些属性对于整个网络都为真。

network_address

网络的网络地址。网络地址和前缀长度一起唯一地定义了一个网络。

broadcast_address

网络的广播地址。发送到广播地址的数据包应由网络上的每个主机接收。

hostmask

主机掩码,作为 IPv4Address 对象。

netmask

网罩,作为 IPv4Address 对象。

with_prefixlen
compressed
exploded

网络的一种字符串表示法,用前缀表示法表示掩码。

with_prefixlencompressed 总是和 str(network) . exploded 使用分解的网络地址。

with_netmask

网络的一种字符串表示法,用网络掩码表示法表示。

with_hostmask

网络的一种字符串表示法,其掩码采用主机掩码表示法。

num_addresses

网络中地址的总数。

prefixlen

网络前缀的长度,以位为单位。

hosts()

返回网络中可用主机上的迭代器。可用主机是属于网络的所有IP地址,但网络地址本身和网络广播地址除外。对于掩码长度为31的网络,结果中还包括网络地址和网络广播地址。掩码为32的网络将返回包含单个主机地址的列表。

>>> list(ip_network('192.0.2.0/29').hosts())  
[IPv4Address('192.0.2.1'), IPv4Address('192.0.2.2'),
 IPv4Address('192.0.2.3'), IPv4Address('192.0.2.4'),
 IPv4Address('192.0.2.5'), IPv4Address('192.0.2.6')]
>>> list(ip_network('192.0.2.0/31').hosts())
[IPv4Address('192.0.2.0'), IPv4Address('192.0.2.1')]
>>> list(ip_network('192.0.2.1/32').hosts())
[IPv4Address('192.0.2.1')]
overlaps(other)

True 如果该网络部分或全部包含在 otherother 完全包含在这个网络中。

address_exclude(network)

计算删除给定的 网络 从这一个。返回网络对象的迭代器。引发 ValueError 如果 网络 未完全包含在此网络中。

>>> n1 = ip_network('192.0.2.0/28')
>>> n2 = ip_network('192.0.2.1/32')
>>> list(n1.address_exclude(n2))  
[IPv4Network('192.0.2.8/29'), IPv4Network('192.0.2.4/30'),
 IPv4Network('192.0.2.2/31'), IPv4Network('192.0.2.0/32')]
subnets(prefixlen_diff=1, new_prefix=None)

连接以生成当前网络定义的子网,具体取决于参数值。 prefixlen_diff 是前缀长度应该增加的量。 new_prefix 子网所需的新前缀;它必须大于我们的前缀。一个而且只有一个 prefixlen_diffnew_prefix 必须设置。返回网络对象的迭代器。

>>> list(ip_network('192.0.2.0/24').subnets())
[IPv4Network('192.0.2.0/25'), IPv4Network('192.0.2.128/25')]
>>> list(ip_network('192.0.2.0/24').subnets(prefixlen_diff=2))  
[IPv4Network('192.0.2.0/26'), IPv4Network('192.0.2.64/26'),
 IPv4Network('192.0.2.128/26'), IPv4Network('192.0.2.192/26')]
>>> list(ip_network('192.0.2.0/24').subnets(new_prefix=26))  
[IPv4Network('192.0.2.0/26'), IPv4Network('192.0.2.64/26'),
 IPv4Network('192.0.2.128/26'), IPv4Network('192.0.2.192/26')]
>>> list(ip_network('192.0.2.0/24').subnets(new_prefix=23))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
    raise ValueError('new prefix must be longer')
ValueError: new prefix must be longer
>>> list(ip_network('192.0.2.0/24').subnets(new_prefix=25))
[IPv4Network('192.0.2.0/25'), IPv4Network('192.0.2.128/25')]
supernet(prefixlen_diff=1, new_prefix=None)

包含此网络定义的超集,取决于参数值。 prefixlen_diff 前缀长度应该减少的量。 new_prefix 是超新星所需要的新前缀;它必须小于我们的前缀。一个而且只有一个 prefixlen_diffnew_prefix 必须设置。返回单个网络对象。

>>> ip_network('192.0.2.0/24').supernet()
IPv4Network('192.0.2.0/23')
>>> ip_network('192.0.2.0/24').supernet(prefixlen_diff=2)
IPv4Network('192.0.0.0/22')
>>> ip_network('192.0.2.0/24').supernet(new_prefix=20)
IPv4Network('192.0.0.0/20')
subnet_of(other)

返回 True 如果此网络是的子网 其他 .

>>> a = ip_network('192.168.1.0/24')
>>> b = ip_network('192.168.1.128/30')
>>> b.subnet_of(a)
True

3.7 新版功能.

supernet_of(other)

返回 True 如果这个网络是 其他 .

>>> a = ip_network('192.168.1.0/24')
>>> b = ip_network('192.168.1.128/30')
>>> a.supernet_of(b)
True

3.7 新版功能.

compare_networks(other)

将此网络与 other . 在这个比较中,只考虑网络地址;主机位不考虑。返回 -101 .

>>> ip_network('192.0.2.1/32').compare_networks(ip_network('192.0.2.2/32'))
-1
>>> ip_network('192.0.2.1/32').compare_networks(ip_network('192.0.2.0/32'))
1
>>> ip_network('192.0.2.1/32').compare_networks(ip_network('192.0.2.1/32'))
0

3.7 版后已移除: 它使用与“<”、“==”和“>”相同的排序和比较算法。

class ipaddress.IPv6Network(address, strict=True)

构造IPv6网络定义。 地址 可以是以下之一:

  1. 由IP地址和可选前缀长度组成的字符串,用斜线分隔。 (/ )IP地址是网络地址,前缀长度必须是单个数字, 前缀 . 如果没有提供前缀长度,则认为 /128 .

    请注意,当前扩展的网络掩码不受支持。那意味着 2001:db00::0/24 是有效参数,而 2001:db00::0/ffff:ff00:: 不是。

  2. 一个适合128位的整数。这相当于一个单地址网络,网络地址为 地址 面具是 /128 .

  3. 一个整型 bytes 对象长度16,大尾数。解释类似于整数 地址 .

  4. 地址描述和网络掩码的两个元组,其中地址描述可以是字符串、128位整数、16字节压缩整数或现有的IPV6Address对象;网络掩码是表示前缀长度的整数。

AddressValueError 如果 地址 不是有效的IPv6地址。一 NetmaskValueError 如果掩码对IPv6地址无效,则引发。

如果 strictTrue 主机位在提供的地址中设置,然后 ValueError 被引发。否则,主机位将被屏蔽,以确定适当的网络地址。

在 3.5 版更改: 为添加了两个元组形式 地址 构造函数参数。

version
max_prefixlen
is_multicast
is_private
is_unspecified
is_reserved
is_loopback
network_address
broadcast_address
hostmask
netmask
with_prefixlen
compressed
exploded
with_netmask
with_hostmask
num_addresses
prefixlen
hosts()

返回网络中可用主机上的迭代器。可用主机是属于网络的所有IP地址,子网路由器选播地址除外。对于掩码长度为127的网络,结果中还包括子网路由器选播地址。掩码为128的网络将返回包含单个主机地址的列表。

overlaps(other)
address_exclude(network)
subnets(prefixlen_diff=1, new_prefix=None)
supernet(prefixlen_diff=1, new_prefix=None)
subnet_of(other)
supernet_of(other)
compare_networks(other)

请参阅中相应的属性文档 IPv4Network .

is_site_local

如果网络地址和广播地址都为真,则这些属性对于整个网络为真。

算子

网络对象支持一些操作员。除非另有说明,否则只能在兼容对象(即IPv4与IPv4、IPv6与IPv6)之间应用运算符。

逻辑运算符

网络对象可以与通常的逻辑运算符集进行比较。网络对象首先按网络地址排序,然后按网络掩码排序。

迭代

可以迭代网络对象以列出属于网络的所有地址。对于迭代, all 返回主机,包括不可用的主机(对于可用主机,使用 hosts() 方法)。一个例子:

>>> for addr in IPv4Network('192.0.2.0/28'):
...     addr
...
IPv4Address('192.0.2.0')
IPv4Address('192.0.2.1')
IPv4Address('192.0.2.2')
IPv4Address('192.0.2.3')
IPv4Address('192.0.2.4')
IPv4Address('192.0.2.5')
IPv4Address('192.0.2.6')
IPv4Address('192.0.2.7')
IPv4Address('192.0.2.8')
IPv4Address('192.0.2.9')
IPv4Address('192.0.2.10')
IPv4Address('192.0.2.11')
IPv4Address('192.0.2.12')
IPv4Address('192.0.2.13')
IPv4Address('192.0.2.14')
IPv4Address('192.0.2.15')

作为地址容器的网络

网络对象可以充当地址容器。一些例子:

>>> IPv4Network('192.0.2.0/28')[0]
IPv4Address('192.0.2.0')
>>> IPv4Network('192.0.2.0/28')[15]
IPv4Address('192.0.2.15')
>>> IPv4Address('192.0.2.6') in IPv4Network('192.0.2.0/28')
True
>>> IPv4Address('192.0.3.6') in IPv4Network('192.0.2.0/28')
False

接口对象

接口对象是 hashable ,因此它们可以用作字典中的键。

class ipaddress.IPv4Interface(address)

构造一个IPv4接口。意义 地址 与的构造函数相同 IPv4Network ,除非始终接受任意主机地址。

IPv4Interface 是的子类 IPv4Address ,因此它继承了该类的所有属性。此外,还提供以下属性:

ip

住址 (IPv4Address )没有网络信息。

>>> interface = IPv4Interface('192.0.2.5/24')
>>> interface.ip
IPv4Address('192.0.2.5')
network

网络 (IPv4Network )此接口属于。

>>> interface = IPv4Interface('192.0.2.5/24')
>>> interface.network
IPv4Network('192.0.2.0/24')
with_prefixlen

用前缀表示法表示的带掩码的接口的字符串表示法。

>>> interface = IPv4Interface('192.0.2.5/24')
>>> interface.with_prefixlen
'192.0.2.5/24'
with_netmask

网络接口的字符串表示形式,作为网络掩码。

>>> interface = IPv4Interface('192.0.2.5/24')
>>> interface.with_netmask
'192.0.2.5/255.255.255.0'
with_hostmask

将网络作为主机掩码的接口的字符串表示形式。

>>> interface = IPv4Interface('192.0.2.5/24')
>>> interface.with_hostmask
'192.0.2.5/0.0.0.255'
class ipaddress.IPv6Interface(address)

构造一个IPv6接口。意义 地址 与的构造函数相同 IPv6Network ,除非始终接受任意主机地址。

IPv6Interface 是的子类 IPv6Address ,因此它继承了该类的所有属性。此外,还提供以下属性:

ip
network
with_prefixlen
with_netmask
with_hostmask

请参阅中相应的属性文档 IPv4Interface .

算子

接口对象支持一些运算符。除非另有说明,否则只能在兼容对象(即IPv4与IPv4、IPv6与IPv6)之间应用运算符。

逻辑运算符

接口对象可以与通常的逻辑运算符集进行比较。

用于平等比较 (==!= ,IP地址和网络必须相同才能使对象相等。接口不能与任何地址或网络对象进行比较。

订购 (<> 等)规则不同。可以比较具有相同IP版本的接口和地址对象,并且地址对象总是在接口对象之前排序。两个接口对象首先通过它们的网络进行比较,如果它们相同,则通过它们的IP地址进行比较。

其他模块级功能

该模块还提供以下模块级功能:

ipaddress.v4_int_to_packed(address)

以网络(big endian)顺序将地址表示为4个压缩字节。 地址 是IPv4 IP地址的整数表示形式。一 ValueError 如果整数为负或太大而不是IPv4 IP地址,则引发。

>>> ipaddress.ip_address(3221225985)
IPv4Address('192.0.2.1')
>>> ipaddress.v4_int_to_packed(3221225985)
b'\xc0\x00\x02\x01'
ipaddress.v6_int_to_packed(address)

以网络(big endian)顺序将地址表示为16个压缩字节。 地址 是IPv6 IP地址的整数表示形式。一 ValueError 如果整数为负或太大而不是IPv6 IP地址,则引发。

ipaddress.summarize_address_range(first, last)

返回给定第一个和最后一个IP地址的汇总网络范围的迭代器。 第一 是第一 IPv4AddressIPv6Address 在范围内和 last 是最后一个 IPv4AddressIPv6Address 在这个范围内。一 TypeError 如果 第一last 不是IP地址或不是同一版本。一 ValueError 如果 last 不大于 第一 或如果 第一 地址版本不是4或6。

>>> [ipaddr for ipaddr in ipaddress.summarize_address_range(
...    ipaddress.IPv4Address('192.0.2.0'),
...    ipaddress.IPv4Address('192.0.2.130'))]
[IPv4Network('192.0.2.0/25'), IPv4Network('192.0.2.128/31'), IPv4Network('192.0.2.130/32')]
ipaddress.collapse_addresses(addresses)

返回折叠的迭代器 IPv4NetworkIPv6Network 物体。 地址 是的迭代器 IPv4NetworkIPv6Network 物体。A TypeError 如果 地址 包含混合版本对象。

>>> [ipaddr for ipaddr in
... ipaddress.collapse_addresses([ipaddress.IPv4Network('192.0.2.0/25'),
... ipaddress.IPv4Network('192.0.2.128/25')])]
[IPv4Network('192.0.2.0/24')]
ipaddress.get_mixed_type_key(obj)

返回一个适合在网络和地址之间排序的密钥。默认情况下,地址和网络对象不可排序;它们本质上是不同的,因此表达式:

IPv4Address('192.0.2.0') <= IPv4Network('192.0.2.0/24')

没有道理。然而,有时你可能希望 ipaddress 不管怎样,把这些分类。如果需要这样做,可以使用此函数作为 key 参数 sorted() .

obj 是网络或地址对象。

自定义异常

为了支持来自类构造函数的更具体的错误报告,模块定义了以下异常:

exception ipaddress.AddressValueError(ValueError)

与地址相关的任何值错误。

exception ipaddress.NetmaskValueError(ValueError)

与网络掩码相关的任何值错误。