📜  使用Python验证 IP 地址而不使用 RegEx(1)

📅  最后修改于: 2023-12-03 15:06:54.168000             🧑  作者: Mango

使用Python验证 IP 地址而不使用 RegEx

IP地址是互联网通信的基础,因此在开发网络应用时,经常需要对IP地址进行验证。正则表达式(RegEx)是一种常用的验证IP地址的方法,但是对于那些不熟悉正则表达式的开发者来说,使用Python也是一种简单有效的验证IP地址的方法。

Python内置模块ipaddress

Python内置了一个名为ipaddress的模块,可以轻松验证IP地址,这个模块提供了一个IPv4Address和一个IPv6Address类。

验证IPv4地址

IPv4地址由四个十进制数字组成,每个数字的范围是0~255,地址与地址之间使用“.”分隔。

import ipaddress

ip = '127.0.0.1'
try:
    ipaddress.IPv4Address(ip)
    print("Valid IPv4 address")
except ipaddress.AddressValueError:
    print("Invalid IPv4 address")

输出:

Valid IPv4 address
验证IPv6地址

IPv6地址组成比IPv4更加复杂。IPv6地址由8个16位的十六进制数字组成,这些数字用“:”连接。IPv6地址通常还包括压缩表示法,其中一些0位省略,用两个连续的“:”表示。

import ipaddress

ip = '2001:0db8:85a3:0000:0000:8a2e:0370:7334'
try:
    ipaddress.IPv6Address(ip)
    print("Valid IPv6 address")
except ipaddress.AddressValueError:
    print("Invalid IPv6 address")

输出:

Valid IPv6 address
手动验证IP地址

如果不想使用ipaddress模块,也可以通过手动验证IP地址字段来验证IP地址。

验证IPv4地址

使用split函数将IP地址分解为4个十进制数字,然后确保每个数字在0~255之间。

def is_valid_ipv4_address(ip):
    try:
        parts = ip.split('.')
        if len(parts) != 4:
            return False
        for part in parts:
            if not 0 <= int(part) <= 255:
                return False
    except ValueError:
        return False
    return True

ip = '127.0.0.1'
if is_valid_ipv4_address(ip):
    print("Valid IPv4 address")
else:
    print("Invalid IPv4 address")

输出:

Valid IPv4 address
验证IPv6地址

使用split函数将IPv6地址分解为8个十六进制数字,然后确保每个数字都是一个有效的十六进制数字。

def is_valid_ipv6_address(ip):
    try:
        parts = ip.split(':')
        if len(parts) != 8:
            return False
        for part in parts:
            if not 0 <= int(part, 16) <= 65535:
                return False
    except ValueError:
        return False
    return True

ip = '2001:0db8:85a3:0000:0000:8a2e:0370:7334'
if is_valid_ipv6_address(ip):
    print("Valid IPv6 address")
else:
    print("Invalid IPv6 address")

输出:

Valid IPv6 address
结论

Python提供了一个简单而直观的方法来验证IP地址,使用Python内置模块ipaddress可以轻松地验证IPv4和IPv6地址,如果不想使用模块,我们也可以手动验证IP地址。虽然正则表达式是验证IP地址的另一种常用方法,但对于那些不熟悉正则表达式的开发者来说,使用Python验证IP地址也是一个不错的选择。