Python 程序检查给定的字符串是 IPv4 还是 IPv6 或无效
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