IPアドレスをいじくりまわしたり、IPアドレスの比較・判定、CIDR作成・結合や分解、
レンジ範囲操作でなどネットワークエンジニアは活用する機会が多いnetaddrの自分用に使い方メモまとめ。
メモなんで今後随時追加していきます。
#1. netaddrインストール
pipコマンドでインストール
pip install netaddr
#2.netaddr読み込み
from netaddr import *
#3 netaddr基本操作
###IPアドレスの種類出力
ip = IPAddress('192.0.2.1') print(ip.version)
出力 4
###文字列(str)型で出力
str(ip)
###int型でロングIP出力
ロングIPへ変換
int(ip)
比較
int(ip) == 3221225985
True
###その他型操作 ヘックス、バイナリなど
hex(ip)
'0xc0000201'
ip.bin
'0b11000000000000000000001000000001'
ip.bits()
'11000000.00000000.00000010.00000001'
ip.words == (192, 0, 2, 1)
True
IPV4からIPV6へ変換
IPAddress('192.0.2.15').ipv6()
出力 IPAddress('::ffff:192.0.2.15')
IPV6からIPV4へ変換
IPNetwork('::ffff:192.0.2.1/119').ipv4()
IPNetwork('192.0.2.1/23')
#リスト操作
IPアドレスをリスト操作可能。
list()でCIDRをリスト化。
ip = IPNetwork('192.0.2.16/29') ip_list = list(ip)
###リストの長さ
len(ip_list)
出力 8
#リストの中身
print(ip_list)
出力 [IPAddress('192.0.2.16'), IPAddress('192.0.2.17'), ..., IPAddress('192.0.2.22'), IPAddress('192.0.2.23')]
##リストインデックス操作
IPリストの一番初めを取得
ip[0]
出力 IPAddress('192.0.2.16')
IPリストの最終を取得
ip[-1]
出力 IPAddress('192.0.2.23')
#CIDRでは取り扱いにくいIPレンジをリスト管理する
以下のコマンドでIPレンジをリスト化可能。
list(iter_iprange('レンジの始まりIP', 'レンジの終わりIP'))
例
ip_list = list(iter_iprange('192.0.2.1', '192.0.2.14'))
###作ったリストをCIDRへ変換も可能
cidr_merge(ip_list)
出力 [IPNetwork('192.0.2.1/32'), IPNetwork('192.0.2.2/31'), IPNetwork('192.0.2.4/30'), IPNetwork('192.0.2.8/30'), IPNetwork('192.0.2.12/31'), IPNetwork('192.0.2.14/32')]
#IPアドレスのカテゴリを判別する
###ユニキャストIPかどうか
IPAddress('192.0.2.1').is_unicast()
出力 True
IPAddress('fe80::1').is_unicast()
出力 True
###マルチキャストIPかどうか
IPAddress('239.192.0.1').is_multicast()
出力 True
IPAddress('ff00::1').is_multicast()
出力 True
###プライベートIPかどうか
IPAddress('172.24.0.1').is_private()
出力 True
IPAddress('10.0.0.1').is_private()
出力 True
IPAddress('192.168.0.1').is_private()
出力 True
IPAddress('fc00::1').is_private()
出力 True
###リザーブド(予約済み)IPアドレスかどうか
IPAddress('253.0.0.1').is_reserved()
出力 True
###パブリック(インターネットからアクセスできる)IPアドレスかどうか
ip = IPAddress('62.125.24.5') ip.is_unicast() and not ip.is_private()
出力 True
###ネットマスクかどうか
IPAddress('255.255.254.0').is_netmask()
出力 True
#IPアドレスの比較操作
IPAddress('192.0.2.1') == IPAddress('192.0.2.1')
True
IPAddress('192.0.2.1') < IPAddress('192.0.2.2')
True
IPAddress('192.0.2.2') > IPAddress('192.0.2.1')
True
IPAddress('192.0.2.1') != IPAddress('192.0.2.1')
False
IPAddress('192.0.2.1') >= IPAddress('192.0.2.1')
True
IPAddress('192.0.2.2') >= IPAddress('192.0.2.1')
True
IPAddress('192.0.2.1') <= IPAddress('192.0.2.1')
True
IPAddress('192.0.2.1') <= IPAddress('192.0.2.2')
True
#IPアドレスのレンジ(範囲)
r1 = IPRange('192.0.2.1', '192.0.2.15')
cidrs()でCIDRへ変換可能
r1.cidrs()
出力 [IPNetwork('192.0.2.1/32'), IPNetwork('192.0.2.2/31'), IPNetwork('192.0.2.4/30'), IPNetwork('192.0.2.8/29')]
list()でリストへ変換可能
list(r1)
出力 [IPAddress('192.0.2.1'), IPAddress('192.0.2.2'), IPAddress('192.0.2.3'), IPAddress('192.0.2.4'), IPAddress('192.0.2.5'), IPAddress('192.0.2.6'), IPAddress('192.0.2.7'), IPAddress('192.0.2.8'), IPAddress('192.0.2.9'), IPAddress('192.0.2.10'), IPAddress('192.0.2.11'), IPAddress('192.0.2.12'), IPAddress('192.0.2.13'), IPAddress('192.0.2.14'), IPAddress('192.0.2.15')]