ipcalcコマンドでIPアドレスからネットマスク、ネットワークアドレス、ブロードキャストアドレス、ホスト数を算出する
はじめに
IPアドレス/CIDR
( ex: 192.168.1.16/27
) のパターンから、特定のサブネットに所属するかを1つずつ確認する作業を行いました。
目視で1つずつ計算していたのですが、効率が悪いし何より疲れるため、かんたんにサブネットの計算ができないかと思っていたときに見つけたツールを紹介します。
検証環境
$ uname -moi
arm64 unknown Darwin
$ bash -version | head -n 1
GNU bash, バージョン 5.1.16(1)-release (aarch64-apple-darwin21.1.0)
IP アドレスと CIDR からネットワークに関する情報を算出する ipcalc
コマンド
見つけたツールは、 IP アドレスと CIDR 表記の組み合わせ ( ex: 192.168.1.16/27
) からネットワークに関する情報を算出してくれる ipcalc
と言うものです。
インストール
macOS の場合、 Homebrew でかんたんにインストールできました。
$ brew install ipcalc
Ubuntu 22.10 環境でも APT を使ってかんたんにインストールできました。
$ sudo apt install ipcalc
使い方
ipcalc
コマンドの引数に IP アドレス (+CIDR) を指定すると、IP アドレスが存在するネットワークの情報を逆算してくれます。
IP アドレス/CIDR
を指定
引数に IP アドレス/CIDR
を指定します。
$ ipcalc 192.168.0.1/24
Address: 192.168.0.1 11000000.10101000.00000000. 00000001
Netmask: 255.255.255.0 = 24 11111111.11111111.11111111. 00000000
Wildcard: 0.0.0.255 00000000.00000000.00000000. 11111111
=>
Network: 192.168.0.0/24 11000000.10101000.00000000. 00000000
HostMin: 192.168.0.1 11000000.10101000.00000000. 00000001
HostMax: 192.168.0.254 11000000.10101000.00000000. 11111110
Broadcast: 192.168.0.255 11000000.10101000.00000000. 11111111
Hosts/Net: 254 Class C, Private Internet
表示されている内容は書かれている通りですが、以下のとおりです。
- ネットワークは
192.168.0.0/24
- ホストが利用可能な IP アドレスは
192.168.0.1
〜192.168.0.254
- ブロードキャストアドレスは
192.168.0.255
- ホストに割り当て可能な IP アドレスは
254
アドレス
デフォルトのカラーリングが表示に見やすいため、 スクリーンショットも貼っておきます。
以下のように、情報は見やすくカラーリングされています。
カラー | 説明 |
---|---|
青緑 | IP アドレスの 「オクテット表記」 |
黄 | IP アドレスの 「ビット表記」 |
赤 | IP アドレスの 「ビット表記」 のうち、 「サブネット」 |
紫 | IP アドレスの所属する 「クラス」 ( A/B/C/D のいずれか ) |
/
の代わりにスペースでも問題なく動作します 。
$ ipcalc 192.168.0.1 24
Address: 192.168.0.1 11000000.10101000.00000000. 00000001
Netmask: 255.255.255.0 = 24 11111111.11111111.11111111. 00000000
Wildcard: 0.0.0.255 00000000.00000000.00000000. 11111111
=>
Network: 192.168.0.0/24 11000000.10101000.00000000. 00000000
HostMin: 192.168.0.1 11000000.10101000.00000000. 00000001
HostMax: 192.168.0.254 11000000.10101000.00000000. 11111110
Broadcast: 192.168.0.255 11000000.10101000.00000000. 11111111
Hosts/Net: 254 Class C, Private Internet
IP アドレス/ネットマスク
を指定
IP アドレス/ネットマスク
の形式で引数を指定することもできます。
出力結果は先程と同様です。
$ ipcalc 192.168.0.1/255.255.128.0
Address: 192.168.0.1 11000000.10101000.0 0000000.00000001
Netmask: 255.255.128.0 = 17 11111111.11111111.1 0000000.00000000
Wildcard: 0.0.127.255 00000000.00000000.0 1111111.11111111
=>
Network: 192.168.0.0/17 11000000.10101000.0 0000000.00000000
HostMin: 192.168.0.1 11000000.10101000.0 0000000.00000001
HostMax: 192.168.127.254 11000000.10101000.0 1111111.11111110
Broadcast: 192.168.127.255 11000000.10101000.0 1111111.11111111
Hosts/Net: 32766 Class C, Private Internet
CIDR の部分で説明したのと同じように、 /
の代わりにスペースでも問題なく動作します 。
$ ipcalc 192.168.0.1 255.255.128.0
IP アドレス/ネットマスク(16進数)
を指定
IP アドレス/ネットマスク(16進数)
の形式で引数を指定しても動作しました。
$ ipcalc 192.168.0.1/0xffffff00
Address: 192.168.0.1 11000000.10101000.00000000. 00000001
Netmask: 255.255.255.0 = 24 11111111.11111111.11111111. 00000000
Wildcard: 0.0.0.255 00000000.00000000.00000000. 11111111
=>
Network: 192.168.0.0/24 11000000.10101000.00000000. 00000000
HostMin: 192.168.0.1 11000000.10101000.00000000. 00000001
HostMax: 192.168.0.254 11000000.10101000.00000000. 11111110
Broadcast: 192.168.0.255 11000000.10101000.00000000. 11111111
Hosts/Net: 254 Class C, Private Internet
こちらもやはり /
の代わりにスペースでも問題なく動作します 。
$ ipcalc 192.168.0.1 0xffffff00
Address: 192.168.0.1 11000000.10101000.00000000. 00000001
Netmask: 255.255.255.0 = 24 11111111.11111111.11111111. 00000000
Wildcard: 0.0.0.255 00000000.00000000.00000000. 11111111
=>
Network: 192.168.0.0/24 11000000.10101000.00000000. 00000000
HostMin: 192.168.0.1 11000000.10101000.00000000. 00000001
HostMax: 192.168.0.254 11000000.10101000.00000000. 11111110
Broadcast: 192.168.0.255 11000000.10101000.00000000. 11111111
Hosts/Net: 254 Class C, Private Internet
IP アドレス/ネットマスク(否定)
を指定
ネットマスクは通常 255.255.255.0
のように、2 進数表記で左から 1 が連続する表現となります( 11111111.11111111.11111111.00000000
) 。
ネットマスクを否定した表現、つまり右から 1 が連続する表現も可能です。
255.255.255.0
を指定した場合と 0.0.0.255
を指定した場合の結果は同じになります。
カバーするホスト数の上限が見えている場合はこちらの表現が楽かもしれません 。
$ ipcalc 192.168.0.1/0.0.0.255
WILDCARD
Address: 192.168.0.1 11000000.10101000.00000000. 00000001
Netmask: 255.255.255.0 = 24 11111111.11111111.11111111. 00000000
Wildcard: 0.0.0.255 00000000.00000000.00000000. 11111111
=>
Network: 192.168.0.0/24 11000000.10101000.00000000. 00000000
HostMin: 192.168.0.1 11000000.10101000.00000000. 00000001
HostMax: 192.168.0.254 11000000.10101000.00000000. 11111110
Broadcast: 192.168.0.255 11000000.10101000.00000000. 11111111
Hosts/Net: 254 Class C, Private Internet
CIDR、ネットマスクを指定しなかった場合は?
CIDR やネットマスクを指定しなかった場合には、現在自分が所属しているネットワークのネットマスクが自動的に適用されます。
# ネットマスクは /24 ( 255.255.255.0 ) となっている
$ ipcalc 192.168.0.1
Address: 192.168.0.1 11000000.10101000.00000000. 00000001
Netmask: 255.255.255.0 = 24 11111111.11111111.11111111. 00000000
Wildcard: 0.0.0.255 00000000.00000000.00000000. 11111111
=>
Network: 192.168.0.0/24 11000000.10101000.00000000. 00000000
HostMin: 192.168.0.1 11000000.10101000.00000000. 00000001
HostMax: 192.168.0.254 11000000.10101000.00000000. 11111110
Broadcast: 192.168.0.255 11000000.10101000.00000000. 11111111
Hosts/Net: 254 Class C, Private Internet
# 現在所属しているネットワークのネットマスクが 0xffffff00 = /24 = 255.255.255.0 となっている
$ ifconfig en0 | grep -i netmask
inet 192.168.1.13 netmask 0xffffff00 broadcast 192.168.1.255
誤った IP アドレス、CIDR、ネットマスクを指定するとエラーを吐いてくれる
IP アドレス、CIDR、ネットマスクの指定に誤りがあった場合には、エラーで教えてくれます。
$ ipcalc 192.168.256.1/0.0.0.15
WILDCARD
INVALID ADDRESS: 192.168.256.1
$ ipcalc 192.168.0.1/33
INVALID MASK1: 33
$ ipcalc 192.168.0.1/0.0.0.32
WILDCARD
INVALID NETMASK
INVALID MASK1: 0.0.0.32
ひとこと
エンジニアとしてこのあたりの計算をぱぱっとできればかっこいいのでしょうが、僕は計算に時間がかかってしまいますし何より間違えそうなのでツールに頼ることにしました。
ディスカッション
コメント一覧
まだ、コメントがありません