CIDR
Classless inter-domain routingの頭文字.
意味は,「アドレスクラスの概念を用いないでIPアドレスの割り当てや経路の選択などを可能にする仕組み」のこと.
(「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典より)
https://wa3.i-3-i.info/word11990.html
様々なIT用語について解説してくれているサイトです.素人にもとてもわかりやすい記述で,重宝しています.
netaddr
Pythonのライブラリで,IPネットワークの操作に使います.
公式ドキュメント(https://pypi.org/project/netaddr/) の説明には,A network address manipulation library for Pythonとあります.
IPネットワーク同士を比較したり,差集合をとる,共通部分をとる,含まれるIPアドレス一覧を取得...などの操作が簡単に実現できます.
例). 差集合
IPSet()を使って,CIDR表記のIPブロック同士の差集合をとってみます.
>>> s1 = IPSet(['0.0.0.0/0']) # 0.0.0.0/0を要素として追加
>>> s1.remove('255.255.255.255') # remove()で指定したアドレスのみ削除する
>>> s1
IPSet(['0.0.0.0/1', '128.0.0.0/2', '192.0.0.0/3', '224.0.0.0/4', '240.0.0.0/5', ... '255.255.255.254/32'])
こうすると,removeで指定したアドレスを差し引いた残りのIPブロックやアドレスが,一覧で返ってきます.これをライブラリなしでやろうとするとかなり面倒です.