import sys import re pattern = r'^([0-9]{1,3}.){3}([0-9]{1,3}){1}$' DATA = [] for line in sys.stdin: DATA.append(line.strip()) # 使用strip()删除每行末尾的换行符 A, B, C, D, E, F, L = 0, 0, 0, 0, 0, 0, 0 for data in DATA: data = data.split('~') ip = re.match(pattern, data[0]) dom = re.match(pattern, data[1]) # 判断是否匹配不合法 if ip is None or dom is None: F += 1 print(ip, dom) continue # 判断是否数值不合法 ip, dom = ip.group(), dom.group() ip, dom = ip.split('.'), dom.split('.') ip = [int(x) for x in ip] dom = [int(x) for x in dom] def catch_256 (arr): for i in range(4): if arr[i]>255: return True return False if catch_256(ip) or catch_256(dom): F+=1 # print(ip, dom) continue # 不计数 if ip[0] == 0 or ip[0] == 127: continue # 判断掩码是否合法 dom_x = 0 for d in dom: dom_x = dom_x * 256 + d dom_bin = bin(dom_x) dom_re = re.match(r'^0b1+0+$', dom_bin) if dom_re is None: F += 1 # print(ip, dom) continue # 判断是否是私网 if ip[0] == 10: L += 1 # continue elif ip[0] == 172 and ip[1] >= 16 and ip[1] <= 31: L += 1 # continue elif ip[0] == 192 and ip[1] == 168: L+= 1 # continue if ip[0] > 0 and ip[0] <= 126: A += 1 # print('A:', ip, dom) continue elif ip[0] >= 128 and ip[0] <= 191: B += 1 continue elif ip[0] >= 192 and ip[0] <= 223: C += 1 continue elif ip[0] >= 224 and ip[0] <= 239: D += 1 continue elif ip[0] >= 240 and ip[0] <= 255: E += 1 continue print(A, B, C, D, E, F, L )