我是IP地址的新手,如果我使用的术语不正确,请原谅。
我想获取IP地址,并在最后一个二进制八位数为零的情况下获取它们的地址。类似于按位乘以255.255.255.0。
仅使用字符串,就可以完成以下工作:
ip_address = '192.168.1.1'
octets = ip_address.split('.')
masked_address = '.'.join(octets[:-1]) + '.0'
然而,我希望能够在创建集合时从不同的来源进行绘制。有时我有IP地址的字节表示,有时是整数,有时是字符串。因此,如果我知道如何在数据存储为python ipaddress.IPAddress (4和6...)的集合上执行此操作,这将是最简单的。对象。工作流程是:从不同的来源获取ip地址,转向python IP对象,合并集合,转换为IP/24类型的地址。但我在ipaddress
文档中没有看到任何明确说明如何完成最后一步的内容。
发布于 2021-07-30 17:45:14
操纵ip地址只是一种按位运算。
如果您在ipaddress.IPv4Address
对象中有一个地址,则可以通过以下命令将最后一个二进制八位数清零:
>>> x = ipaddress.ip_address('192.168.1.1')
>>> y = ipaddress.ip_address(int(x) & 0xffffff00)
>>> y
IPv4Address('192.168.1.0')
其中0xffffff00
等同于255.255.255.0
。你当然可以这样写:
>>> mask = int(ipaddress.ip_address('255.255.255.0'))
>>> y = ipaddress.ip_address(int(x) & mask)
或者甚至是:
>>> mask = (2**(ipaddress.IPV4LENGTH))-256
>>> y = ipaddress.ip_address(int(x) & mask)
类似地,对于IPv6Address
对象:
>>> x = ipaddress.ip_address('1234::1')
>>> mask = (2**(ipaddress.IPV6LENGTH))-256
>>> y = ipaddress.ip_address(int(x) & mask)
>>> y
IPv6Address('1234::')
这里,我们将mask
设置为“全一”地址(2**129)-1)
,然后通过减去255
将最后一个二进制八位数设置为0。
https://stackoverflow.com/questions/68594897
复制相似问题