判断子网掩码那里,没有用正则(因为我不会。。。)
把4个int分别转2进制再拼接出完整的子网掩码2进制形式,再进行判断
a = b = c = d = e = privateIP = wrongIP = 0
def isLegalMask(inputMask):# 定义函数判断子网掩码合法性
if not inputMask&nbs***bsp;inputMask == "":
return False
MaskList = list(map(str,Mask.split(".")))
if len(MaskList) == 4 and "" not in MaskList:
MaskPart1,MaskPart2,MaskPart3,MaskPart4 = map(int,Mask.split("."))
binaryMaskPart1 = bin(MaskPart1)[2:].rjust(8,"0")
binaryMaskPart2 = bin(MaskPart2)[2:].rjust(8,"0")
binaryMaskPart3 = bin(MaskPart3)[2:].rjust(8,"0")
binaryMaskPart4 = bin(MaskPart4)[2:].rjust(8,"0")
binaryMask = binaryMaskPart1+binaryMaskPart2+binaryMaskPart3+binaryMaskPart4
else:
return False
if "1" in binaryMask and "0" in binaryMask:
if binaryMask.rfind("1") > binaryMask.find("0"):
return False
else:
return True
else:
return False
def isLegalIP(inputIP):
if not inputIP&nbs***bsp;inputIP == "":
return False
IPList = list(map(str,IP.split(".")))
if len(IPList) == 4 and "" not in IPList:
if int(IPList[0])<0&nbs***bsp;int(IPList[0])>255:
return False
else:
return True
else:
return False
def isPirvateIP(inputIP):
IPList = list(map(int,inputIP.split(".")))
if IPList[0] == 10:
return True
if IPList[0]== 172:
if IPList[1] >= 16 and IPList[1] <= 31:
return True
if IPList[0] == 192 and IPList[1] == 168:
return True
try:
while True:
#首先接收输入数据
inpt = str(input())
IP, Mask = inpt.split("~")
#第二步判断IP地址 和 子网掩码合法性
if not isLegalMask(Mask)&nbs***bsp;not isLegalIP(IP):
wrongIP += 1
else:# 若合法则进一步判断私有和类型
if isPirvateIP(IP):
privateIP += 1
IPList = list(map(int,IP.split(".")))
if 126 >= IPList[0] >= 1:
a += 1
if 191 >= IPList[0] >= 128:
b += 1
if 223 >= IPList[0] >= 192:
c += 1
if 239 >= IPList[0] >= 224:
d += 1
if 255 >= IPList[0] >= 240:
e += 1
except:
print(a,b,c,d,e,wrongIP,privateIP) 


京公网安备 11010502036488号