Ruby NetAddress::Tree获取CIDR列表并合并它们?
我使用Ruby NetAddress::Tree类来保存一组CIDR对象,但我需要一种方法将CIDR对象压缩到更大的子网中 我想要一种获取IP的方法,如:Ruby NetAddress::Tree获取CIDR列表并合并它们?,ruby,cidr,Ruby,Cidr,我使用Ruby NetAddress::Tree类来保存一组CIDR对象,但我需要一种方法将CIDR对象压缩到更大的子网中 我想要一种获取IP的方法,如: 12.26.8.0/21 12.26.16.0/21 12.26.24.0/21 12.26.32.0/21 12.26.40.0/21 12.27.152.0/21 并合并树中的相关地址范围,以便输出如下所示: 12.26.8.0/21 12.26.16.0/20 12.26.32.0/20 12.27.152.0/21 我查阅了文档,
12.26.8.0/21
12.26.16.0/21
12.26.24.0/21
12.26.32.0/21
12.26.40.0/21
12.27.152.0/21
并合并树中的相关地址范围,以便输出如下所示:
12.26.8.0/21
12.26.16.0/20
12.26.32.0/20
12.27.152.0/21
我查阅了文档,但找不到任何方法。如果需要,我很高兴不再使用NetAddress::Tree,重要的是它可以获取IP/netmask字符串列表,合并它们并逐行输出。您看了吗
从文档中:
给定CIDR地址或NetAddress::CIDR对象的列表,合并以最有效的方式对其进行汇总。只有当新创建的超级网不会导致“创建”新的IP空间时,才会进行汇总。例如,以下模块192.168.0.0/24、192.168.1.0/24和192.168.2.0/24将汇总为192.168.0.0/23和192.168.2.0/24,而不是192.168.0.0/22
你看了吗
从文档中:
给定CIDR地址或NetAddress::CIDR对象的列表,合并以最有效的方式对其进行汇总。只有当新创建的超级网不会导致“创建”新的IP空间时,才会进行汇总。例如,以下模块192.168.0.0/24、192.168.1.0/24和192.168.2.0/24将汇总为192.168.0.0/23和192.168.2.0/24,而不是192.168.0.0/22
有趣的是,我刚刚用NetAddr.merge让它工作了,但是你的方式更干净了,所以我要用它。感谢您的代码和帮助对于现在访问此页面的任何人来说,看起来此函数已重命名为非常有趣的,我刚刚使用NetAddr.merge使其工作,但是您的方式更干净,所以我将使用它。感谢您的代码和帮助。对于现在访问此页面的任何人,此函数似乎已重命名为
require 'netaddr'
require 'pp'
pp NetAddr.merge(
%w[
12.26.8.0/21
12.26.16.0/21
12.26.24.0/21
12.26.32.0/21
12.26.40.0/21
12.27.152.0/21
].map{ |ip| NetAddr::CIDR.create(ip) }
)
=> ["12.26.8.0/21", "12.26.16.0/20", "12.26.32.0/20", "12.27.152.0/21"]