判断一个IP地址是ipv4还是ipv6
ipv4格式:
172.16.254.1 Y
172.16.254.01 N
ipv6格式:
2001:0db8:85a3:0000:0000:8a2e:0370:7334 Y
2001:db8:85a3:0:0:8A2E:0370:7334 Y
2001:0db8:85a3::8A2E:0370:7334 N
02001:0db8:85a3:0000:0000:8a2e:0370:7334 N
IPV4:
1.分片后长度为4
2.每个分片均为数字--非零数字不能以0打头--数字在0到255之间
ipv6:
1.分片后长度为8
2.单个分片长度不能为零,不能大于四,每个分片不能出现异常字符
class Solution:
def validIPAddress(self, IP):def isIPv4(ip):
s=ip.split(".")
if len(s)!=4:
return False
for i in range(4):
try:
if not s[i].isdigit() or int(s[i])<0 or int(s[i])>255:
return False
if s[i][0]=='0' and len(s[i])>1:
return False
except:
return False
return True
def isIPv6(ip):
s=ip.split(":")
legal_char=set("0123456789ABCDEFabcdef")
if len(s)!=8:
return False
for i in range(8):
if len(s[i])>4 or len(s[i])==0:
return False
if set(s[i])|legal_char !=legal_char:
return False
return True
if isIPv4(IP):
return "IPv4"
elif isIPv6(IP):
return "IPv6"
else:
return "Neither"