0

古いPerlスクリプトをRubyに更新していますが、1つのPerlライブラリの代わりを見つけるのに問題があります。

PerlスクリプトではNet::CIDR::Lite、を使用します。これは、開始IPアドレス範囲と終了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呼び出しの機能を複製するために使用できるRubylibまたはgemを知っている人はいますか?

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

5 に答える 5

0

私はNetAddrgem、特にそのNetAddr::CIDRクラスを好みます。

これは非常に豊富なIPv4/IPv6の宝石です。


私が知っている3つのモジュール、@ holgerjustによって言及されたRubyの組み込みIPAddr、NetAddr、およびIPAddressを見ると、開始IPと終了IPを提供し、結果のネットワークを返す機能はありません。これらはすべて、ネットワークのCIDR形式を想定しており、個々のIPをテストしてサブネットに適合するかどうかを確認するか、そのサブネット定義を使用してIP自体を生成します。

于 2012-09-10T15:54:16.103 に答える
0

CIDRネットワークも処理する組み込み IPAddrクラスを使用するか、追加のヘルパーを提供するipaddressgemを使用できます。

簡単な例は次のとおりです。

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 に答える
0

適切な宝石が見つかりませんか?自然に起こることを実行します-RubyでPerlモジュールを再実装します。

于 2012-09-12T14:47:15.710 に答える
0

これはあなたの質問に完全には関連しないかもしれませんが、私はCIDR :: Liteの一部をRubyに移植しました:

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

重複するCIDRの非常に大きなセットをマージするために、そのパフォーマンスが当時利用可能なルビーの代替案よりもはるかに優れていることがわかりました。

HTH

于 2013-03-05T20:51:00.333 に答える