IPアドレス計算に使えるLinuxコマンド ipcount ipcalc sipcalc

以前、コマンドラインで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
タイトルとURLをコピーしました