2017-04-18 53 views
-1

我想找到一个库或工具,方便的范围内的IP地址块的枚举。说我有任何两个不重叠的范围,我想找出什么是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之间(未包括边缘)lie: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之间(未包括边缘)lie: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

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

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)) 

简单的范围只包括一个CIDR也可以通过iprange_to_cidrs()手段解决的,如图中的A related answer