首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用python IP地址掩码IP地址

使用python IP地址掩码IP地址
EN

Stack Overflow用户
提问于 2021-07-30 17:24:00
回答 1查看 127关注 0票数 0

我是IP地址的新手,如果我使用的术语不正确,请原谅。

我想获取IP地址,并在最后一个二进制八位数为零的情况下获取它们的地址。类似于按位乘以255.255.255.0。

仅使用字符串,就可以完成以下工作:

代码语言:javascript
运行
复制
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文档中没有看到任何明确说明如何完成最后一步的内容。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-30 17:45:14

操纵ip地址只是一种按位运算。

如果您在ipaddress.IPv4Address对象中有一个地址,则可以通过以下命令将最后一个二进制八位数清零:

代码语言:javascript
运行
复制
>>> 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。你当然可以这样写:

代码语言:javascript
运行
复制
>>> mask = int(ipaddress.ip_address('255.255.255.0'))
>>> y = ipaddress.ip_address(int(x) & mask)

或者甚至是:

代码语言:javascript
运行
复制
>>> mask = (2**(ipaddress.IPV4LENGTH))-256
>>> y = ipaddress.ip_address(int(x) & mask)

类似地,对于IPv6Address对象:

代码语言:javascript
运行
复制
>>> 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。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68594897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档