# 请解析IP地址和对应的掩码,进行分类识别。要求按照A/B/C/D/E类地址归类,不合法的地址和掩码单独归类。
# 所有的IP地址划分为 A,B,C,D,E五类
# A类地址从1.0.0.0到126.255.255.255;
# B类地址从128.0.0.0到191.255.255.255;
# C类地址从192.0.0.0到223.255.255.255;
# D类地址从224.0.0.0到239.255.255.255;
# E类地址从240.0.0.0到255.255.255.255
# 要求地址的IP和掩码全部真确,才能计入
# # A、B、C、D、E、错误IP地址或错误掩码、私有IP的个数
# res = [0, 0, 0, 0, 0, 0, 0]
def isip(ip):
# 判断长度
if 1 <= ip[0] <= 126:
res[0] += 1
elif 128 <= ip[0] <= 191:
res[1] += 1
elif 192 <= ip[0] <= 223:
res[2] += 1
elif 224 <= ip[0] <= 239:
res[3] += 1
elif 240 <= ip[0] <= 255:
res[4] += 1
else:
res[5] += 1
# 私有IP判断
# 私网IP范围是:
# 从10.0.0.0到10.255.255.255
# 从172.16.0.0到172.31.255.255
# 从192.168.0.0到192.168.255.255
def is_syip(ip):
if ip[0] == 10:
res[6] += 1
elif ip[0] == 172 and 16 <= ip[1] <= 31:
res[6] += 1
elif ip[0] == 192 and ip[1] == 168:
res[6] += 1
# 判断掩码是否为合格掩码,前面全是1,后面全是0,不存在1和0交叉的情况
def isym(ym):
# print(ym)
yms = '' # 存储转为2进制且拼接起来的值
for i in ym:
j = str(bin(i)).replace('0b', '')
j = '0' * (8 - len(j)) + j
yms += j
# print(yms)
index0 = yms.find('0') # 从左到右 0 第一次出现的位置
index1 = yms.rfind('1') # 从右到左 1 第一次出现的位置
# 易知:当为在正常的掩码是,index0 - index1 的值应 恒等于 1
if index0 != -1 and index1 != -1 and index0 - index1 == 1:
return True
else:
return False
# 声明全局变量,保存结果
# A、B、C、D、E、错误IP地址或错误掩码、私有IP的个数
if __name__ == '__main__':
res = [0, 0, 0, 0, 0, 0, 0]
while True:
try:
ip, ym = input().split('~')
ip = list(map(int, filter(None, ip.split('.'))))
ym = list(map(int, ym.split('.')))
if ip[0] == 0 or ip[0] == 127:
continue
elif len(ip) == 4 and len(ym) == 4:
if isym(ym):
# 掩码判断真确,进行IP的判断
isip(ip)
# 私有IP判断
is_syip(ip)
else:
res[5] += 1
else:
res[5] += 1 # 掩码错误,计数 + 1
except:
break
print(' '.join(list(map(str, res))))