シェル内でRubyを使ったIPアドレスのネットワーク計算

シェルで、Rubyを利用して、IPアドレスを簡単に扱う方法を紹介する。

入力:192.168.123.45/24

ipaddress='192.168.123.45'
mask='24'

echo "${ipaddress}/${mask}"
echo

# network
network=$(
   ruby -ripaddr -e "puts IPAddr.new(\"${ipaddress}/${mask}\")"
   )
echo "Network"
echo $network

# netmask
netmask=$(
   ruby -ripaddr -e "puts IPAddr.new('255.255.255.255/32').mask(${mask}.to_i)"
   )
echo "Netmask"
echo $netmask

# range
range_f=$(
   ruby -ripaddr -e "puts IPAddr.new(\"${ipaddress}/${mask}\").to_range.first.succ"
   )
echo "First"
echo $range_f
# 最終はpredが実装されていないため、スキップ

# broadcast
broadcast=$(
   ruby -ripaddr -e "puts IPAddr.new(\"${ipaddress}/${mask}\").to_range.last"
   )
echo "Broadcast"
echo $broadcast

実行結果

 sh app.sh 
192.168.123.45/24

Network
192.168.123.0
Netmask
255.255.255.0
First
192.168.123.1
Broadcast
192.168.123.255

DHCPなど、IPアドレスが絡む設定ファイルの作成に便利かもしれない。

Ref.

docs.ruby-lang.org