BLOGTIMES
2008/10/29

IPアドレスのリストからCIDR表現を作る(Perl編)

  perl 
このエントリーをはてなブックマークに追加

ちょっと仕事でIPアドレスのリストからACLを作るという作業をしなければならなかったのですが、大した作業でなはないとたかをくくっていたら、IPアドレスの量があまりにも膨大だったで参ってしまいました。しかもIPアドレスはきれいにサブネットで纏まっているわけでもなく、手作業でサブネットを計算するのも現実的ではなさそう。ということで、これをスクリプトで処理をして、なんとかCIDR形式にまとめられないかといろいろと探してみました。

こういう処理自体はルーティングテーブルの圧縮なんかでも使われているので、何か適当なライブラリがないかと探してみたところ、perlのNet::CIDR::Liteが使えそうだということがわかったので、簡単なスクリプトを書いてみました。

コードのサンプル

今回作ったコードのサンプルはこんな感じ。

ipmerge.pl

#!/usr/bin/perl use Data::Dumper; use Net::CIDR::Lite; $Data::Dumper::Terse = 1; my $cidr = Net::CIDR::Lite->new; while(<>){ chomp; $cidr->add_ip($_); } print Dumper($cidr->list);

下記のようなIPアドレスのリストを処理すると、IPアドレスの範囲をCIDR形式で得ることができます。

iplist.txt

192.168.0.0 192.168.0.1 192.168.0.2 192.168.0.3 192.168.0.4 192.168.0.5 192.168.0.6 192.168.0.7 192.168.0.8 192.168.0.9 192.168.0.10 192.168.0.11 192.168.0.12 192.168.0.13 192.168.0.14 192.168.0.15 192.168.0.16 192.168.0.17 192.168.0.18

perl ipmerge.pl < iplist.txtの実行結果

'192.168.0.0/28' '192.168.0.16/31' '192.168.0.18/32'

    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/2783
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン