判断子网掩码那里,没有用正则(因为我不会。。。)
把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)