15
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ネットワークプログラミングで大活躍 netaddrの簡易説明書 - Python

Last updated at Posted at 2019-03-18

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')]

15
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?