Python 程序检查给定的字符串是 IPv4 还是 IPv6 或无效

pythonserver side programmingprogramming

IP 地址是 Internet 协议地址的缩写形式,它是分配给连接到使用 Internet 协议进行通信的计算机网络的每个设备的数字标签。它用作设备的标识符,允许设备通过网络发送和接收数据。通常使用的 IP 地址有两种版本:

IPv4(Internet 协议版本 4):

这是最广泛使用的 IP 地址版本。它由四组用句点分隔的数字组成,例如"192.168.0.1"。每组可以具有 0 到 255 之间的值,总共代表超过 40 亿个唯一地址。

IPv6(Internet 协议版本 6):

这是较新版本的 IP 地址,旨在解决 IPv4 的限制并提供更大的地址空间。 IPv6 地址以十六进制书写,并以冒号分隔,例如"2001:0db8:85a3:0000:0000:8a2e:0370:7334"。IPv6 地址长度为 128 位,可以容纳大量唯一地址

IP 地址对于设备通过互联网相互通信至关重要。它们用于在网络通信期间识别数据包的来源和目的地。

在 Python 中,我们可以使用各种模块和库(例如 socket、ipaddress)处理 IP 地址,或者使用正则表达式来验证和操作 IP 地址。这些模块提供函数和类来解析、验证和操作 Python 程序中的 IP 地址。

有几种方法可以使用 Python 检查 IPv4 或 IPv6 或无效的 ip 地址。让我们来看看每种方法。

使用 ipaddress 模块

在 Python 中,我们有 ipaddress 模块,它提供函数 ip_address(),用于检查给定的输入是否为有效的 IP 地址。此函数将字符串作为输入参数。

示例

在此示例中,我们将字符串作为输入参数传递给 ip_address() 函数,并检查给定的输入 IP 地址是否有效。

import ipaddress
def check_ip_address(ip):
   try:
      ipaddress.ip_address(ip)
      if ":" in ip:
         return "IPv6"
      else:
         return "IPv4"
   except ValueError:
      return "Invalid"
ip_address = "2001:0db8:85a3:0000:0000:8a2e:0370:7334"
result = check_ip_address(ip_address)
print(ip_address,"is related to",result)  

输出

2001:0db8:85a3:0000:0000:8a2e:0370:7334 is related to IPv6

使用正则表达式模块

正则表达式模块用于在给定的输入字符串中搜索定义的模式。它被导入为 re。我们在 re 模块中有一个名为 match() 的函数,它使用模式来检查给定字符串中的 Ip 地址模式,然后它将返回找到的行,否则将返回 null 或 None 作为输出。

示例

在此示例中,我们分别将 ipv4 和 ipv6 的模式作为 r'^(\d{1,3}\.){3}\d{1,3>$' 和 r'^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4>$' 传递给 re 模块的 match() 函数。如果找到匹配项,则根据模式返回 Ipv4 或 Ipv6,否则返回 Invalid。

import re
def check_ip_address(ip):
   ipv4_pattern = r'^(\d{1,3}\.){3}\d{1,3}$'
   ipv6_pattern = r'^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$'
   if re.match(ipv4_pattern, ip):
      return "IPv4"
   elif re.match(ipv6_pattern, ip):
      return "IPv6"
   else:
      return "Invalid"
ip_address = "192.168.0.1"
result = check_ip_address(ip_address)
print(ip_address,"is related to",result)  

输出

192.168.0.1 is related to IPv4

相关文章