繁体   English   中英

使用python IP地址屏蔽IP地址

[英]Use python IP address to mask IP addresses

我是 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 and 6 ...) 对象的集合上执行此操作,这是最简单的。 工作流程是:从不同来源获取 IP 地址,转向 python IP 对象,合并集合,转换为 IP/24 类型地址。 但是我在ipaddress文档中没有看到任何说明如何执行最后一步的内容。

操作 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将最后一个八位字节设置为零。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM