Perl Net::CIDR::Lite的Ruby版本?

Perl Net::CIDR::Lite的Ruby版本?,ruby,perl,Ruby,Perl,我正在将一个旧的Perl脚本更新到Ruby,并且在寻找一个Perl库的替代品时遇到了问题 在Perl脚本中,我们使用了Net::CIDR::Lite,它接受起始和结束ip地址范围并输出一个CIDR字符串 这是一个Perl示例,显示了以下功能: #!/usr/bin/perl use Net::CIDR::Lite; $cidrblocks = Net::CIDR::Lite->new; $cidrblocks->add_range("109.152.0.0-109.152.7.25

我正在将一个旧的Perl脚本更新到Ruby,并且在寻找一个Perl库的替代品时遇到了问题

在Perl脚本中,我们使用了
Net::CIDR::Lite
,它接受起始和结束ip地址范围并输出一个CIDR字符串

这是一个Perl示例,显示了以下功能:

#!/usr/bin/perl

use Net::CIDR::Lite;
$cidrblocks = Net::CIDR::Lite->new;
$cidrblocks->add_range("109.152.0.0-109.152.7.255");

$coveragezone = "";

@cidrlist = $cidrblocks->list();

$cidrcount=0;
    while ( defined $cidrlist[$cidrcount] ) {
            $coveragezone .= "$cidrlist[$cidrcount]";
    }
    continue {
            $cidrcount++;
    }

print "$coveragezone";
此脚本返回一个字符串:

=> 109.152.0.0/21
有人知道我可以使用Ruby库或gem来复制
add\u range
调用的功能吗

$cidrblocks = Net::CIDR::Lite->new;
$cidrblocks->add_range("109.152.0.0-109.152.7.255");

您可以使用内置的,它也可以处理CIDR网络,也可以使用提供一些附加帮助的

一个简单的例子是:

cidrblocks = []
cidrblocks << IPAddr.new("109.152.0.0/21")

included = cidrblocks.find{|net| net.include?("109.152.6.123") }
cidrblocks=[]
我更喜欢宝石,尤其是它的等级

这是一个非常丰富的IPv4/IPv6 gem



通过查看我所知道的三个模块,@holgerjust提到的Ruby的内置IPAddress、NetAddress和IPAddress,没有一个模块能够提供起始IP和结束IP,并返回生成的网络。它们都采用CIDR形式的网络,然后致力于测试各个IP,看看它们是否适合子网,或者使用子网定义自己生成IP。

我发现了一个ruby模块,可以进行此转换

已经将它包含在我的rails应用程序中,而且它非常完美

找不到合适的宝石吗?
顺其自然-在Ruby中重新安装Perl模块。

虽然这可能与您的问题不完全相关,但我将CIDR::Lite的一部分移植到Ruby:

我发现它的性能远远优于当时可用的ruby替代品,用于合并非常大的重叠CIDR集


HTH

看了一下,找不到输入start和finsh ip地址并获取cidr范围的方法,知道如何在ruby中实现这一点吗?