用Python快捷处理IP地址

Python作为网络工程师利器,在处理网络参数方面比Java强大。
场景:使用SDWAN将全国各分支点互联,需要规划各节点的网段。通常情况下,接入是个很长时间的持续性活动,几个月甚至更长。而总部可能对各分支机构原来并没有一个统一的ip地址规划。
逻辑:保持分部的ip不变,当然,如果分部之间冲突还是要重新分配的。网络工程师提出了这样的需求:
  1. 给出ip地址列表A,和ip地址列表B。找出A中哪些IP和B中哪些IP有冲突,表示出来。
  2. A包含B,把A中和B冲突的地方剔除,重新生成新的A。
外部库选择:
  • IPy,挺好用,但很久就没人维护了,据说有些计算还不正确
  • IPAddr和IPNet,谷歌维护的库,非常好用,谷歌宣布功能迁入标准库。里面IPSet相当好用
  • 标准库,没有IPSet,set处理需要自己开发
最终我们选择了最有前途的python原生ipaddress
参考
实现
文档格式:
1 列说明

第一列为总部IP,第三列尾分支IP,第24列为备注说明。

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


思路:

  1. 将ip从excel读入ListA,ListB
  2. stringIpList抓换成ipaddress的二维List:netListA,netListB
  3. 二维netListB转换为一维List
  4. 遍历netListA[[],[],[]....],一维ListA减一维ListB
  5. 得到一个二维list。

代码:

    https://github.com/calfen/ipListMinus




评论

此博客中的热门博文

每逢中秋倍思亲

查看网卡流量的脚本