用Python快捷处理IP地址
Python作为网络工程师利器,在处理网络参数方面比Java强大。
场景:使用SDWAN将全国各分支点互联,需要规划各节点的网段。通常情况下,接入是个很长时间的持续性活动,几个月甚至更长。而总部可能对各分支机构原来并没有一个统一的ip地址规划。
逻辑:保持分部的ip不变,当然,如果分部之间冲突还是要重新分配的。网络工程师提出了这样的需求:
- 给出ip地址列表A,和ip地址列表B。找出A中哪些IP和B中哪些IP有冲突,表示出来。
- A包含B,把A中和B冲突的地方剔除,重新生成新的A。
外部库选择:
- IPy,挺好用,但很久就没人维护了,据说有些计算还不正确
- IPAddr和IPNet,谷歌维护的库,非常好用,谷歌宣布功能迁入标准库。里面IPSet相当好用
- 标准库,没有IPSet,set处理需要自己开发
最终我们选择了最有前途的python原生ipaddress
参考:
实现:
文档格式:
1 列说明
第一列为总部IP,第三列尾分支IP,第2、4列为备注说明。
IP地址有3种表示方式:
[1.] 192.168.1.0/24
[2.] 192.168.1.0/255.255.255.0
[3.] 192.168.1.1-192.168.1.255
2 行说明前两行为说明行,数据一律从第三行开始
.3 IP地址
IP地址有3种表示方式:
[1.] 192.168.1.0/24
[2.] 192.168.1.0/255.255.255.0
[3.] 192.168.1.1-192.168.1.255
思路:
- 将ip从excel读入ListA,ListB
- stringIpList抓换成ipaddress的二维List:netListA,netListB
- 二维netListB转换为一维List
- 遍历netListA[[],[],[]....],一维ListA减一维ListB
- 得到一个二维list。
代码:
https://github.com/calfen/ipListMinus
评论