ITPub博客

首页 > > > 用Python判断CIDR重叠

用Python判断CIDR重叠

作者:格伯纳 时间:2020-07-02 15:15:32 0 删除 编辑

最近在写代码的时候,有一个需求就是判断一个新增的CIDR是否与现有的CIDR重叠。

netaddr

Python下比较经典的IP地址工具包。github。

import netaddr

new_cidr = "10.0.0.0/24"
old_cidr = "10.0.0.0/16"

def is_overlap(old, new):
    old_net = netaddr.IPNetwork(old)
    new_net = netaddr.IPNetwork(new)
    return old_net in new_net or new_net in old_net

is_overlap(old_cidr, new_cidr)
>>> True

ipaddr

ipaddr是谷歌开源的一个项目,也是一个IP地址工具包。google/ipaddr-py

import ipaddr

new_cidr = "10.0.0.0/24"
old_cidr = "10.0.0.0/16"

new_net = ipaddr.IPNetwork(new_cidr)
old_net = ipaddr.IPNetwork(old_cidr)

new_net.overlaps(old_net)
>>> True

CIDR的定义是以二进制划分的,因此不存在真正的相交或者重叠,只可能一个是另一个的子集。因此,这个问题的思路应该是判断两个CIDR,其中一个是不是包含了另一个。

在这个功能上两个工具包没有明显的优劣势。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31509949/viewspace-3171055/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
管理员

注册时间:2018-03-30

  • 博文量
    2383
  • 访问量
    984251