在 Python 中验证 IP 地址
假设我们有一个字符串;我们必须检查给定的输入是有效的 IPv4 地址还是 IPv6 地址,或者都不是。
IPv4 地址通常以点分十进制表示法表示,由四个十进制数字组成,每个数字的范围从 0 到 255,以点(".")分隔,例如 192.168.254.1;此外,IPv4 地址中的前导零是无效的。例如,地址 192.168.254.01 是无效的。
IPv6 地址表示为八组四个十六进制数字,每组代表 16 位。各组以冒号(":")分隔。例如,假设地址为 2001:0db8:85a3:0000:0000:8a2e:0370:7334 是一个有效地址。另外,我们可以省略四个十六进制数字中的前导零,并将地址中的一些小写字符改为大写,因此 2001:db8:85a3:0:0:8A2E:0370:7334 这个地址也是一个有效地址。
但是,为了简单起见,我们不会用两个连续的冒号 (::) 将连续的零值组替换为单个空组。因此,例如 2001:0db8:85a3::8A2E:0370:7334 是一个无效的 IPv6 地址。此外,IPv6 中的额外前导零也是无效的。地址 02001:0db8:85a3:0000:0000:8a2e:0370:7334 无效。
为了解决这个问题,我们将遵循以下步骤 −
定义一个方法 checkv4(x),它将检查 x 是否在 0 到 255 的范围内,如果为 true,则为 false
定义一个方法 checkv6(x),它将按如下方式工作 −
如果 x 的大小 > 4,则返回 false
如果 x 的十进制等价值 >= 0 且 x[0] 不是 ‘-’,则返回 true,否则返回 false
来自 main 方法
如果输入有三个点,并且对于每个部分,我 checkv4(i) 都为真,则返回 “IPv4”
如果输入有七个冒号,并且对于每个部分,我 checkv6(i) 都为真,则返回 “IPv6”
示例 (Python)
让我们看下面的实现,以便更好地理解 −
class Solution(object):
def validIPAddress(self, IP):
"""
:type IP: str
:rtype: str
"""
def isIPv4(s):
try: return str(int(s)) == s and 0 <= int(s) <= 255
except: return False
def isIPv6(s):
if len(s) > 4:
return False
try : return int(s, 16) >= 0 and s[0] != '-'
except:
return False
if IP.count(".") == 3 and all(isIPv4(i) for i in IP.split(".")):
return "IPv4"
if IP.count(":") == 7 and all(isIPv6(i) for i in IP.split(":")):
return "IPv6"
return "Neither"
ob = Solution()
print(ob.validIPAddress("172.16.254.1"))
输入
"172.16.254.1"
输出
"IPv4"
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

