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

该Python代码实现了一个类`IpAddrConverter`,用于判断两个IP地址是否属于同一子网。通过将IP地址和子网掩码转换为二进制并进行逻辑运算,计算网络地址和主机地址,从而确定IP地址是否在同一子网。
摘要由CSDN通过智能技术生成

"""

判断两个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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值