首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算间隙IP范围的库或工具?

计算间隙IP范围的库或工具?
EN

Stack Overflow用户
提问于 2017-04-18 20:04:24
回答 2查看 93关注 0票数 0

我想找一个库或工具来帮助枚举范围内的IP地址块。假设我有任何两个不重叠的范围,我想找出完全覆盖它们之间的间隙的最小IP地址块集是多少。

下面是一些示例:

在0.0.0.0/8和10.0.0.0/8之间(不包括边)是: 1.0.0.0/8,2.0.0.0/7,4.0.0.0/6和8.0.0.0/7,它占据了所有的空间,是最小的表达式。

在10.0.0.0/8和127.0.0.0/8之间(不包括边)位于: 11.0.0.0/8,12.0.0.0/6,16.0.0.0/4,32.0.0.0/3,64.0.0.0/3,96.0.0.0/4,112.0.0.0/5,120.0.0.0/6,124.0.0.0/7和126.0.0.0/8,它占据了所有的空间,这是最小的表达式。

在127.0.0.0/8和169.254.0.0/16之间(不包括边)位于: 128.0.0.0/3,160.0.0/5,168.0.0.0/8,169.0.0.0/9,169.128.0.0/10,169.192.0.0/11,169.224.0.0/12,169.240.0.0/13,169.248.0.0/14和169.252.0.0/15,它占据了所有的空间,这是最小的表达式。

目前,我正在手工计算,但它确实变得单调乏味且容易出错。我希望听到一些函数,在任何编程语言中,可能属于子网计算器,或者如果不属于子网计算器,则使用网页来帮助计算。我想我应该在写我自己的函数之前问一下。

EN

回答 2

Stack Overflow用户

发布于 2017-04-24 06:01:26

我已经设法用Python回答了我自己的问题:

代码语言:javascript
复制
from netaddr import *

iprange_to_cidrs(IPAddress(IPSet(['0.0.0.0/8']).iprange().last + 1), IPAddress(IPSet(['10.0.0.0/8']).iprange().first - 1))
iprange_to_cidrs(IPAddress(IPSet(['10.0.0.0/8']).iprange().last + 1), IPAddress(IPSet(['127.0.0.0/8']).iprange().first - 1))
iprange_to_cidrs(IPAddress(IPSet(['127.0.0.0/8']).iprange().last + 1), IPAddress(IPSet(['169.254.0.0/16']).iprange().first - 1))

related answer所示,只包含一个CIDR的较简单范围也可以通过iprange_to_cidrs()进行解析。

票数 0
EN

Stack Overflow用户

发布于 2020-10-22 07:17:59

您可以通过使用IPAddress Java library的以下代码在Java语言中完成此操作。这段代码既适用于IPv4也适用于IPv6。免责声明:我是该库的项目经理。

代码语言:javascript
复制
static void print(String lower, String upper) {
    IPAddress lowerAddr = new IPAddressString(lower).getAddress();
    IPAddress upperAddr = new IPAddressString(upper).getAddress();
    System.out.println("Between " + lowerAddr + " and " + upperAddr + ": " +
        Arrays.asList(spanInBetween(lowerAddr, upperAddr)));
}
    
static IPAddress[] spanInBetween(IPAddress lower, IPAddress upper) {
    return lower.getUpper().increment(1).
        spanWithPrefixBlocks(upper.increment(-1));
}

输出:

代码语言:javascript
复制
Between 0.0.0.0/8 and 10.0.0.0/8: [1.0.0.0/8, 2.0.0.0/7, 4.0.0.0/6, 8.0.0.0/7]
Between 10.0.0.0/8 and 127.0.0.0/8: [11.0.0.0/8, 12.0.0.0/6, 16.0.0.0/4, 32.0.0.0/3, 64.0.0.0/3, 96.0.0.0/4, 112.0.0.0/5, 120.0.0.0/6, 124.0.0.0/7, 126.0.0.0/8]
Between 127.0.0.0/8 and 169.254.0.0/16: [128.0.0.0/3, 160.0.0.0/5, 168.0.0.0/8, 169.0.0.0/9, 169.128.0.0/10, 169.192.0.0/11, 169.224.0.0/12, 169.240.0.0/13, 169.248.0.0/14, 169.252.0.0/15]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43471634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档