• 请不要在回答技术问题时复制粘贴 AI 生成的内容
yorkyoung
V2EX  ›  程序员

如何对已知 CIDR 地址块求补集

  •  
  •   yorkyoung · Nov 2, 2020 · 2990 views
    This topic created in 2048 days ago, the information mentioned may be changed or developed.
    有什么工具或方法可以对 CIDR 地址块进行合并、求补集等操作。

    比如已知大陆 CIDR 地址块,得到大陆以外 CIDR 地址块。

    已知:
    8.0.0.0/8
    202.0.0.0/8

    可以得出:
    1.0.0.0/5

    9.0.0.0/8
    10.0.0.0/7
    12.0.0.0/6
    16.0.0.0/4
    32.0.0.0/3
    64.0.0.0/2
    128.0.0.0/2
    192.0.0.0/5
    200.0.0.0/7

    203.0.0.0/8
    204.0.0.0/6
    208.0.0.0/4
    224.0.0.0/3
    Supplement 1  ·  Nov 2, 2020
    经过研究,以下为 0 编程基础的实现方式:

    1 、得到大陆 ip 的 CIDR 块。https://ip.cn/chnroutes.html
    2 、将类似 1.1.8.0/24 的 CIDR 块在线批量转化为地址段。http://ip.chacuo.net/ipconvert
    3 、将所得数据复制粘贴到 Excel,将“可分配地址范围”的小值减一、大值加一得到左边的十进制范围。不直接使用最左边一列是因为上一步转化过程中程序的问题,后半部分数据明显出错。

    4 、IP 起始地址 1.0.0.0 的十进制表示为 16777216 。用每一段的小值减上一段的大值得到新的一组十进制 IP 段,即取余。
    5 、得到十进制的 ip 段后转化为 IP 形式。http://ip.chacuo.net/ipconvert
    6 、将 IP 形式转化为 CIDR 地址块,完成。http://apps.neu.edu.cn/netaggr/

    转换后的结果和过程文件下载链接,已去除内网地址:
    https://drive.google.com/drive/folders/1OlK_SPQXwnUE77ala5QNzbEzlWaB_KPw?usp=sharing
    8 replies    2020-11-03 09:30:51 +08:00
    lavvrence
        2
    lavvrence  
       Nov 2, 2020
    没仔细看,google 试试吧
    stcheng
        4
    stcheng  
       Nov 2, 2020
    蹲一个答案
    之前也碰到了类似的问题:有一系列的 IP 地址,求最后全 IP 段被分成了几段之类的需求,因为没有找到类似的实现,最后自己简单动手写了一个,也用到了楼上提到的 ipaddress 的包,另外就是用到了 LpmDict 的包。
    https://github.com/Azure/sonic-mgmt/blob/master/ansible/roles/test/files/ptftests/fib.py
    楼主的需求相对更加简单一点,也许会更容易实现。
    Mohanson
        5
    Mohanson  
       Nov 2, 2020 via Android
    一个 cidr 不就是两个 uint32 吗(上下区间),求个补集不是一分钟的事…
    yorkyoung
        6
    yorkyoung  
    OP
       Nov 2, 2020
    yorkyoung
        8
    yorkyoung  
    OP
       Nov 3, 2020
    @bazingaterry 这个帖子的链接已经 404 变更后的应该是 https://github.com/x1angli/regional-ip-addresses/blob/master/ipaddr.py
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5318 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 50ms · UTC 07:48 · PVG 15:48 · LAX 00:48 · JFK 03:48
    ♥ Do have faith in what you're doing.