- blogs:
- cles::blog
2019/01/10

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


大量の IP アドレスの始点と終点の組(例えば 192.168.0.0~192.168.0.255 のようなもの)組を上手に纏めて CIDR 表現を作る必要があったので、Ruby でスクリプトを書いてみました。
IP アドレスの範囲を扱うのに altmetric/ip_ranger 、IP アドレスの集約に ipaddress-gem/ipaddress を使っているので、あらかじめ gem install ip_ranger ipaddress でインストールをしておきます。
コード的にはこんな感じでしょうか。
ip_summarize.rb
#!/bin/env ruby
require 'ip_ranger'
require 'ipaddress'
ranges = []
STDIN.each_line do |line|
(s, e) = line.chomp.split(',')
range = IPRanger::IPRange.new(s, e)
ranges += range.cidrs
end
ranges = ranges.map{|net| IPAddress(net.to_cidr)}
summarized = IPAddress::IPv4::summarize(*ranges).map{|i| i.to_string}
summarized.each { |r| puts r }
実際の実行してみると、こんな感じになります。
IP の範囲は標準入力から1行毎にカンマ区切りで開始,終了のような感じで与えています。
echo "192.168.0.0,192.168.0.1
192.168.0.2,192.168.0.5
192.168.0.6,192.168.0.11
192.168.0.12,192.168.0.17
192.168.0.18,192.168.0.18" | ruby ip_summarize.rb
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/10696
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form
コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。
OpenID を使ってログインすることができます。
サイト内検索
検索ワードランキング
へぇが多いエントリ
閲覧数が多いエントリ
1 . Windows 10 で勝手にログアウトされないようにする(3559)
2 . リモートデスクトップで Alt + PrtSc と同じことをするには(3051)
3 . RDP のプロトコルを TCP だけに変更する(2365)
4 . 「日次」は「にちじ」じゃない?(2147)
5 . リモートデスクトップで Ctrl + Alt + Del キーを送信するには(2073)
2 . リモートデスクトップで Alt + PrtSc と同じことをするには(3051)
3 . RDP のプロトコルを TCP だけに変更する(2365)
4 . 「日次」は「にちじ」じゃない?(2147)
5 . リモートデスクトップで Ctrl + Alt + Del キーを送信するには(2073)
cles::blogについて
Referrers