一般的なIPv4アドレスと数値IPv4アドレスの相互変換(shell版)
1.概要
セキュリティが話題となる中で、フィルタリングされたIPアドレスを調べたいと思うことがあります。whoisやcmanを利用することで調べることができるIPアドレスがありますが、調査が難しい場合もあります。国単位に配布されたIPアドレスは公開されているので、どこの国のIPアドレスであるかを調べることはできます。
2.詳細
IPアドレスの配布はセグメント単位です。IPアドレスがIPアドレスセグメントに含まれているかを調べる必要がありますが、IPv4のIPアドレスはドットで分割されたアドレスです。例えば、192.168.10.1などです。しかし、この表記の場合、あるIPアドレスがIPアドレスの範囲(192.168.9.0 - 192.168.10.255)に含まれていることを調べるには不便です。そこで、IPアドレスを10進数に変換してから調べます。
192.168.9.0 => 3232237824
192.168.10.1 => 3232238081
192.168.10.255 => 3232238335
上記結果から数値化することで、大小比較が容易できます。そこで、IPアドレスを10進数に変換する処理をshellで作成しました。今回はその内容を記述します。
(1) 作成したshell(bash)
(a) ipから10進数(ip2dec.sh)
#!/bin/bash
ip2dec(){
echo $(($1 * 16777216 + $2 * 65536 + $3 * 256 + $4))
}
IP1=$(echo $1 | tr "." " ")
ip2dec $IP1
(b) 10進数からip(dec2ip.sh)
#!/bin/bash
dec2ip(){
a=$(($1 / 16777216))
x=$(($a * 16777216))
b=$((($1 - $x) / 65536 ))
y=$(($b * 65536))
c=$((($1 - $x - $y) / 256))
z=$(($c * 256))
d=$(($1 - $x - $y - $z))
echo "$a.$b.$c.$d"
}
dec2ip $1
(2) 利用方法
上記shellをip2dec.shとdec2ip.shで作成したとします。
sh ip2dec.sh 192.168.10.1
3232238081
sh dec2ip.sh 3232238081
192.168.10.1
となります。
(3) 評価
参考資料では、a * 256 ** 3 + b * 256 ** 2 + c * 256 + d
の計算式を利用していますが、私の環境ではエラーとなりました。
そこで、下記計算をした上でshellを作成しました。
256 ** 3 = 16777216
256 ** 2 = 65536
これでエラーはなくなりました。
参考資料
[外部サイト参照]
・IP Address Converter
・Bash で文字列を分割
コメント
コメントを投稿