ipaddress - Python 中的 IPv4/IPv6 操作库


互联网协议目前正在从版本 4 迁移到版本 6。这是因为版本 4 无法提供足够的地址来处理连接到互联网的设备数量的增加。

IPv4 地址由 32 位组成,表示为四个 8 位组,称为“八位字节”。这是一种“点分十进制”格式,其中每个 8 位八位字节可以具有 0 到 255 的十进制值。

例如: 192.168.1.1

带有 CIDR 表示法的 IPv4 地址:192.168.1.1/24,其中 24 表示前三个八位字节标识网络,最后一个八位字节标识节点。

IPv6 地址长 128 位。它使用十六进制表示法。IPv6 地址中的每个位置表示 4 位,其值从 0 到 f。128 位分为 8 个 16 位分组,每个分组之间用冒号分隔。

示例:2001:db8:abcd:100::1/64

所有 IPv6 地址都使用 CIDR 表示法来确定前导位中有多少用于网络标识,其余用于主机/接口标识。

Python 的标准库具有 ipaddress 模块,该模块提供了创建、操作和操作 IPv4 和 IPv6 地址和网络的功能。

该模块提供以下工厂函数,以便于创建 IP 地址、网络和接口

ip_address()

根据作为参数传递的 IP 地址返回 IPv4Address 或 IPv6Address 对象。可以提供 IPv4 或 IPv6 地址。

>>> import ipaddress
>>> ipaddress.ip_address('192.168.0.1')
IPv4Address('192.168.0.1')
>>> ipaddress.ip_address('2001:ab7::')
IPv6Address('2001:ab7::')

ip_network()

根据作为参数传递的 IP 地址返回 IPv4Network 或 IPv6Network 对象。

>>> ipaddress.ip_network('192.168.100.0/24')
IPv4Network('192.168.100.0/24')
>>> ipaddress.ip_network('2001:db8:abcd:100::/64')
IPv6Network('2001:db8:abcd:100::/64')

ip_interface()

根据作为参数传递的 IP 地址返回 IPv4Interface 或 IPv6Interface 对象。

>>> ipaddress.ip_interface('192.168.100.10/24')
IPv4Interface('192.168.100.10/24')
>>> ipaddress.ip_interface('2001:db8:abcd:100::1/64')
IPv6Interface('2001:db8:abcd:100::1/64')

ipaddress 模块定义了以下类

IPv4Address(address)

此构造函数返回一个 IPv4 地址对象。

有效的 IPv4 地址由以下内容标识

以点分十进制表示法的字符串,由四个介于 0 到 255(含)之间的十进制整数组成,并用点分隔(例如 192.168.0.1)。

其二进制等效值为 32 位的整数。

打包到长度为 4 的字节对象中的整数(最显著的八位字节在前)。

>>> ipaddress.IPv4Address('192.168.0.1')
IPv4Address('192.168.0.1')
>>> ipaddress.IPv4Address(3162581505)
IPv4Address('188.129.42.1')
>>> ipaddress.IPv4Address(b'\xC0\xA8\x00\x01')
IPv4Address('192.168.0.1')

IPv6Address()

构造 IPv6 地址。

有效的 IPv6 地址构成如下

由八组四个十六进制数字组成的字符串,每组表示 16 位。各组之间用冒号分隔。

适合 128 位的整数。

打包到长度为 16 的字节对象中的整数,大端序。

>>> ipaddress.IPv6Address('2001:db8::1000')
IPv6Address('2001:db8::1000')
>>> ipaddress.IPv6Address("::abc:7:def")
IPv6Address('::abc:7:def')

版本

返回相应的版本号

>>> add = ipaddress.IPv4Address('192.168.0.1')
>>> add.version
4
>>> ip = ipaddress.IPv6Address('2001:db8::1000')
>>> ip.version
6

更新于: 2019 年 7 月 30 日

754 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告