python 判断两个ip地址是否属于同一子网

python 判断两个ip地址是否属于同一子网#

Copy
""" 判断两个IP是否属于同一子网, 需要判断网络地址是否相同 网络地址:IP地址的二进制与子网掩码的二进制地址逻辑“与”得到 主机地址: IP地址的二进制与子网掩码的二进制取反地址逻辑“与”得到 """ class IpAddrConverter(object): def __init__(self, ip_addr, net_mask): self.ip_addr = ip_addr self.net_mask = net_mask @staticmethod def _get_bin(target): if not target.isdigit(): raise Exception('bad ip address') target = int(target) assert target < 256, 'bad ip address' res = '' temp = target for t in range(8): a, b = divmod(temp, 2) temp = a res += str(b) if temp == 0: res += '0' * (7 - t) break return res[::-1] def _to_32_bin(self, ip_address): temp_list = ip_address.split('.') assert len(temp_list) == 4, 'bad ip address' return ''.join(list(map(self._get_bin, temp_list))) @property def ip_32_bin(self): return self._to_32_bin(self.ip_addr) @property def mask_32_bin(self): return self._to_32_bin(self.net_mask) @property def net_address(self): ip_list = self.ip_addr.split('.') mask_list = self.net_mask.split('.') and_result_list = list(map(lambda x: str(int(x[0]) & int(x[1])), list(zip(ip_list, mask_list)))) return '.'.join(and_result_list) @property def host_address(self): ip_list = self.ip_addr.split('.') mask_list = self.net_mask.split('.') rever_mask = list(map(lambda x: abs(255 - int(x)), mask_list)) and_result_list = list(map(lambda x: str(int(x[0]) & int(x[1])), list(zip(ip_list, rever_mask)))) return '.'.join(and_result_list) if __name__ == '__main__': ip01 = IpAddrConverter("211.95.165.24", "255.255.254.0") ip02 = IpAddrConverter("211.95.164.78", "255.255.254.0") print(ip01.net_address == ip02.net_address)
posted @   村口王铁匠  阅读(2263)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示

目录

目录

×