IPアドレスのプレフィックス、サブネットマスク計算

IP アドレスのプレフィックス、サブネットマスク計算、面倒ですよね。
あんなの暗記したくないですよね。
私は暗記してません。
手元の環境で常に [ipcalc.pl](http://jodies.de/ipcalc) が使えるようにしてあります。
http://jodies.de/ipcalc

Perl のスクリプトなんで何処でも気軽に動かせるのでイイ！！
これさえあれば Cisco 機器へ設定するときに間違えることもない！！ｗ

# 使用例
## 標準的な実行

```
./ipcalc.pl 10.1.1.123/24
Address:   10.1.1.123           00001010.00000001.00000001. 01111011
Netmask:   255.255.255.0 = 24   11111111.11111111.11111111. 00000000
Wildcard:  0.0.0.255            00000000.00000000.00000000. 11111111
=>
Network:   10.1.1.0/24          00001010.00000001.00000001. 00000000
HostMin:   10.1.1.1             00001010.00000001.00000001. 00000001
HostMax:   10.1.1.254           00001010.00000001.00000001. 11111110
Broadcast: 10.1.1.255           00001010.00000001.00000001. 11111111
Hosts/Net: 254                   Class A, Private Internet

> ./ipcalc.pl 10.1.1.123 255.255.255.0
Address:   10.1.1.123           00001010.00000001.00000001. 01111011
Netmask:   255.255.255.0 = 24   11111111.11111111.11111111. 00000000
Wildcard:  0.0.0.255            00000000.00000000.00000000. 11111111
=>
Network:   10.1.1.0/24          00001010.00000001.00000001. 00000000
HostMin:   10.1.1.1             00001010.00000001.00000001. 00000001
HostMax:   10.1.1.254           00001010.00000001.00000001. 11111110
Broadcast: 10.1.1.255           00001010.00000001.00000001. 11111111
Hosts/Net: 254                   Class A, Private Internet

```
- 取りあえず情報が全部出てくる
- prefix いれても、subnetmask どちらを入れてもOK
- 私はこの表示から、必要な情報をコピペして使ってます

## /26 って /28 にするとどうなんだっけ？

```
> ./ipcalc.pl -b 10.1.1.123/26 28
Address:   10.1.1.123           
Netmask:   255.255.255.192 = 26 
Wildcard:  0.0.0.63             
=>
Network:   10.1.1.64/26         
HostMin:   10.1.1.65            
HostMax:   10.1.1.126           
Broadcast: 10.1.1.127           
Hosts/Net: 62                    Class A, Private Internet

Subnets after transition from /26 to /28

Netmask:   255.255.255.240 = 28 
Wildcard:  0.0.0.15             

 1.
Network:   10.1.1.64/28         
HostMin:   10.1.1.65            
HostMax:   10.1.1.78            
Broadcast: 10.1.1.79            
Hosts/Net: 14                    Class A, Private Internet

 2.
Network:   10.1.1.80/28         
HostMin:   10.1.1.81            
HostMax:   10.1.1.94            
Broadcast: 10.1.1.95            
Hosts/Net: 14                    Class A, Private Internet

 3.
Network:   10.1.1.96/28         
HostMin:   10.1.1.97            
HostMax:   10.1.1.110           
Broadcast: 10.1.1.111           
Hosts/Net: 14                    Class A, Private Internet

 4.
Network:   10.1.1.112/28        
HostMin:   10.1.1.113           
HostMax:   10.1.1.126           
Broadcast: 10.1.1.127           
Hosts/Net: 14                    Class A, Private Internet


Subnets:   4
Hosts:     56
```
- `-b`オプションでバイナリ情報非表示

## Excel の設定シートにIPアドレス書くのめんどい

```
> ./ipcalc.pl -b 10.1.1.123/28 32 | awk '/Hostroute/{print $2}'
10.1.1.112
10.1.1.113
10.1.1.114
10.1.1.115
10.1.1.116
10.1.1.117
10.1.1.118
10.1.1.119
10.1.1.120
10.1.1.121
10.1.1.122
10.1.1.123
10.1.1.124
10.1.1.125
10.1.1.126
10.1.1.127
```
- awk と組み合わせて必要な情報だけ表示 --> Excel に貼り付け

# IPv6 の場合
最近は使ってないけど、IPv6 を計算するときは[ipv6gen.pl](https://github.com/vladak/ipv6gen)使ってます。

- https://github.com/vladak/ipv6gen
    - このツール、16進数のローマ字が大文字になるのがちょっと好きじゃない
    - 標準のオプションで小文字にして欲しいなぁ
    - IPv6 の表記は小文字にしましょうって、どっかのRFCに書いてなかったっけ？
    - この記事書くときに配布元見たら、version 1 になっててビックリした

え？ IPv6 なんて使わないって？？
。。。　( TДT)

## 実行例

```
> ./ipv6gen.pl feC0::/10 12
FEC0::/12
FED0::/12
FEE0::/12
FEF0::/12
```

配布元にいっぱいサンプル掲載されてます

# 最後に
CentOS7 とかだと、ipcalc ってコマンドが入ってますが、あれって`prefix`だとか、`subnetmask`とか1個ずつしか表示してくれない（？）ですよね。
「取りあえず全部表示してくれ！！ 必要な情報だけコピペするから！！」というのが個人的な意見。


他の人はどうしてんだろ？
暗記？
他のツール使ってる？
そもそもそんなの必要ない？ｗ