Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby NetAddress::Tree获取CIDR列表并合并它们?_Ruby_Cidr - Fatal编程技术网

Ruby NetAddress::Tree获取CIDR列表并合并它们?

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 我查阅了文档,

我使用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
我查阅了文档,但找不到任何方法。如果需要,我很高兴不再使用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"]