📅  最后修改于: 2023-12-03 15:06:54.168000             🧑  作者: Mango
IP地址是互联网通信的基础,因此在开发网络应用时,经常需要对IP地址进行验证。正则表达式(RegEx)是一种常用的验证IP地址的方法,但是对于那些不熟悉正则表达式的开发者来说,使用Python也是一种简单有效的验证IP地址的方法。
ipaddress
Python内置了一个名为ipaddress
的模块,可以轻松验证IP地址,这个模块提供了一个IPv4Address
和一个IPv6Address
类。
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地址组成比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
如果不想使用ipaddress
模块,也可以通过手动验证IP地址字段来验证IP地址。
使用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
使用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地址也是一个不错的选择。