192.168.99.43/28のネットワークアドレスってなんだっけ
IPアドレスをパッとみたときにネットワークアドレスとか利用IPなどを頭の中で計算することってありませんか?
私はよくやっていて、その度に念のためググって確認しようってなっていました。
そこでPythonのipaddressモジュールを使いIPアドレスの計算をしてくれるCLIツールを作ってみました。
簡単なものですが紹介します。
構成
(ipcal) usalab!:ipcal-1.0 $ tree . ├── ipcal │ ├── __init__.py │ ├── main.py │ └── util.py └── setup.py
main.pyはutil.pyを呼び出しのとclickで--ipのオプションで実行時にもIPセグメントの入力ができます。
from . import util import click @click.command() @click.option('--ip',default='', type=str, help='ipaddress') def main(ip): ipnetwork = util.input_value_cast_to_ipv4network(ip) util.ipnetwork_information(ipnetwork) if __name__ == '__main__': main()
util.py(名前つけるセンスがない)ではipaddressモジュールを利用して、入力値をIPv4Networkオブジェクトにして返すinput_value
と計算結果を表示するipnetwork_information
の2つのメソッドを作成してます。
import ipaddress import sys def input_value_cast_to_ipv4network(input_ip): ''' 入力値をipaddressオブジェクトにキャストして戻す ''' if input_ip: try: ipnetwork = ipaddress.ip_network(input_ip,strict=False) return ipnetwork except ValueError: print(f"Error: Value Error") sys.exit(1) except Exception as e: print(f"Error: {e}") sys.exit(1) else: value = input('IPアドレス入力[X.X.X.X/X]>> ') try: ipnetwork = ipaddress.ip_network(value,strict=False) return ipnetwork except ValueError: print(f"Error: Value Error") sys.exit(1) except Exception as e: print(f"Error: {e}") sys.exit(1) def ipnetwork_information(ipnetwork): print(f'Prefix : {ipnetwork.with_prefixlen}') print(f'SubnetMask : {ipnetwork.netmask}') print(f'WildCardMask : {ipnetwork.with_hostmask}') print(f'NetworkAddress : {ipnetwork.network_address}') print(f'BroadCastAddress: {ipnetwork.broadcast_address}')
ipaddressモジュールのメソッドを呼び出すだけで簡単にネットワークアドレスやブロードキャストアドレスを表示することができます。
どうやって公開するのがいいのかよくわからない。。
python setup sdist
を実施してpip install dist/ipcal-1.0.tar.gz
することでipcal
コマンドで実行することができます。
ググる時間が減ったのでヨシ!!