きっかけ
@m4g さんのツイートでいろんなツールを思い出したのでまとめておきます
CIDR入れたら該当するIPアドレスが全部テキストで吐かれるツールとかないかなぁ。
— m4g (@m4quick) 2022年5月13日
192.168.0.0/16って入れたら
192.168.0.1
192.168.0.2
……
192.168.255.254
みたいに出力されるとexpingの一覧とか作る時めっちゃ楽
prips (print IP address)
私も以前同様のツールを探して、blacknonさんのブログでpripsを知りました。
ここではRPM系Linuxでのインストールと動作確認を記します。
pripsのインストール
$ git clone https://gitlab.com/prips/prips.git $ cd prips $ make $ make test prove t t/01-cidr.t ...... ok t/02-range.t ..... ok t/03-skip.t ...... ok t/04-format.t .... ok t/05-except.t .... ok t/06-cidrize.t ... ok t/07-features.t .. skipped: The feature-check tool does not seem to be present All tests successful. Files=7, Tests=74, 1 wallclock secs ( 0.06 usr 0.02 sys + 0.34 cusr 0.12 csys = 0.54 CPU) Result: PASS $ sudo make install $ hash -r
pripsの使用例
まずはヘルプを見てみます。
$ prips -h usage: prips [options] <start end | CIDR block> -c print range in CIDR notation -d <x> set the delimiter to the character with ASCII code 'x' where 0 <= x <= 255 -h display this help message and exit -f <x> set the format of addresses (hex, dec, or dot) -i <x> set the increment to 'x' -e <x.x.x,x.x> exclude a range from the output, e.g. -e ..4. will not print 192.168.4.[0-255] prips --help | --version | --features Report bugs to Peter Pentchev <roam@ringlet.net>
元々のお題をであるCIDRを入れたらレンジ内のIPアドレスを列挙する、をやってみます。
prips 203.0.113.0/29 203.0.113.0 203.0.113.1 203.0.113.2 203.0.113.3 203.0.113.4 203.0.113.5 203.0.113.6 203.0.113.7
残念ながらCIDR表記指定などのオプションは無いので、末尾に/32を付けたい場合はsedします。
$ prips 203.0.113.0/29 | sed -e 's/$/\/32/g' 203.0.113.0/32 203.0.113.1/32 203.0.113.2/32 203.0.113.3/32 203.0.113.4/32 203.0.113.5/32 203.0.113.6/32 203.0.113.7/32
aggregate
ついでに関連ツールも書いていきます。
aggregateはその名の通りCIDR表記のアドレスリストを集約するツールです。
aggregateのインストール
epelにパッケージがあるのでyumで導入できます。
yum install aggregate そっち系の方は yum install aggregate-ios も便利かもしれません。
ソースコードからコンパイルしたい方はこちらから。
みんな大好きBIND DNSサーバーのISCさんのサーバーから入手できます。
https://ftp.isc.org/isc/aggregate/
grepcidr
grepcidrはCIDR表記のレンジやIPアドレスについて包含関係を判定するコマンドです。
当時yunazunoさんのブログで知りました。
yunazuno.hatenablog.com
grepcidrのインストール
atomic repoを用いてyumでインストールできます。
# curl -s https://updates.atomicorp.com/installers/atomic | sh # yum --enablerepo=atomic install grepcidr =================================================================================================================================== Package アーキテクチャー バージョン リポジトリー 容量 =================================================================================================================================== インストール中: grepcidr x86_64 2.0-1.el7.art atomic 21 k トランザクションの要約 =================================================================================================================================== インストール 1 パッケージ
sort
IPアドレスのソートは以下のsortコマンドオプションが使えます。
sort -n -t '.' -k 1,1 -k 2,2 -k 3,3 -k 4,4
$ cat sampleIPaddress.list 203.0.113.64 192.0.2.12 198.51.100.230 192.0.2.1 $ cat sampleIPaddress.list | sort -n -t '.' -k 1,1 -k 2,2 -k 3,3 -k 4,4 192.0.2.1 192.0.2.12 198.51.100.230 203.0.113.64
/32表記でも同じ結果が得られます。
$ cat sampleIPaddress.list 203.0.113.64/32 192.0.2.12/32 198.51.100.230/32 192.0.2.1/32 $ sort -n -t '.' -k 1,1 -k 2,2 -k 3,3 -k 4,4 sampleIPaddress.list 192.0.2.1/32 192.0.2.12/32 198.51.100.230/32 203.0.113.64/32
まとめ
IPアドレスやCIDRは小数でもない直接扱いにくい形式ですが、先人のみなさまが便利ツールを提供してくださっているので便利にシュッと使っていきたいですね。