📜  在Python中使用 IP 地址

📅  最后修改于: 2022-05-13 01:55:21.817000             🧑  作者: Mango

在Python中使用 IP 地址

IP(互联网协议)-地址是计算机网络的基本概念,它为网络提供地址分配功能。 Python提供了ipaddress模块,用于根据 IP 地址的类型(IPv4 或 IPv6)验证和分类 IP 地址。该模块还用于执行广泛的操作,如算术、比较等,以操纵 IP 地址。

验证 IP 地址-

为了验证 IP 地址, Python使用ipaddress模块提供的ip_address()函数,如果 IP 值超出 IP 地址类型的范围,则会引发错误。

  • IPv4 :它是一个 32 位数字,通常用十进制数字编写,格式为由点分隔的四个 8 位数字,用于标识机器的网络接口。如果范围值超过 0 到 255,则ip_address()函数会抛出错误。
Python3
# Import module
import ipaddress
 
# Example of valid IPv4 address
print (ipaddress.ip_address(u'175.198.42.211'))
 
# Invalid IPv4 address raises error
print (ipaddress.ip_address(u'175.198.42.270'))


Python3
# Import module
import ipaddress
 
# Example of valid IPv6 address
print (ipaddress.ip_address(u'2001:0db8:85a3:2bfe:070d:8a2e:0370:7334'))
 
# Invalid IPv6 address raises error
print (ipaddress.ip_address(u'2001:0db8:85a3:0ff0:00000:8a2e:0370:7334'))


Python3
# Import module
import ipaddress
 
# IPv4 address
print(type(ipaddress.ip_address(u'175.198.42.211')))
print(type(ipaddress.ip_address(u'5.0.0.1')))
 
# IPv6 address
print(type(ipaddress.ip_address(u'2001:0db8:85a3:2bfe:070d:8a2e:0370:7334')))
print(type(ipaddress.ip_address(u'0000:f0f0::7b8a:ffff')))


Python3
# Import module
import ipaddress
 
# Comparison
print(ipaddress.IPv4Address(u'175.199.42.211') >
      ipaddress.IPv4Address(u'175.198.42.255'))
 
print(ipaddress.IPv6Address(u'2001:0db8:85a3:2bfe:070d:8a2e:0370:7334')
      == ipaddress.IPv6Address(u'2001:0dff:85a3:2bfe:070d:8a2e:0370:7334'))
 
print(ipaddress.IPv4Address(u'179.198.42.211') !=
      ipaddress.IPv4Address(u'175.198.42.255'))
 
print(ipaddress.IPv6Address(u'2001:0db8:85a3:2bfe:070d:8a2e:0370:7334') <
      ipaddress.IPv6Address(u'2001:0dff:85a3:2bfe:070d:8a2e:0370:7334'))


Python3
# Import module
import ipaddress
 
# Arithmetic Operation on IPv4 address
print(ipaddress.IPv4Address(u'129.117.0.0')-6)
print (ipaddress.IPv4Address(u'175.199.42.211')+55)
print (ipaddress.IPv4Address(u'0.0.0.0')-1)
print (ipaddress.IPv4Address(u'255.255.255.255')+1)
 
# Arithmetic Operation on IPv6 address
print (ipaddress.IPv6Address(u'2001:0db8:85a3:2bfe:070d:8a2e:0370:7334')-330)
print (ipaddress.IPv6Address(u'2001:0db8:85a3:2bfe:070d:8a2e:0370:7334')+1000)
print (ipaddress.IPv6Address(u'0000::0000')-1)
print (ipaddress.IPv6Address(u'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff')+1)


输出 :

  • IPv6:由八组四位十六进制数字表示,中间用冒号隔开,每组代表16位,两个八位字节也称为十六进制。如果范围值超过 0 到 FFFF, ip_address()函数会抛出错误。

蟒蛇3

# Import module
import ipaddress
 
# Example of valid IPv6 address
print (ipaddress.ip_address(u'2001:0db8:85a3:2bfe:070d:8a2e:0370:7334'))
 
# Invalid IPv6 address raises error
print (ipaddress.ip_address(u'2001:0db8:85a3:0ff0:00000:8a2e:0370:7334'))

输出 :

IP地址操作-

借助ipaddress模块,可以对 IP 地址进行算术、比较、类型等各种操作。下面列出了一些操作:

  • Type Check操作: type()方法以各种格式的IP地址为输入,识别是IPv4还是IPv6地址,指示IP地址的类别。

蟒蛇3

# Import module
import ipaddress
 
# IPv4 address
print(type(ipaddress.ip_address(u'175.198.42.211')))
print(type(ipaddress.ip_address(u'5.0.0.1')))
 
# IPv6 address
print(type(ipaddress.ip_address(u'2001:0db8:85a3:2bfe:070d:8a2e:0370:7334')))
print(type(ipaddress.ip_address(u'0000:f0f0::7b8a:ffff')))

输出 :

  • IP 比较操作:基本逻辑运算符可用于比较 IP 地址,无论一个值是否等于或大于或小于另一个值。

蟒蛇3

# Import module
import ipaddress
 
# Comparison
print(ipaddress.IPv4Address(u'175.199.42.211') >
      ipaddress.IPv4Address(u'175.198.42.255'))
 
print(ipaddress.IPv6Address(u'2001:0db8:85a3:2bfe:070d:8a2e:0370:7334')
      == ipaddress.IPv6Address(u'2001:0dff:85a3:2bfe:070d:8a2e:0370:7334'))
 
print(ipaddress.IPv4Address(u'179.198.42.211') !=
      ipaddress.IPv4Address(u'175.198.42.255'))
 
print(ipaddress.IPv6Address(u'2001:0db8:85a3:2bfe:070d:8a2e:0370:7334') <
      ipaddress.IPv6Address(u'2001:0dff:85a3:2bfe:070d:8a2e:0370:7334'))

输出 :

  • 算术运算:可以通过执行一些算术运算来操纵 IP 地址。可以从 IP 地址中添加或减去整数。在加法下,如果最后一个八位字节的值超过 255,则前一个八位字节递增,依此类推,如果最后一个八位字节的值小于零,则减法的情况相同,则前一个八位字节递减,依此类推。

蟒蛇3

# Import module
import ipaddress
 
# Arithmetic Operation on IPv4 address
print(ipaddress.IPv4Address(u'129.117.0.0')-6)
print (ipaddress.IPv4Address(u'175.199.42.211')+55)
print (ipaddress.IPv4Address(u'0.0.0.0')-1)
print (ipaddress.IPv4Address(u'255.255.255.255')+1)
 
# Arithmetic Operation on IPv6 address
print (ipaddress.IPv6Address(u'2001:0db8:85a3:2bfe:070d:8a2e:0370:7334')-330)
print (ipaddress.IPv6Address(u'2001:0db8:85a3:2bfe:070d:8a2e:0370:7334')+1000)
print (ipaddress.IPv6Address(u'0000::0000')-1)
print (ipaddress.IPv6Address(u'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff')+1)

输出 :