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


IP 地址是互联网协议地址的简称,它是一个分配给连接到使用互联网协议进行通信的计算机网络的每个设备的数字标签。它充当设备的标识符,允许它在网络上发送和接收数据。目前常用的 IP 地址有两个版本。

IPv4(互联网协议版本 4)

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

IPv6(互联网协议版本 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

更新于: 2023-10-19

1K+ 浏览量

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告