はじめに
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
って、なんて便利で素敵なライブラリなんでしょうって思いますよね。
そのほかにもまだまだ便利な使い方が[本家のページ ]のチュートリアルに掲載されているので詳しく知りたい方はそちらで。
そして、「とやかく言わずに、結果だけ知りたいぞ!」って方向けにnetaddrを使って色々な情報を調べた結果だけを視覚的に表示するサイトを作ったので、よかったらこちらもどうぞ。
ツールの使い方
[IP Address(CIDR)]にCIDR表記のネットワークアドレス(例 192.168.1.0/24)を入力して、[Calc]をクリックするとそのネットワークアドレスに関する以下の情報を表示します。
・ネットワークアドレス (10進数/2進数)
・サブネットマスク (10進数/2進数)
・ホストマスク (10進数/2進数)
・ブロードキャストアドレス (10進数/2進数)
・アドレスレンジ
・ホスト部のIPアドレス数
・使用可能なIPアドレス数
・IPv6アドレス
・該当ネットワークが以下に該当するかどうか
プライベート/ユニキャスト/マルチキャスト/ループバック/リンクローカル/予約