这篇文章主要讲解了“python怎么判断两个ip是否属于同一个子网”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python怎么判断两个ip是否属于同一个子网”吧!
import re class IsSameAddr(object): # 初始化 def __init__(self, ip, mask): self.ip = ip self.mask = mask # 子网掩码正则 def check_mask(self): pattern = '^((128|192)|2(24|4[08]|5[245]))(\.(0|(128|192)|2((24)|(4[08])|(5[245])))){3}$' res = re.match(pattern, self.mask) if not res: return False return True # ip/子网掩码转为二进制 def _addr_to_bin(self, addr): ip_list = addr.split('.') if len(ip_list) != 4: exit(1) temp_ip_list = [] for ip_str in ip_list: ip_str = int(ip_str) if ip_str > 255 or ip_str < 0: exit(1) temp_ip_list.append(bin(ip_str)) ip_list = temp_ip_list return ip_list # ip转为二进制 def ip_to_bin(self): ip_list = self.ip.split('.') if len(ip_list) != 4: return 1 temp_ip_list = [] for ip_str in ip_list: ip_str = int(ip_str) if ip_str > 255 or ip_str < 0: return 1 temp_ip_list.append(bin(ip_str)) ip_list = temp_ip_list return ip_list # 子网掩码转为二进制 def mask_to_bin(self): if not self.check_mask(): return 1 mask_list = self.mask.split('.') temp_ip_list = [] for ip_str in mask_list: ip_str = int(ip_str) temp_ip_list.append(bin(ip_str)) mask_list = temp_ip_list return mask_list # return [mask_str for _, mask_str in mask_list] # 与 计算 def ip_and_mask(self): temp_list = [] # for x in list(zip(self.ip_to_bin(), self.mask_to_bin())): # temp_list.append(str(int(x[0], base=2) & int(x[1], base=2))) for x in list(zip(self._addr_to_bin(self.ip), self._addr_to_bin(self.mask))): temp_list.append(str(int(x[0], base=2) & int(x[1], base=2))) return '.'.join(temp_list) if __name__ == '__main__': addr_01 = IsSameAddr("211.95.165.24", "255.255.254.0") addr_02 = IsSameAddr("211.95.164.78", "255.255.254.0") if addr_01.ip_and_mask() == addr_02.ip_and_mask(): print(0) else: print(2)
感谢各位的阅读,以上就是“python怎么判断两个ip是否属于同一个子网”的内容了,经过本文的学习后,相信大家对python怎么判断两个ip是否属于同一个子网这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。