def check_ip(ip):
parts = ip.split(".") # 对ip字符串进行分割,生成一个列表
if len(parts) != 4: # 判断:ip字段不是4个(即不是完整ip格式:*.*.*.*)
return 1
for i in parts:
if not i.isdigit(): # 判断:该元素不是纯数字(即ip为 abc.*.*.*)
return 1
num = int(i) # 将读取的字符串元素转化为整数型
if num < 0 or num > 255: # 判断:数字是否超出范围
return 1
bin_ip_parts = [bin(int(x))[2:].rjust(8, "0") for x in parts] # 将各个ip字段转化为8位二进制数,并右对齐在左侧补位0
bin_ip = "".join(bin_ip_parts) # 将各部分8位二进制数拼接成整体
return bin_ip
def check_mask(mask):
parts = mask.split(".")
if len(parts) != 4:
return 1
for i in parts:
if not i.isdigit():
return 1
num = int(i)
if num < 0 or num > 255:
return 1
bin_mask_parts = [bin(int(x))[2:].rjust(8, "0") for x in parts]
bin_mask = "".join(bin_mask_parts)
if "0" not in bin_mask: # 判断:掩码二进制数是否全为1(即 255.255.255.255,这是合规掩码)
return bin_mask
first_zero = bin_mask.find("0") # 定位掩码二进制数中第一次出现0的位置
last_one = bin_mask.rfind("1") # 定位掩码二进制数中最后出现1的位置
if last_one + 1 == first_zero: # 判断:最后出现1的位置+1是否等于第一次出现0的位置(即 前面全是1,后面全是0)
return bin_mask
else:
return 1
def main():
while True:
try:
mask = input().strip() # 依次接收输入集
ip1 = input().strip()
ip2 = input().strip()
res_ip1 = check_ip(ip1) # 依次接收函数返回值
res_ip2 = check_ip(ip2)
res_mask = check_mask(mask)
if res_ip1 == 1 or res_ip2 == 1 or res_mask == 1: # 判断:如果任意一个检查函数返回值为1(即 ip或掩码有非法)
print(1) # 打印结果1
else: # 若检查结果均为通过(即 ip和掩码都是合法的)
network1 = int(res_ip1, 2) & int(res_mask, 2) # 将函数返回的拼接后的二进制字符串转化为对应的整数型,再进行and运算
network2 = int(res_ip2, 2) & int(res_mask, 2)
if network1 == network2: # 如果ip1-mask和ip2-mask最后的and运算结果一致
print(0) # 表示IP1、IP2在同一网络下
else:
print(2) # 表示IP1、IP2不在同一网络下
except EOFError:
break
if __name__ == "__main__":
main()