资讯专栏INFORMATION COLUMN

工程师奇技淫巧-IP段转换CIDR(python篇)

betacat / 1830人阅读

摘要:从个体小处如何减少机械性,重复性的工作,是切切实实提高个人幸福感的一件事。由于工作上的原因,经常需要给外包服务商开通访问内部系统的白名单。

电商系统大考双十一过去了,可以找点时间写点东西了。

这次说说提升工作效率。讲工程效率提升的文章有很多,我们先不看团队的。从个体小处如何减少机械性,重复性的工作,是切切实实提高个人幸福感的一件事。

由于工作上的原因,经常需要给外包服务商开通访问内部系统的白名单。我们知道根据网络上通路到达web系统不同,大致上可以分为两类访问控制:

nginx上的七层访问控制,完全由应用上的配置文件控制访问IP,该方式的好处也是坏处,就是需要开发明确知道并维护nginx上的白名单配置文件,同样的只要有了这份配置文件,理论上名单不会丢,应用基线可以保证多机房部署。

防火墙控制,此种方式对应用透明,应用开发不需要关心白名单控制,问题也是明显的,防火墙ACL控制在跨机房时并不能跟随,有几个机房就要同时维护几份白名单,对运维系统也有要求,同一份IP段要支持多机房下发。

故事的起点就在这,防火墙的ACL控制下发要求提供CIDR格式的规则。什么是CIDR格式?直接看自由的百科全书的解释:

无类别域间路由(Classless Inter-Domain Routing、CIDR)是一个用于给用户分配IP地址以及在互联网上有效地路由IP数据包的对IP地址进行归类的方法。

CIDR看起来就是这样的: 208.130.29.0/24

比如有个需求就是208.130.29.30-35这个IP段换成CIDR格式,有几个只学过基础网络知识的开发懂这个?

作为一个开发人员做这个换算是很费劲的,比如要去网上用类似以下这个巨难用的表格来做网段和CIDR格式的换算,还要搞清楚/32 /31 /29 这些似乎跟web开发没有多大关系的知识。

在经历了痛苦和挫折后,一个偶然的机会,发现python居然有现成的类库支持此类网络操作与换算。 将以上的需求翻译成python只要几行代码搞定:

# 确定起始和结尾IP,无论多复杂都可以转换
startip = "208.130.29.30"
endip = "208.130.29.35"
cidrs = netaddr.iprange_to_cidrs(startip, endip)
for k, v in enumerate(cidrs):
    iplist = v
    print iplist

输出:
208.130.29.30/31
208.130.29.32/30

反过来,CIDR也能直接转成IP地址段:

from netaddr import *

ip = IPNetwork("192.0.2.16/29")
ip_list = list(ip)
print(ip_list)

输出:
[IPAddress("192.0.2.16"), IPAddress("192.0.2.17"), …, IPAddress("192.0.2.22"), IPAddress("192.0.2.23")]

感谢python大法!


文章来自微信平台「麦芽面包」
微信公众号「darkjune_think」转载请注明。
如果觉得有趣,微信扫一扫关注公众号。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/44267.html

相关文章

  • IP 范围区间或者掩码网地址解析成实际单个 IP

    摘要:首先要准备一个环境,安装插件,本人用的是提取的轻量级环境,所以直接下载官网的源码,解压后找到文件夹复制到环境目录的文件夹里即可。使用方法首先引入确定起始和结尾,无论多复杂都可以转换运行后输出结果 概述 两种情况,一种给的是IP 范围,给了一个区间例如参考:http://www.cnblogs.com/amaoxi... 64.233.196.0-64.233.196.25#将这个范围内...

    tomener 评论0 收藏0
  • IP 范围区间或者掩码网地址解析成实际单个 IP

    摘要:首先要准备一个环境,安装插件,本人用的是提取的轻量级环境,所以直接下载官网的源码,解压后找到文件夹复制到环境目录的文件夹里即可。使用方法首先引入确定起始和结尾,无论多复杂都可以转换运行后输出结果 概述 两种情况,一种给的是IP 范围,给了一个区间例如参考:http://www.cnblogs.com/amaoxi... 64.233.196.0-64.233.196.25#将这个范围内...

    spacewander 评论0 收藏0
  • 正则表达式

    摘要:最全正则表达式总结验证号手机号中文邮编身份证地址等是正则表达式的缩写,作用是对字符串执行模式匹配。学习目标了解正则表达式语法在中使用正则表达式在中使 JS高级技巧 本篇是看的《JS高级程序设计》第23章《高级技巧》做的读书分享。本篇按照书里的思路根据自己的理解和经验,进行扩展延伸,同时指出书里的一些问题。将会讨论安全的类型检测、惰性载入函数、冻结对象、定时器等话题。1. 安全的类型检测...

    yibinnn 评论0 收藏0
  • 9000字加图文 | 带你了解IP地址划分、子网掩码的作用、实际中IP地址规划是怎么样的

    摘要:字加图文带你了解地址划分子网掩码的作用实际中地址规划是怎么样的子网在用同样的方法,,第三个子网网段用了,还三个可以继续使用,使用最小的,,计算出财务部门。 作者:一天 首发公众号:网络之路博客(ID:NetworkBlog)​(1)子网掩码之所以出现大量地址浪费,在于早期的地址分类采用的是固定的网络位与主机位的长度,不能灵...

    番茄西红柿 评论0 收藏2637

发表评论

0条评论

最新活动
阅读需要支付1元查看
<