はじめに
PythonでIPアドレスやネットワークアドレスを表現したり操作するための超絶便利なライブラリnetaddr
が素敵すぎるので、このライブラリと戯れながら、PythonでCIDR表記のネットワークアドレスから利用可能なホスト数やレンジを調べてみる。
1. 準備
・netaddrをインストール
$ pip install netaddr
・ライブラリ読み込み
>>> from netaddr import *
2. CIDR表記のネットワークアドレスを扱う
・CIDR表記のネットワークアドレスをIPNetworkクラスに渡す
>>> ip = IPNetwork('192.168.1.0/24')
・みてみる
>>> ip
IPNetwork('192.168.1.0/24')
・これで192.168.1.0/24
に関する色々な情報を調べられる準備が完了
3. ネットワークアドレスの色々をみてみる
・ネットワークに含まれるIPアドレス数とホストアドレス数まずはこのネットワークに含まれるIPアドレス数とホストアドレス数を調べてみる。
>>> ip.size
256
ネットワークアドレス(192.168.1.0)とブロードキャストアドレス(192.168.1.255)を除いた利用可能なホストアドレス数は以下で調べられる。
>>> len(list(ip.iter_hosts()))
254
答えは254
。
ちなみにこのネットワークのネットワークアドレスとブロードキャストアドレスが知りたい時はそれぞれ、
>>> ip.network
IPAddress('192.168.1.0')
>>> ip.broadcast
IPAddress('192.168.1.255')
とすれば、こんな感じでIPAddressオブジェクトで結果が返ってくる。超簡単
このネットワークのレンジが知りたい時はネットワークの先頭と末尾をそれぞれ、
>>> ip[0]
IPAddress('192.168.1.0')
>>> ip[-1]
IPAddress('192.168.1.255')
として見てみると、こんな感じでやはり、IPAddressオブジェクトで結果が返って来るので、このネットワークのレンジは192.168.1.0~192.168.1.255
であることがわかる。
なお、IPNetworkオブジェクト、IPAddressオブジェクトを文字列として使いたい時はstr()
関数を使えば文字列型で返してくれる。
>>> str(ip)
'192.168.1.0/24'
>>> str(ip.network)
'192.168.1.0'
まとめ
このようにnetaddr
って、なんて便利で素敵なライブラリなんでしょう


そのほかにもまだまだ便利な使い方が[本家のページ ]のチュートリアルに掲載されているので詳しく知りたい方はそちらで。