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