1、先判断掩码是否正确,主要是掩码数字字符、网络段与主机段,是否都符合要求。
2、再判断两个ip是否正确,主要是数字字符是否符合要。
3、最后两个ip地址与子网掩码分段二进制位与运算,判断是否在同一个网段。
import sys
for line in sys.stdin:#建议采用循环输入或子函数
mask = list(map(int, line.split(".")))
ip1 = list(map(int, input().split(".")))
ip2 = list(map(int, input().split(".")))
bima = ""#存储子网掩码的二进制形式
ermk = False#子网掩码的数字是否有误
for i in range(4):#判断子网掩码的数字是否符合要求,并分段把子网掩码转化为二进制形式
if mask[i] < 0 or mask[i] > 255:
ermk = True
print(1)
break
bm = bin(mask[i])[2:]
bima += "0" * (8 - len(bm)) + bm
if ermk:
continue
if "0" in bima.rstrip("0") or "1" in bima.lstrip("1"):#判断子网掩码的主机段和网络段是否符合要求
print(1)
continue
erip = False#ip地址的数字是否有误
for i in range(4):
if ip1[i] < 0 or ip1[i] > 255 or ip2[i] < 0 or ip2[i] > 255:
erip = True
print(1)
break
if erip:
continue
iscn = True#与子网掩码分段位与运算,判断两个IP是否在同一个网段
for i in range(4):
if ip1[i] & mask[i] != ip2[i] & mask[i]:
iscn = False
print(2)
break
if iscn:
print(0)



京公网安备 11010502036488号