要使用 Python 验证 IP 地址,可以使用 ipaddress 模块的 ip_address() 函数,适用于 IPv4 和 IPv6 地址。还可以使用自定义函数或正则表达式来验证 IP 地址。
使用 ipaddress 模块验证 IP 地址验证字符串中的数字是否是有效 IP 地址的最简单方法是使用 ipaddress 模块。
使用 ipaddress 模块前请先 pip 安装。
pip install ipaddress
我们打开 Python shell,使用 ipaddress.ip_address() 函数。
>>> import ipaddress>>> ipaddress.ip_address("192.168.1.1")IPv4Address('192.168.1.1')ip_address() 函数返回 IPv4Address 类型的对象,这意味着字符串中包含有效的 IP 地址。
>>> import ipaddress>>> ipaddress.ip_address("192.168.1.300")Traceback (most recent call last): File "<pyshell>", line 1, in <module> File "D:\thonny\lib\ipaddress.py", line 54, in ip_addressValueError: '192.168.1.300' does not appear to be an IPv4 or IPv6 address如果字符串中包含无效的 IP 地址,ip_address() 函数会返回 ValueError 异常。
我们可以自定义一个简单的函数来判断 IP 地址是否有效。
import ipaddress def check_ip(address): try: ip = ipaddress.ip_address(address) print(f"IP 地址有效:{ip}") except ValueError: print(f"IP 地址无效:{address}")check_ip("172.18.1.1")check_ip("192.168.100.100")check_ip("192.168.1.300")# 输出:IP 地址有效:172.18.1.1IP 地址有效:192.168.100.100IP 地址无效:192.168.1.300isinstance() 函数来判断一个对象是否是一个已知的类型。
自定义函数验证 IP 地址自定义函数,通过拆分 IP 地址,并将 IP 地址的每个部分存储到中。使用 len() 函数验证 IP 字符串是否由 4 个数字组成。对于 IP 中的每组数字,验证该数字是否为整数,检查数字是否介于 0 和 255 之间。
def check_ip(address): ip_list = address.split(".") if len(ip_list) != 4: print(f"IP 地址无效:{address}") return False for i in ip_list: if not isinstance(int(i), int): print(f"IP 地址无效:{address}") return False if int(i) < 0 or int(i) > 255: print(f"IP 地址无效:{address}") return False print(f"IP 地址有效:{address}") return Truecheck_ip("172.18.1.1")check_ip("192.168.100.100")check_ip("192.168.1.300")# 输出:IP 地址有效:172.18.1.1IP 地址有效:192.168.100.100IP 地址无效:192.168.1.300使用正则表达式验证 IP 地址可以使用正则表达式验证 IP 地址,以下是使用的匹配模式:
^:表示要匹配的字符串的开头。
$:表示字符串的末尾。
\d{1,3}:包含 1 到 3 位数字的整数。
.:匹配单个点。
完整的 IP 正则匹配规则:
^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$
import re def check_ip(address): match = re.match(r"^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$", address) if bool(match) is False: print(f"IP 地址无效:{address}") return False return True以上代码只能验证 IP 数字格式,需要结合前面代码,验证每个部分的值是否介于 0 和 255 之间。
import re def check_ip(address): match = re.match(r"^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$", address) if bool(match) is False: print(f"IP 地址无效:{address}") return False ip_list = address.split(".") for i in ip_list: if int(i) < 0 or int(i) > 255: print(f"IP 地址无效:{address}") return False print(f"IP 地址有效:{address}") return True check_ip("172.18.1.1")check_ip("192.168.100.100")check_ip("192.168.1.300")# 输出:IP 地址有效:172.18.1.1IP 地址有效:192.168.100.100IP 地址无效:192.168.1.300检查 IP 的类型是 IPv4 还是 IPv6检查 IP 是 IPv4 还是 IPv6 类型的简单方法是使用 ipaddress 模块。ipaddress.ip_address() 函数会创建一个对象,使用 isinstance() 函数来验证所创建对象的类型。
import ipaddressdef check_ip(address): try: ip = ipaddress.ip_address(address) if isinstance(ip, ipaddress.IPv4Address): print(f"{address} 是 IPv4 地址。") elif isinstance(ip, ipaddress.IPv6Address): print(f"{address} 是 IPv6 地址。") except ValueError: print(f"{address} 不是有效 IP 地址。")check_ip("172.18.1.1")check_ip("192.168.100.100")check_ip("192.168.1.300")check_ip("CDCD:910A:2222:5498:8475:1111:3900:2020")# 输出:172.18.1.1 是 IPv4 地址。192.168.100.100 是 IPv4 地址。192.168.1.300 不是有效 IP 地址。CDCD:910A:2222:5498:8475:1111:3900:2020 是 IPv6 地址。❝
文章创作不易,如果您喜欢这篇文章,请关注、点赞并分享给朋友。如有意见和建议,请在评论中反馈!
❞