はじめに
前回はサブネットを集約するスーパネット化の記事を書きましたが、今回は反対にPythonであるネットワークを特定のサブネットマスクでより小さいサブネットに分割する方法について書きたいと思います。
手っ取り早くネットワークを分割したい方はこちらをご利用ください。
ネットワーク分割
ここでは192.168.32.0/24
というネットワークを/25
のサブネットマスクで分割してみたい。
・準備
必要なライブラリのインストール。
pip install netaddr
・サブネット分割
#便利なライブラリのnetaddrを読み込む
from netaddr import IPNetwork
#192.168.32.0/24のサブネットをIPnetworkクラスに渡してオブジェクトsubnetを生成。
subnet = IPNetwork('192.168.0.0/24')
'''
たったこの1行だけでネットワークを分割できる!
以下はプレフィックス/24のサブネットに対し、/25を指定してより小さいサブネットに分割する。
'''
splited_subnet = list(subnet.subnet(25))
print(splited_subnet)
・結果
この様に192.168.32.0/24
のネットワークを/25
のサブネットマスクで分割した結果、192.168.0.0/25
と192.168.0.128/25
のサブネットに分割されることがわかる。
[IPNetwork('192.168.0.0/25'), IPNetwork('192.168.0.128/25')]
ちなみにこの記事はnetaddrで書き始めたが、標準ライブラリのipaddressでも同じことができる上、インストール不要なので、こちらを使うのが良いかと思う。今更ながら...
from ipaddress import ip_network
subnet = ip_network('192.168.0.0/24')
#/24より1小さいプレフィックス長(/25)のサブネットに分割。
splited_subnet = list(subnet.subnets(prefixlen_diff=1))
print(splited_subnet)
[IPv4Network('192.168.0.0/25'), IPv4Network('192.168.0.128/25')]
さいごに
このnetaddrというライブラリはIPアドレスやネットワークアドレスに対する操作をするのにすごく便利なライブラリで、サブネット分割だけでなく、さまざまな操作ができます。これまでにいくつか記事を書きましたので、そちらもご参照ください。
また、そのような操作をWeb上でできるサイトを提供しているので是非ご利用ください。
IP Addr Tools: このサイトでIPアドレスやサブネットを操作するいくつかのツールを提供しています。
以上
参考サイト: