Internet协议当前正在从版本4迁移到版本6。这是必需的,因为版本4没有提供足够的地址来处理越来越多的具有直接连接到Internet的设备。
IPv4地址由32位组成,表示为四个八位组,称为“八位字节”。这是一种“点分十进制”格式,其中每个八位八位字节都可以具有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地址返回一个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地址返回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地址返回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模块定义以下类:
该构造函数返回一个IPv4地址对象。
有效的IPv4地址通过以下方式标识:
以十进制点表示的字符串,由四个小数点组成,范围在0到255之间(包括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')
构造一个IPv6地址。
有效的IPv6地址的构成如下:
由八组四个十六进制数字组成的字符串,每组代表16位。各组之间用冒号隔开。
可以容纳128位的整数。
打包为长度为16的字节对象的整数,字节序为big-endian。
>>> 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