ipaddress
---IPv4/IPv6操作库¶
源代码: Lib/ipaddress.py
ipaddress
提供在IPv4和IPv6地址和网络上创建、操作和操作的功能。
此模块中的函数和类使处理与IP地址相关的各种任务变得简单,包括检查两个主机是否位于同一子网上、在特定子网上的所有主机上迭代、检查字符串是否表示有效的IP地址或网络定义等。
这是完整的模块API参考,有关概述和介绍,请参见 IP地址模块简介 .
3.3 新版功能.
便利工厂功能¶
这个 ipaddress
模块提供工厂功能,方便创建IP地址、网络和接口:
- ipaddress.ip_address(address)¶
返回一
IPv4Address
或IPv6Address
对象,取决于作为参数传递的IP地址。可以提供IPv4或IPv6地址;小于的整数 2**32 will be considered to be IPv4 by default. AValueError
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)¶
返回一
IPv4Network
或IPv6Network
对象,取决于作为参数传递的IP地址。 地址 表示IP网络的字符串或整数。可以提供IPv4或IPv6网络;整数小于 2**32 will be considered to be IPv4 by default. * 严格的 * is passed toIPv4Network
orIPv6Network
constructor. AValueError
is raised if * 地址*不代表有效的IPv4或IPv6地址,或者如果网络设置了主机位。>>> ipaddress.ip_network('192.168.0.0/28') IPv4Network('192.168.0.0/28')
- ipaddress.ip_interface(address)¶
返回一
IPv4Interface
或IPv6Interface
对象,取决于作为参数传递的IP地址。 地址 是表示IP地址的字符串或整数。可以提供IPv4或IPv6地址;小于的整数 2**32 will be considered to be IPv4 by default. AValueError
is raised if * 地址*不代表有效的IPv4或IPv6地址。
这些便利功能的一个缺点是需要同时处理IPv4和IPv6格式,这意味着错误消息提供关于精确错误的最小信息,因为这些功能不知道是否有意使用IPv4或IPv6格式。通过直接调用适当的特定于版本的类构造函数,可以获得更详细的错误报告。
IP地址¶
地址对象¶
这个 IPv4Address
和 IPv6Address
对象共享许多公共属性。一些仅对IPv6地址有意义的属性也由 IPv4Address
对象,以便更容易地编写正确处理两个IP版本的代码。地址对象是 hashable ,因此它们可以用作字典中的键。
- class ipaddress.IPv4Address(address)¶
构造一个IPv4地址。安
AddressValueError
如果 地址 不是有效的IPv4地址。以下内容构成有效的IPv4地址:
一种十进制点表示法的字符串,由四个十进制整数组成,包含在0-255之间,用点隔开(例如
192.168.0.1
)每个整数表示地址中的八位字节。只有小于8的值才允许使用前导零(因为此类字符串的十进制和八进制解释之间没有歧义)。一个整型数,可容纳32位。
一个整型
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地址的显示代码。
- 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_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_reserved¶
True
如果地址另有规定,则IETF保留。
- IPv4Address.__format__(fmt)¶
返回IP地址的字符串表示形式,由显式格式字符串控制。 fmt 可以是以下之一:
's'
,默认选项,等效于str()
,'b'
对于填充零的二进制字符串,'X'
或'x'
对于大写或小写的十六进制表示形式,或'n'
,这相当于'b'
对于IPv4地址和'x'
用于IPv6。对于二进制和十六进制表示法,格式说明符'#'
和分组选项'_'
都是有空的。__format__
由以下用户使用format
,str.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地址:
由八组四个十六进制数字组成的字符串,每组代表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
在节点的第一个链接上。一个适合128位的整数。
一个整型
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¶
- is_link_local¶
3.4 新版功能: is_global
- is_site_local¶
True
如果该地址是为站点本地使用而保留的。请注意,站点本地地址空间已被弃用 RFC 3879 . 使用is_private
测试此地址是否在由定义的唯一本地地址空间中 RFC 4193 .
- ipv4_mapped¶
对于似乎是IPv4映射地址的地址(从
::FFFF/96
,此属性将报告嵌入的IPv4地址。对于任何其他地址,此属性将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网络定义¶
这个 IPv4Network
和 IPv6Network
对象提供了定义和检查IP网络定义的机制。网络定义包括 mask 和A 网络地址 ,因此定义了一个IP地址范围,当用掩码屏蔽(二进制和)时,该范围等于网络地址。例如,带有掩码的网络定义 255.255.255.0
以及网络地址 192.168.1.0
由包含范围内的IP地址组成 192.168.1.0
到 192.168.1.255
.
前缀、网络掩码和主机掩码¶
有几种等效的方法来指定IP网络掩码。一 前缀 /<nbits>
表示在网络掩码中设置了多少高阶位的符号。A 网罩 是一个设置了一些高阶位的IP地址。因此,前缀 /24
相当于网络掩码 255.255.255.0
在IPv4中,或 ffff:ff00::
在IPv6中。此外,A 主机掩码 是 网罩 ,并且有时用于(例如在Cisco访问控制列表中)表示网络掩码。主机掩码相当于 /24
在IPv4中 0.0.0.255
.
网络对象¶
由地址对象实现的所有属性也由网络对象实现。此外,网络对象实现其他属性。所有这些都是 IPv4Network
和 IPv6Network
,因此为了避免重复,它们只记录在 IPv4Network
. 网络对象是 hashable ,因此它们可以用作字典中的键。
- class ipaddress.IPv4Network(address, strict=True)¶
构造一个IPv4网络定义。 地址 可以是以下之一:
由IP地址和可选掩码组成的字符串,用斜线分隔。 (
/
)。IP地址是网络地址,掩码可以是单个数字,这意味着它是 前缀 或IPv4地址的字符串表示形式。如果是后者,则该遮罩被解释为 网罩 如果它以非零字段开头,或作为 主机掩码 如果它以一个零字段开头,则作为 网罩 . 如果没有提供面罩,则认为/32
.例如,以下内容 地址 规格相同:
192.168.1.0/24
,192.168.1.0/255.255.255.0
和192.168.1.0/0.0.0.255
.一个整型数,可容纳32位。这相当于一个单地址网络,网络地址为 地址 面具是
/32
.一个整型
bytes
对象长度为4,大尾数。解释类似于整数 地址 .地址描述和网络掩码的两个元组,其中地址描述要么是字符串、32位整数、4字节压缩整数,要么是现有的IPv4Address对象;网络掩码要么是表示前缀长度的整数(例如
24
)或表示前缀掩码的字符串(例如255.255.255.0
)
安
AddressValueError
如果 地址 不是有效的IPv4地址。ANetmaskValueError
如果掩码对IPv4地址无效,则引发。如果 strict 是
True
主机位在提供的地址中设置,然后ValueError
被引发。否则,主机位将被屏蔽,以确定适当的网络地址。除非另有说明,接受其他网络/地址对象的所有网络方法都将引发
TypeError
如果参数的IP版本与不兼容self
.在 3.5 版更改: 为添加了两个元组形式 地址 构造函数参数。
- version¶
- max_prefixlen¶
请参阅中相应的属性文档
IPv4Address
.
- is_multicast¶
- is_private¶
- is_unspecified¶
- is_reserved¶
- is_loopback¶
- is_link_local¶
如果网络地址和广播地址都为真,则这些属性对于整个网络都为真。
- network_address¶
网络的网络地址。网络地址和前缀长度一起唯一地定义了一个网络。
- broadcast_address¶
网络的广播地址。发送到广播地址的数据包应由网络上的每个主机接收。
- hostmask¶
主机掩码,作为
IPv4Address
对象。
- netmask¶
网罩,作为
IPv4Address
对象。
- with_prefixlen¶
- compressed¶
- exploded¶
网络的一种字符串表示法,用前缀表示法表示掩码。
with_prefixlen
和compressed
总是和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
如果该网络部分或全部包含在 other 或 other 完全包含在这个网络中。
- 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_diff 和 new_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_diff 和 new_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 . 在这个比较中,只考虑网络地址;主机位不考虑。返回
-1
,0
或1
.>>> 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网络定义。 地址 可以是以下之一:
由IP地址和可选前缀长度组成的字符串,用斜线分隔。 (
/
)IP地址是网络地址,前缀长度必须是单个数字, 前缀 . 如果没有提供前缀长度,则认为/128
.请注意,当前扩展的网络掩码不受支持。那意味着
2001:db00::0/24
是有效参数,而2001:db00::0/ffff:ff00::
不是。一个适合128位的整数。这相当于一个单地址网络,网络地址为 地址 面具是
/128
.一个整型
bytes
对象长度16,大尾数。解释类似于整数 地址 .地址描述和网络掩码的两个元组,其中地址描述可以是字符串、128位整数、16字节压缩整数或现有的IPV6Address对象;网络掩码是表示前缀长度的整数。
安
AddressValueError
如果 地址 不是有效的IPv6地址。一NetmaskValueError
如果掩码对IPv6地址无效,则引发。如果 strict 是
True
主机位在提供的地址中设置,然后ValueError
被引发。否则,主机位将被屏蔽,以确定适当的网络地址。在 3.5 版更改: 为添加了两个元组形式 地址 构造函数参数。
- version¶
- max_prefixlen¶
- is_multicast¶
- is_private¶
- is_unspecified¶
- is_reserved¶
- is_loopback¶
- is_link_local¶
- 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地址的汇总网络范围的迭代器。 第一 是第一
IPv4Address
或IPv6Address
在范围内和 last 是最后一个IPv4Address
或IPv6Address
在这个范围内。一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)¶
返回折叠的迭代器
IPv4Network
或IPv6Network
物体。 地址 是的迭代器IPv4Network
或IPv6Network
物体。ATypeError
如果 地址 包含混合版本对象。>>> [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')]
自定义异常¶
为了支持来自类构造函数的更具体的错误报告,模块定义了以下异常:
- exception ipaddress.AddressValueError(ValueError)¶
与地址相关的任何值错误。
- exception ipaddress.NetmaskValueError(ValueError)¶
与网络掩码相关的任何值错误。