0

我正在将旧的 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

有谁知道我可以用来复制add_range调用功能的 Ruby lib 或 gem?

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

5 回答 5

0

找不到合适的宝石?顺其自然——在 Ruby 中重新实现 Perl 模块。

于 2012-09-12T14:47:15.710 回答
0

我更喜欢NetAddr gem,尤其是它的NetAddr::CIDR类。

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


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

于 2012-09-10T15:54:16.103 回答
0

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

https://github.com/noahhaon/cidr-lite-ruby

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

高温高压

于 2013-03-05T20:51:00.333 回答
0

您可以使用也处理 CIDR 网络的内置 IPAddr,或者使用提供一些额外帮助程序的ipaddress gem 。

一个简单的例子是:

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

included = cidrblocks.find{|net| net.include?("109.152.6.123") }
于 2012-09-10T15:21:17.483 回答
0

我找到了一个 ruby​​ 模块,它的翻译见

http://wejn.org/stuff/cidr.rb.html

已将其包含在我的 Rails 应用程序中,非常完美

于 2012-09-11T19:34:22.613 回答