以前、コマンドラインでIP計算に使えるコマンドとして、perl-Net-IPというパッケージに入ってる ipcountを紹介しました。これ以外にも、ipcalc や sipcalc というIP計算に使えるコマンドがあるので紹介します。
※ 環境にコマンドが入ってない場合は、apt や dnf, yum 等のコマンドで簡単にインストールできると思います。
まず最初に、ipcount, ipcalc, sipcalc の使い分けですが、ざっくり書くとこのような感じです。
- ipcount
- IPの範囲 (最初のIPと最後のIP) に関する計算ができます。範囲からホストアドレスやプレフィックスを計算したり、その範囲のIPの数などが簡単に分かります。
- ipcalc
- 与えられたIPの情報を表示できます。また、IP の表記が間違ってないかのチェックや、IPからホスト名の逆引きなどもできます。
- sipcalc
- ipcalcの高機能版と言われてますが、どちからというとipcalcよりIPの詳細情報を表示するコマンドというイメージで、IPの表記を2, 10, 16進数に変換することができます。ipcalcと互換性はなく、ipcalcでできるホスト名逆引きなどはできません。
ipcount
ネットワークアドレスとプレフィックスを指定すると、IPの範囲が分かります。
# 192.168.0/24 192.168.0.0 - 192.168.0.255 [256]ipcount 192.168.0.0/24 192.168.0/24 192.168.0.0 - 192.168.0.255 [256]
IPの範囲を以下のようにハイフンを挟んで指定すると、逆にネットワークアドレスやプレフィックスが分かります。
# ipcount 192.168.0.0 - 192.168.0.255 192.168.0/24 192.168.0.0 - 192.168.0.255 [256]
一つのサブネットで表現できない場合、複数のネットワークに分けて表示されます。
# ipcount 192.168.0.200 - 192.168.0.255 192.168.0.200/29 192.168.0.200 - 192.168.0.207 [8] 192.168.0.208/28 192.168.0.208 - 192.168.0.223 [16] 192.168.0.224/27 192.168.0.224 - 192.168.0.255 [32] 192.168.0.200/29,/28,/27 192.168.0.200 - 192.168.0.255 [56]
ちなみに、プレフィックスの代わりにサブネットマスク(255.255.255.0)は指定できないようです。サブネットマスクへの読み替えには、iptab コマンドを使いましょう。
# iptab +----------------------------------------------+ | addrs bits pref class mask | +----------------------------------------------+ | 1 0 /32 255.255.255.255 | | 2 1 /31 255.255.255.254 | | 4 2 /30 255.255.255.252 | | 8 3 /29 255.255.255.248 | | 16 4 /28 255.255.255.240 | | 32 5 /27 255.255.255.224 | | 64 6 /26 255.255.255.192 | | 128 7 /25 255.255.255.128 | | 256 8 /24 1C 255.255.255.0 | | 512 9 /23 2C 255.255.254.0 | | 1K 10 /22 4C 255.255.252.0 | | 2K 11 /21 8C 255.255.248.0 | | 4K 12 /20 16C 255.255.240.0 | | 8K 13 /19 32C 255.255.224.0 | | 16K 14 /18 64C 255.255.192.0 | | 32K 15 /17 128C 255.255.128.0 | | 64K 16 /16 1B 255.255.0.0 | | 128K 17 /15 2B 255.254.0.0 | | 256K 18 /14 4B 255.252.0.0 | | 512K 19 /13 8B 255.248.0.0 | | 1M 20 /12 16B 255.240.0.0 | | 2M 21 /11 32B 255.224.0.0 | | 4M 22 /10 64B 255.192.0.0 | | 8M 23 /9 128B 255.128.0.0 | | 16M 24 /8 1A 255.0.0.0 | | 32M 25 /7 2A 254.0.0.0 | | 64M 26 /6 4A 252.0.0.0 | | 128M 27 /5 8A 248.0.0.0 | | 256M 28 /4 16A 240.0.0.0 | | 512M 29 /3 32A 224.0.0.0 | | 1024M 30 /2 64A 192.0.0.0 | | 2048M 31 /1 128A 128.0.0.0 | | 4096M 32 /0 256A 0.0.0.0 | +----------------------------------------------+
ipcalc , sipcalc
ipcalcでIPを指定すると、そのIPのクラスとプライベートアドレスなのかどうかを表示します。--all-info オプションを付けると、さらにIPを保有している国や、大まかな位置情報なども表示されます。
sipcalcの場合、IPを指定すると主にIPの別進数(10,16表記が表示される。--all オプションを付けると、2進数表記も表示されるほか、IPのクラス等の情報が表示される。
ipcalcでIPを指定
# ipcalc 8.8.8.8 Address: 8.8.8.8 Address space: Internet Address class: Class A
ipcalc に--all-info オプションを付与
# ipcalc 8.8.8.8 --all-info
Address: 8.8.8.8
Reverse DNS: 8.8.8.8.in-addr.arpa.
Address space: Internet
Address class: Class A
Country code: US
Country: United States
Coordinates: 37.751000,-97.822000
sipcalcでIPを指定
# sipcalc 8.8.8.8 -[ipv4 : 8.8.8.8] - 0 [CIDR] Host address - 8.8.8.8 Host address (decimal) - 134744072 Host address (hex) - 8080808 Network address - 8.8.8.8 Network mask - 255.255.255.255 Network mask (bits) - 32 Network mask (hex) - FFFFFFFF Broadcast address - 8.8.8.8 Cisco wildcard - 0.0.0.0 Addresses in network - 1 Network range - 8.8.8.8 - 8.8.8.8
sipcalcに--allオプションを付与
# sipcalc 8.8.8.8 --all
-[ipv4 : 8.8.8.8] - 0
[Classful]
Host address - 8.8.8.8
Host address (decimal) - 134744072
Host address (hex) - 8080808
Network address - 8.0.0.0
Network class - A
Network mask - 255.0.0.0
Network mask (hex) - FF000000
Broadcast address - 8.255.255.255
[CIDR]
Host address - 8.8.8.8
Host address (decimal) - 134744072
Host address (hex) - 8080808
Network address - 8.8.8.8
Network mask - 255.255.255.255
Network mask (bits) - 32
Network mask (hex) - FFFFFFFF
Broadcast address - 8.8.8.8
Cisco wildcard - 0.0.0.0
Addresses in network - 1
Network range - 8.8.8.8 - 8.8.8.8
[Classful bitmaps]
Network address - 00001000.00000000.00000000.00000000
Network mask - 11111111.00000000.00000000.00000000
[CIDR bitmaps]
Host address - 00001000.00001000.00001000.00001000
Network address - 00001000.00001000.00001000.00001000
Network mask - 11111111.11111111.11111111.11111111
Broadcast address - 00001000.00001000.00001000.00001000
Cisco wildcard - 00000000.00000000.00000000.00000000
Network range - 00001000.00001000.00001000.00001000 -
00001000.00001000.00001000.00001000
[Networks]
Network - 8.8.8.0 - 8.8.8.0
Network - 8.8.8.1 - 8.8.8.1
Network - 8.8.8.2 - 8.8.8.2
Network - 8.8.8.3 - 8.8.8.3
~省略~
プレフィックスを付けると以下の表示になります。青字がプレフィックスを付けない時との差分です。両コマンドとも、IPの範囲や数が表示されるようになります。
ipcalcでIPをプレフィックス付きで指定
# ipcalc 8.8.8.8/24 Address: 8.8.8.8 Network: 8.8.8.0/24 Netmask: 255.255.255.0 = 24 Broadcast: 8.8.8.255 Address space: Internet Address class: Class A HostMin: 8.8.8.1 HostMax: 8.8.8.254 Hosts/Net: 254
ipcalcはサブネットマスクを指定することもできます。
※ ipcalc 8.8.8.8 255.255.255.0 (表示は同じ)
sipcalcでIPをプレフィックス付きで指定
# sipcalc 8.8.8.8/24 -[ipv4 : 8.8.8.8/24] - 0 [CIDR] Host address - 8.8.8.8 Host address (decimal) - 134744072 Host address (hex) - 8080808 Network address - 8.8.8.0 Network mask - 255.255.255.0 Network mask (bits) - 24 Network mask (hex) - FFFFFF00 Broadcast address - 8.8.8.255 Cisco wildcard - 0.0.0.255 Addresses in network - 256 Network range - 8.8.8.0 - 8.8.8.255 Usable range - 8.8.8.1 - 8.8.8.254
sipcalcもサブネットマスクを指定することもできます。
# sipcalc 8.8.8.8 255.255.255.0 (表示は同じ)
ipcalcはDNSへの問い合わせもできます。IPからホスト名(dig -x コマンド相当)を確認します。なお、sipcalc には同様の機能は無いようです。
ipcalcでホスト名を確認
# ipcalc -h 8.8.8.8
HOSTNAME=dns.google
他にも、ipcalcでは、IPの表記が間違ってないか確認したり、サブネットマスクからプレフィックスの値だけを表示したりすることもできます。
ipcalcでIP表記やプレフィックス付きのIPが有効な表記か確認
# ipcalc -c 8.8.8.8 # echo $? 0 ※ 有効なアドレスなのでコマンドの戻り値が0 # ipcalc -c 8.8.8.300 ipcalc: bad IPv4 address: 8.8.8.300 # echo $? 1 ※ 無効なアドレスなのでコマンドの戻り値が1 # ipcalc -c 8.8.8.8/24 # echo $? 0 ※ 有効なアドレスなのでコマンドの戻り値が0 # ipcalc -c 8.8.8.8/99 ipcalc: bad IPv4 prefix: 99 # echo $? 1 ※ 無効なアドレスなのでコマンドの戻り値が1
ipcalcでサブネットのプレフィックス値を確認
# ipcalc --prefix 8.8.8.8 255.255.255.0 PREFIX=24