📜  Python -IP地址

📅  最后修改于: 2020-11-06 06:25:52             🧑  作者: Mango


IP地址(Internet协议)是一种基本的网络概念,可在网络中提供地址分配功能。 Python模块ipaddress广泛用于验证IP地址并将其分类为IPV4和IPV6类型。它也可以用于比较IP地址值以及用于处理ip地址的IP地址算法。

验证IPV4地址

ip_address函数验证IPV4地址。如果值的范围超出0到255,则将引发错误。

print (ipaddress.ip_address(u'192.168.0.255'))
print (ipaddress.ip_address(u'192.168.0.256'))

当我们运行上面的程序时,我们得到以下输出-

192.168.0.255
ValueError: u'192.168.0.256' does not appear to be an IPv4 or IPv6 address

验证IPV6地址

ip_address函数验证IPV6地址。如果值的范围超出0到ffff,则将引发错误。

print (ipaddress.ip_address(u'FFFF:9999:2:FDE:257:0:2FAE:112D'))

#invalid IPV6 address
print (ipaddress.ip_address(u'FFFF:10000:2:FDE:257:0:2FAE:112D'))

当我们运行上面的程序时,我们得到以下输出-

ffff:9999:2:fde:257:0:2fae:112d
ValueError: u'FFFF:10000:2:FDE:257:0:2FAE:112D' does not appear to be an IPv4 or IPv6 address

检查IP地址的类型

我们可以提供各种格式的IP地址,并且该模块将能够识别有效格式。它还将指示它是IP地址的类别。

print type(ipaddress.ip_address(u'192.168.0.255'))

print type(ipaddress.ip_address(u'2001:db8::'))

print ipaddress.ip_address(u'192.168.0.255').reverse_pointer

print ipaddress.ip_network(u'192.168.0.0/28')

当我们运行上面的程序时,我们得到以下输出-

255.0.168.192.in-addr.arpa
192.168.0.0/28

IP地址比较

我们可以对IP地址进行逻辑比较,以确定它们是否相等。我们还可以比较一个IP地址的值是否大于另一个IP地址的值。

print (ipaddress.IPv4Address(u'192.168.0.2') > ipaddress.IPv4Address(u'192.168.0.1'))
print (ipaddress.IPv4Address(u'192.168.0.2') == ipaddress.IPv4Address(u'192.168.0.1'))
print (ipaddress.IPv4Address(u'192.168.0.2') != ipaddress.IPv4Address(u'192.168.0.1'))

当我们运行上面的程序时,我们得到以下输出-

True
False
True

IP地址算法

我们还可以应用算术运算来操纵IP地址。我们可以在IP地址中添加或减去整数。如果相加后最后一个八位位组的值超过255,则前一个八位位组将递增以容纳该值。如果多余的值不能被任何先前的八位字节吸收,则将引发值错误。

print (ipaddress.IPv4Address(u'192.168.0.2')+1)

print (ipaddress.IPv4Address(u'192.168.0.253')-3)

# Increases the previous octet by value 1.
print (ipaddress.IPv4Address(u'192.168.10.253')+3)

# Throws Value error
print (ipaddress.IPv4Address(u'255.255.255.255')+1)

当我们运行上面的程序时,我们得到以下输出-

192.168.0.3
192.168.0.250
192.168.11.0
AddressValueError: 4294967296 (>= 2**32) is not permitted as an IPv4 address