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

2020-11-02 15:08:30 +08:00
 yorkyoung
有什么工具或方法可以对 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
2423 次点击
所在节点    程序员
8 条回复
jaylee4869
2020-11-02 15:33:01 +08:00
jaylee4869
2020-11-02 15:34:58 +08:00
没仔细看,google 试试吧
Showfom
2020-11-02 15:37:25 +08:00
stcheng
2020-11-02 15:44:17 +08:00
蹲一个答案
之前也碰到了类似的问题:有一系列的 IP 地址,求最后全 IP 段被分成了几段之类的需求,因为没有找到类似的实现,最后自己简单动手写了一个,也用到了楼上提到的 ipaddress 的包,另外就是用到了 LpmDict 的包。
https://github.com/Azure/sonic-mgmt/blob/master/ansible/roles/test/files/ptftests/fib.py
楼主的需求相对更加简单一点,也许会更容易实现。
Mohanson
2020-11-02 15:50:29 +08:00
一个 cidr 不就是两个 uint32 吗(上下区间),求个补集不是一分钟的事…
yorkyoung
2020-11-02 18:54:52 +08:00
bazingaterry
2020-11-02 22:24:49 +08:00
yorkyoung
2020-11-03 09:30:51 +08:00
@bazingaterry 这个帖子的链接已经 404 变更后的应该是 https://github.com/x1angli/regional-ip-addresses/blob/master/ipaddr.py

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/721018

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX