LoginSignup
1
1

More than 3 years have passed since last update.

PythonでIPアドレス,CIDR等を操作するnetaddrについて

Posted at

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ブロックやアドレスが,一覧で返ってきます.これをライブラリなしでやろうとするとかなり面倒です.

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1