ipaddress --- IPv4/IPv6 操作ライブラリ¶
ソースコード: Lib/ipaddress.py
ipaddress は IPv4 と IPv6 のアドレスやネットワークを作成、操作する機能を提供します。
このモジュールの関数やクラスを使うと、IPアドレスに関する様々なタスク、例えば2つのホストが同じサブネットに属しているかどうかをチェックしたり、特定のサブネット内の全てのホストをイテレートしたり、文字列が正しい IP アドレスかネットワークを定義しているかどうかをチェックするなどを簡単に実現することができます。
これはモジュールの完全な API リファレンスです。概要や紹介は ipaddressモジュールの紹介 を参照してください。
Added in version 3.3.
便利なファクトリ関数¶
ipaddress モジュールは、IP アドレス、ネットワーク、インターフェースを簡単に作成するためのファクトリ関数を提供します。
- ipaddress.ip_address(address)¶
引数に渡された IP address に応じて、
IPv4AddressかIPv6Addressのオブジェクトを返します。 IPv4 か IPv6 のアドレスを受け取ります;2**32より小さい整数はデフォルトでは IPv4 アドレスだと判断されます。 address が正しい IPv4, IPv6 アドレスを表現していない場合はValueErrorを発生させます。>>> ipaddress.ip_address('192.168.0.1') IPv4Address('192.168.0.1') >>> ipaddress.ip_address('2001:db8::') IPv6Address('2001:db8::')
- ipaddress.ip_network(address, strict=True)¶
引数に渡された IP address に応じて、
IPv4NetworkかIPv6Networkのオブジェクトを返します。 address は IP ネットワークを示す文字列あるいは整数です。 IPv4 か IPv6 のネットワークを受け取ります;2**32より小さい整数はデフォルトでは IPv4 アドレスだと判断されます。 strict はIPv4NetworkかIPv6Networkのコンストラクタに渡されます。 address が正しい IPv4, IPv6 アドレスを表現していない場合や、ネットワークの host bit がセットされていた場合はValueErrorを発生させます。>>> ipaddress.ip_network('192.168.0.0/28') IPv4Network('192.168.0.0/28')
- ipaddress.ip_interface(address)¶
引数に渡された IP address に応じて、
IPv4InterfaceかIPv6Interfaceのオブジェクトを返します。 address は IP アドレスを示す文字列あるいは整数です。 IPv4 か IPv6 のアドレスを受け取ります;2**32より小さい整数はデフォルトでは IPv4 アドレスだと判断されます。 address が正しい IPv4, IPv6 アドレスを表現していない場合はValueErrorを発生させます。
これらの便利関数を利用するデメリットとして、IPv4 と IPv6 両方のフォーマットを扱う必要性があるために、どちらを期待されていたのかを知ることができず、エラーメッセージが最小限の情報しか提供できないことです。利用したいバージョンの特定のコンストラクタを直接呼ぶことで、より詳細なエラーレポートを得ることができます。
IP アドレス¶
Address オブジェクト¶
IPv4Address と IPv6Address オブジェクトは多くの共通した属性を持っています。両方の IP バージョンを扱うコードを書きやすくするために、IPv6 アドレスでしか意味が無いいくつかの属性も IPv4Address オブジェクトに実装されています。アドレスオブジェクトは hashable なので、辞書のキーとして利用できます。
- class ipaddress.IPv4Address(address)¶
IPv4 アドレスを構築する。 address が正しい IPv4 アドレスでない場合、
AddressValueErrorを発生させます。以下のものが正しい IPv4 アドレスを構築します:
0 以上 255 以下の 4 つの 10 進整数をドットで区切った、ドット付き 10 進表記の文字列 (例:
192.168.0.1)。 各整数はアドレスの 1 オクテット (1 バイト) を表します。 8 進表記との混同を避けるため、先頭のゼロは許可されません。32bit に収まる整数。
大きさ4の
bytesオブジェクトに (最上位オクテットが最初になるように) パックされた整数。
>>> ipaddress.IPv4Address('192.168.0.1') IPv4Address('192.168.0.1') >>> ipaddress.IPv4Address(3232235521) IPv4Address('192.168.0.1') >>> ipaddress.IPv4Address(b'\xC0\xA8\x00\x01') IPv4Address('192.168.0.1')
バージョン 3.8 で変更: 8 進表記のように見える曖昧な場合も含め、先頭のゼロを許可するようになりました。
バージョン 3.9.5 で変更: 先頭のゼロは許可されなくなり、エラーとして扱われるようになりました。 IPv4 アドレス文字列は、glibc の
inet_pton()と同じ厳密さで解析されます。- version¶
適切なバージョン番号: IPv4 なら
4, IPv6 なら6.バージョン 3.14 で変更: クラスからも利用できるようになりました。
- max_prefixlen¶
このバージョンのアドレスを表現するのに必要なビット数: IPv4 なら
32, IPv6 なら128.prefix は、アドレスがネットワークに含まれるかどうかを決定するために比較する、アドレスの先頭ビット数を定義します。
バージョン 3.14 で変更: クラスからも利用できるようになりました。
- compressed¶
- exploded¶
ドットと10進数を使った表現の文字列。この表現には先頭の 0 は含まれません。
IPv4 はアドレスの 0 オクテットを省略する記法を定義していないので、IPv4 アドレスにおいてこれらの2つの属性は常に
str(addr)と等しくなります。これらの属性を用意することで、IPv4 と IPv6 アドレス両方を扱う、表示用コードが書きやすくなります。
- reverse_pointer¶
IP アドレスの逆引き DNS PTR レコードの名前です。 例えば次のようになります。
>>> ipaddress.ip_address("127.0.0.1").reverse_pointer '1.0.0.127.in-addr.arpa' >>> ipaddress.ip_address("2001:db8::1").reverse_pointer '1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa'
これは PTR レコードの検索に使用する名前であり、名前解決で得られるホスト名そのものではありません。
Added in version 3.5.
- is_private¶
iana-ipv4-special-registry (IPv4 の場合) または iana-ipv6-special-registry (IPv6 の場合) で、グローバルに到達不能と定義されているアドレスなら
Trueです。 ただし、次の例外があります。共有アドレス空間 (
100.64.0.0/10) ではis_privateはFalseです。IPv4 射影 IPv6 アドレスでは、
is_privateの値は埋め込まれた IPv4 アドレスの意味に基づいて決まり、次の条件が成り立ちます (IPv6Address.ipv4_mappedを参照)。address.is_private == address.ipv4_mapped.is_private
is_privateの値はis_globalと逆になります。 ただし、共有アドレス空間 (100.64.0.0/10の範囲) では両方ともFalseです。バージョン 3.13 で変更: 誤って真または偽と判定していたケースをいくつか修正しました。
192.0.0.9/32と192.0.0.10/32を除き、192.0.0.0/24をプライベートとみなすようになりました (従来は、その一部の192.0.0.0/29のみをプライベートとみなしていました)。64:ff9b:1::/48をプライベートとみなすようになりました。2002::/16をプライベートとみなすようになりました。プライベートとみなされる
2001::/23の中には、2001:1::1/128、2001:1::2/128、2001:3::/32、2001:4:112::/48、2001:20::/28、2001:30::/28という例外があります。 これらの例外はプライベートとはみなされません。
- is_global¶
iana-ipv4-special-registry (IPv4 の場合) または iana-ipv6-special-registry (IPv6 の場合) で、グローバルに到達可能と定義されているアドレスなら
Trueです。 ただし、次の例外があります。IPv4 射影 IPv6 アドレスでは、
is_privateの値は埋め込まれた IPv4 アドレスの意味に基づいて決まり、次の条件が成り立ちます (IPv6Address.ipv4_mappedを参照)。address.is_global == address.ipv4_mapped.is_global
is_globalの値はis_privateと逆になります。 ただし、共有アドレス空間 (100.64.0.0/10の範囲) では両方ともFalseです。Added in version 3.4.
バージョン 3.13 で変更: 誤って真または偽と判定していたケースをいくつか修正しました。 詳しくは
is_privateを参照してください。
- is_reserved¶
IETF によって予約済みとされているアドレスなら
Trueです。 IPv4 では、Reservedアドレスブロックである240.0.0.0/4のみが該当します。 IPv6 では、将来の使用のためにReserved by IETFとして 割り当てられている すべてのアドレスが該当します。注釈
IPv4 の
is_reservedは、iana-ipv4-special-registry にあるアドレスブロックのReserved-by-Protocol列の値とは関係ありません。注意
IPv6 では、かつてサイトローカルスコープのアドレスプレフィックスだった
fec0::/10は現在この一覧から除外されています (is_site_localと RFC 3879 を参照)。
- ipv6_mapped¶
IPv4 射影 IPv6 アドレスを表す
IPv6Addressオブジェクトです。 RFC 4291 を参照してください。Added in version 3.13.
- IPv4Address.__format__(fmt)¶
明示的な書式文字列に従い、IP アドレスの文字列表現を返します。 fmt には、デフォルトで
str()と同等の's'、ゼロ埋めした 2 進文字列の'b'、大文字または小文字の 16 進表現の'X'または'x'、あるいは'n'を指定できます。'n'は、IPv4 アドレスでは'b'、IPv6 アドレスでは'x'と同等です。 2 進表現と 16 進表現では、形式指定子'#'と桁区切りオプション'_'が利用できます。__format__はformat、str.format、f 文字列で使用されます。>>> format(ipaddress.IPv4Address('192.168.0.1')) '192.168.0.1' >>> '{:#b}'.format(ipaddress.IPv4Address('192.168.0.1')) '0b11000000101010000000000000000001' >>> f'{ipaddress.IPv6Address("2001:db8::1000"):s}' '2001:db8::1000' >>> format(ipaddress.IPv6Address('2001:db8::1000'), '_X') '2001_0DB8_0000_0000_0000_0000_0000_1000' >>> '{:#_n}'.format(ipaddress.IPv6Address('2001:db8::1000')) '0x2001_0db8_0000_0000_0000_0000_0000_1000'
Added in version 3.9.
- class ipaddress.IPv6Address(address)¶
IPv6 アドレスを構築する。 address が正しい IPv6 アドレスでない場合、
AddressValueErrorを発生させます。以下のものが正しい IPv6 アドレスを構築します:
4桁の16進数からなるグループ8個で構成された文字列。各グループは16bitを表現している。グループはコロンで区切られる。これは exploded (長い) 記法を表す。文字列は compressed (省略) 記法でも良い。詳細は RFC 4291 を参照。例えば、
"0000:0000:0000:0000:0000:0abc:0007:0def"は"::abc:7:def"と省略できる。文字列の末尾に
%scope_idを付けて、スコープゾーン ID を指定することもできます。 指定する場合、スコープ ID は空であってはならず、%を含めることもできません。 詳しくは RFC 4007 を参照してください。 例えばfe80::1234%1は、ノードの最初のリンク上のアドレスfe80::1234を示す場合があります。128bit に収まる整数。
ビッグエンディアンで 16 バイトの長さの
bytesオブジェクトにパックされた整数。
>>> ipaddress.IPv6Address('2001:db8::1000') IPv6Address('2001:db8::1000') >>> ipaddress.IPv6Address('ff02::5678%1') IPv6Address('ff02::5678%1')
- compressed¶
アドレス表現の短い形式で、グループ内の先頭の 0 を省略し、連続する完全に0のグループの一番長いシーケンスを1つの空グループに折りたたんだもの。
これは IPv6 アドレスに対して
str(addr)が返す値と同じです。- exploded¶
アドレス表現の長い形式。全てのグループの先頭の0は省略されず、完全に0のグループも省略されない。
以降の属性とメソッドについては、
IPv4Addressクラスの対応するドキュメントを参照してください:- packed¶
- reverse_pointer¶
- version¶
- max_prefixlen¶
- is_multicast¶
- is_private¶
- is_global¶
Added in version 3.4.
- is_unspecified¶
- is_reserved¶
- is_loopback¶
- is_link_local¶
- is_site_local¶
アドレスがサイトローカルな目的のために予約されいている場合に
True. サイトローカルアドレスは RFC 3879 によって廃止されている事に注意してください。アドレスが RFC 4193 で定義されているユニークローカルアドレスの範囲に含まれているかどうかをテストするには、is_privateを利用してください。
- ipv4_mapped¶
RFC 4291 で定義された
::FFFF:0:0/96の範囲にある IPv4 射影アドレスの場合、このプロパティは埋め込まれた IPv4 アドレスを返します。 それ以外のアドレスではNoneになります。
- scope_id¶
RFC 4007 で定義されたスコープ付きアドレスの場合、このプロパティは、アドレスが属するスコープ内の特定のゾーンを文字列で示します。 スコープゾーンが指定されていなければ
Noneになります。
- IPv6Address.__format__(fmt)¶
IPv4Addressの対応するメソッドのドキュメントを参照してください。Added in version 3.9.
文字列と整数への変換¶
socket モジュールなどのネットワークインターフェースを利用するには、アドレスを文字列や整数に変換しなければなりません。これには組み込みの str() と int() 関数を利用します:
>>> str(ipaddress.IPv4Address('192.168.0.1'))
'192.168.0.1'
>>> int(ipaddress.IPv4Address('192.168.0.1'))
3232235521
>>> str(ipaddress.IPv6Address('::1'))
'::1'
>>> int(ipaddress.IPv6Address('::1'))
1
スコープ付き IPv6 アドレスを整数に変換すると、スコープゾーン ID は含まれません。
演算子¶
Address オブジェクトはいくつかの演算子をサポートします。明記されない限り、演算子は互換性のあるオブジェクト間 (つまり IPv4 同士や IPv6 同士) でのみ利用できます。
比較演算子¶
アドレスオブジェクトは、通常の比較演算子で比較できます。 IPv6 アドレスが同じでも、スコープゾーン ID が異なれば等しくありません。 次に例を示します。
>>> IPv4Address('127.0.0.2') > IPv4Address('127.0.0.1')
True
>>> IPv4Address('127.0.0.2') == IPv4Address('127.0.0.1')
False
>>> IPv4Address('127.0.0.2') != IPv4Address('127.0.0.1')
True
>>> IPv6Address('fe80::1234') == IPv6Address('fe80::1234%1')
False
>>> IPv6Address('fe80::1234%1') != IPv6Address('fe80::1234%2')
True
算術演算¶
アドレスオブジェクトから整数を加減算できます。いくつかの例:
>>> IPv4Address('127.0.0.2') + 3
IPv4Address('127.0.0.5')
>>> IPv4Address('127.0.0.2') - 3
IPv4Address('126.255.255.255')
>>> IPv4Address('255.255.255.255') + 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ipaddress.AddressValueError: 4294967296 (>= 2**32) is not permitted as an IPv4 address
IP ネットワーク定義¶
IPv4Network と IPv6Network オブジェクトは IP ネットワークの定義とインスペクトのための機構を提供します。ネットワーク定義は mask と ネットワークアドレス からなり、 mask でマスク(bitごとの AND) するとネットワークアドレスと同じになる IP アドレスの範囲を定義します。例えば、 255.255.255.0 という mask と 192.168.1.0 というネットワークアドレスからなるネットワーク定義は、 192.168.1.0 から 192.168.1.255 を含む範囲を表します。
プリフィックス, ネットマスク、ホストマスク¶
IP ネットワークマスクを定義する幾つかの等価な方法があります。プリフィックス /<nbits> は先頭の何bitがネットワークマスクで立っているかを示します。ネットマスク は先頭の幾つかのbitが立っている IP アドレスです。プリフィックス /24 はIPv4 ではネットマスク 255.255.255.0 と、IPv6 では ffff:ff00:: と同じになります。加えて、ネットマスク と論理が逆の ホストマスク があり、ときどき (例えば Cisco のアクセスコントロールリスト) ネットワークマスクを表すために利用されます。/24 と等しい IPv4 のホストマスクは 0.0.0.255 になります。
Network オブジェクト¶
address オブジェクトで実装されていた属性は全て network オブジェクトにも実装されています。 network はそれに追加で幾つかの属性を実装しています。
全ての追加属性は IPv4Network と IPv6Network で共通なので、重複を避けるために IPv4Network にだけドキュメントされています。ネットワークオブジェクトは hashable なので、辞書のキーとして使用できます。
- class ipaddress.IPv4Network(address, strict=True)¶
IPv4 ネットワーク定義を構築します。address は以下の1つです:
IPアドレスと、オプションでスラッシュ (
/) で区切られたマスクを持つ文字列。IPアドレスはネットワークアドレスで、マスクは プリフィックス を意味する1つの数値か、 IPv4 アドレスの文字列表現です。マスクがIPv4アドレスのとき、非ゼロのフィールドで始まるときは ネットマスク として、ゼロのフィールドで始まるときは ホストマスク として解釈されます。ただし、すべてのフィールドが0の場合は、ネットマスク として扱われます。マスクが省略された場合、/32が指定されたものとします。例えば、次の address 指定は全て等しくなります:
192.168.1.0/24,192.168.1.0/255.255.255.0192.168.1.0/0.0.0.255.32bit に収まる整数。これは1つのアドレスのネットワークと等しく、ネットワークアドレスが address に、マスクが
/32になります。4byte の
bytesオブジェクトにビッグエンディアンでパックされた整数。これは整数の address と同じように解釈されます。アドレスの指定とネットマスクからなる 2 要素のタプル。 アドレスの指定には、文字列、32 ビット整数、4 バイトにパックした整数、または既存の
IPv4Addressオブジェクトを使用できます。 ネットマスクには、プレフィックス長を表す整数 (例:24) またはプレフィックスのマスクを表す文字列 (例:255.255.255.0) を使用できます。
address が有効な IPv4 アドレスでない場合に
AddressValueError例外を発生させます。マスクが IPv4 アドレスに対して有効でない場合にNetmaskValueError例外を発生させます。strict が
Trueの場合、与えられたアドレスのホストビットが立っていたらValueErrorを発生させます。そうでない場合、ホストビットをマスクして正しいネットワークアドレスを計算します。特に明記されない場合、他の network や address を受け取る network のメソッドは、引数の IP バージョンが
selfと異なる場合にTypeErrorを発生させます。バージョン 3.5 で変更: address コンストラクタ引数に2要素のタプル形式を追加しました
- version¶
- max_prefixlen¶
IPv4Addressの対応する属性のドキュメントを参照してください。
- is_multicast¶
- is_private¶
- is_unspecified¶
- is_reserved¶
- is_loopback¶
- is_link_local¶
ネットワークアドレスとブロードキャストアドレスの両方でこれらの属性が真の場合、ネットワーク全体でも真になります。
- network_address¶
この network のネットワークアドレス。ネットワークアドレスとプリフィックス長によってユニークにネットワークが定義されます。
- broadcast_address¶
このネットワークのブロードキャストアドレス。ブロードキャストアドレスに投げられたパケットはそのネットワーク内の全てのホストに受信されます。
- hostmask¶
IPv4Addressオブジェクトとして表現された ホストマスク。
- netmask¶
IPv4Addressオブジェクトとして表現された ネットマスク。
- with_prefixlen¶
- compressed¶
- exploded¶
マスクをプレフィックス表記で示したネットワークの文字列表現です。
with_prefixlenとcompressedは常にstr(network)と同じです。explodedはネットワークアドレスを省略しない形式で表します。
- with_netmask¶
マスクをネットマスク表記で示したネットワークの文字列表現です。
- with_hostmask¶
マスクをホストマスク表記で示したネットワークの文字列表現です。
- num_addresses¶
ネットワーク内のアドレスの総数
- prefixlen¶
ネットワークプレフィックスのビット長。
- hosts()¶
Returns an iterator over the usable hosts in the network. The usable hosts are all the IP addresses that belong to the network, except the network address itself and the network broadcast address. For networks with a mask length of 31, the network address and network broadcast address are also included in the result. Networks with a mask of 32 will return a list containing the single host address.
>>> list(ip_network('192.0.2.0/29').hosts()) [IPv4Address('192.0.2.1'), IPv4Address('192.0.2.2'), IPv4Address('192.0.2.3'), IPv4Address('192.0.2.4'), IPv4Address('192.0.2.5'), IPv4Address('192.0.2.6')] >>> list(ip_network('192.0.2.0/31').hosts()) [IPv4Address('192.0.2.0'), IPv4Address('192.0.2.1')] >>> list(ip_network('192.0.2.1/32').hosts()) [IPv4Address('192.0.2.1')]
- overlaps(other)¶
このネットワークの一部または全体が other に含まれる場合、または other 全体がこのネットワークに含まれる場合に
Trueです。
- address_exclude(network)¶
このネットワークから指定された network を取り除いてできるネットワーク定義を計算します。 ネットワークオブジェクトのイテレータを返します。 network がこのネットワークに完全に含まれていなければ
ValueErrorを送出します。>>> n1 = ip_network('192.0.2.0/28') >>> n2 = ip_network('192.0.2.1/32') >>> list(n1.address_exclude(n2)) [IPv4Network('192.0.2.8/29'), IPv4Network('192.0.2.4/30'), IPv4Network('192.0.2.2/31'), IPv4Network('192.0.2.0/32')]
- subnets(prefixlen_diff=1, new_prefix=None)¶
引数の値に応じて、組み合わせると現在のネットワーク定義になるサブネットを返します。 prefixlen_diff は現在のプレフィックス長を増やす量です。 new_prefix はサブネットの新しいプレフィックス長で、現在の値より大きくなければなりません。 prefixlen_diff と new_prefix のどちらか一方だけを設定する必要があります。 ネットワークオブジェクトのイテレータを返します。
>>> list(ip_network('192.0.2.0/24').subnets()) [IPv4Network('192.0.2.0/25'), IPv4Network('192.0.2.128/25')] >>> list(ip_network('192.0.2.0/24').subnets(prefixlen_diff=2)) [IPv4Network('192.0.2.0/26'), IPv4Network('192.0.2.64/26'), IPv4Network('192.0.2.128/26'), IPv4Network('192.0.2.192/26')] >>> list(ip_network('192.0.2.0/24').subnets(new_prefix=26)) [IPv4Network('192.0.2.0/26'), IPv4Network('192.0.2.64/26'), IPv4Network('192.0.2.128/26'), IPv4Network('192.0.2.192/26')] >>> list(ip_network('192.0.2.0/24').subnets(new_prefix=23)) Traceback (most recent call last): File "<stdin>", line 1, in <module> raise ValueError('new prefix must be longer') ValueError: new prefix must be longer >>> list(ip_network('192.0.2.0/24').subnets(new_prefix=25)) [IPv4Network('192.0.2.0/25'), IPv4Network('192.0.2.128/25')]
- supernet(prefixlen_diff=1, new_prefix=None)¶
引数の値に応じて、このネットワーク定義を含むスーパーネットを返します。 prefixlen_diff は現在のプレフィックス長を減らす量です。 new_prefix はスーパーネットの新しいプレフィックス長で、現在の値より小さくなければなりません。 prefixlen_diff と new_prefix のどちらか一方だけを設定する必要があります。 単一のネットワークオブジェクトを返します。
>>> ip_network('192.0.2.0/24').supernet() IPv4Network('192.0.2.0/23') >>> ip_network('192.0.2.0/24').supernet(prefixlen_diff=2) IPv4Network('192.0.0.0/22') >>> ip_network('192.0.2.0/24').supernet(new_prefix=20) IPv4Network('192.0.0.0/20')
- subnet_of(other)¶
このネットワークが other のサブネットの場合に
Trueを返します。>>> a = ip_network('192.168.1.0/24') >>> b = ip_network('192.168.1.128/30') >>> b.subnet_of(a) True
Added in version 3.7.
- supernet_of(other)¶
このネットワークが other のスーパーネットの場合に
Trueを返します。>>> a = ip_network('192.168.1.0/24') >>> b = ip_network('192.168.1.128/30') >>> a.supernet_of(b) True
Added in version 3.7.
- compare_networks(other)¶
このネットワークを other と比較します。比較ではネットワークアドレスのみが考慮され、ホストアドレスは考慮されません。
-1、0、1のいずれかを返します。>>> ip_network('192.0.2.1/32').compare_networks(ip_network('192.0.2.2/32')) -1 >>> ip_network('192.0.2.1/32').compare_networks(ip_network('192.0.2.0/32')) 1 >>> ip_network('192.0.2.1/32').compare_networks(ip_network('192.0.2.1/32')) 0
バージョン 3.7 で非推奨: "<"、"=="、">" と同じ順序付けと比較のアルゴリズムを使用します。
- class ipaddress.IPv6Network(address, strict=True)¶
IPv6 ネットワーク定義を構築します。address は以下の1つです:
IP アドレスと、省略可能なプレフィックス長をスラッシュ (
/) で区切った文字列。 IP アドレスはネットワークアドレスで、プレフィックス長は単一の数値である プレフィックス でなければなりません。 プレフィックス長を省略すると/128とみなされます。現在、省略しない形式のネットマスクはサポートされていません。 つまり、
2001:db00::0/24は有効な引数ですが、2001:db00::0/ffff:ff00::は無効です。128bit に収まる整数。これは1つのアドレスのネットワークと等しく、ネットワークアドレスが address に、マスクが
/128になります。16byte の
bytesオブジェクトにビッグエンディアンでパックされた整数。これは整数の address と同じように解釈されます。アドレスの指定とネットマスクからなる 2 要素のタプル。 アドレスの指定には、文字列、128 ビット整数、16 バイトにパックした整数、または既存の
IPv6Addressオブジェクトを使用できます。 ネットマスクはプレフィックス長を表す整数です。
address が有効な IPv6 アドレスでない場合に
AddressValueError例外を発生させます。マスクが IPv6 アドレスに対して有効でない場合にNetmaskValueError例外を発生させます。strict が
Trueの場合、与えられたアドレスのホストビットが立っていたらValueErrorを発生させます。そうでない場合、ホストビットをマスクして正しいネットワークアドレスを計算します。バージョン 3.5 で変更: address コンストラクタ引数に2要素のタプル形式を追加しました
- version¶
- max_prefixlen¶
- is_multicast¶
- is_private¶
- is_unspecified¶
- is_reserved¶
- is_loopback¶
- is_link_local¶
- network_address¶
- broadcast_address¶
- hostmask¶
- netmask¶
- with_prefixlen¶
- compressed¶
- exploded¶
- with_netmask¶
- with_hostmask¶
- num_addresses¶
- prefixlen¶
- hosts()¶
Returns an iterator over the usable hosts in the network. The usable hosts are all the IP addresses that belong to the network, except the Subnet-Router anycast address. For networks with a mask length of 127, the Subnet-Router anycast address is also included in the result. Networks with a mask of 128 will return a list containing the single host address.
- overlaps(other)¶
- address_exclude(network)¶
- subnets(prefixlen_diff=1, new_prefix=None)¶
- supernet(prefixlen_diff=1, new_prefix=None)¶
- subnet_of(other)¶
- supernet_of(other)¶
- compare_networks(other)¶
IPv4Networkの対応する属性のドキュメントを参照してください。
- is_site_local¶
ネットワークアドレスとブロードキャストアドレスの両方でこの属性が真の場合、ネットワーク全体でも真になります。
演算子¶
Network オブジェクトはいくつかの演算子をサポートします。明記されない限り、演算子は互換性のあるオブジェクト間 (つまり IPv4 同士や IPv6 同士) でのみ利用できます。
論理演算子¶
ネットワークオブジェクトは、通常の比較演算子で比較できます。 まずネットワークアドレスで、次にネットマスクで順序付けされます。
イテレーション¶
ネットワークオブジェクトを反復処理すると、そのネットワークに属するアドレスを列挙できます。
反復処理では、使用できないホストも含めて すべての ホストが返されます (使用できるホストだけを取得するには hosts() メソッドを使用してください)。
例えば次のようになります。
>>> for addr in IPv4Network('192.0.2.0/28'):
... addr
...
IPv4Address('192.0.2.0')
IPv4Address('192.0.2.1')
IPv4Address('192.0.2.2')
IPv4Address('192.0.2.3')
IPv4Address('192.0.2.4')
IPv4Address('192.0.2.5')
IPv4Address('192.0.2.6')
IPv4Address('192.0.2.7')
IPv4Address('192.0.2.8')
IPv4Address('192.0.2.9')
IPv4Address('192.0.2.10')
IPv4Address('192.0.2.11')
IPv4Address('192.0.2.12')
IPv4Address('192.0.2.13')
IPv4Address('192.0.2.14')
IPv4Address('192.0.2.15')
アドレスのコンテナとしてのネットワーク¶
ネットワークオブジェクトは、アドレスのコンテナとして振舞えます。いくつか例をあげます:
>>> IPv4Network('192.0.2.0/28')[0]
IPv4Address('192.0.2.0')
>>> IPv4Network('192.0.2.0/28')[15]
IPv4Address('192.0.2.15')
>>> IPv4Address('192.0.2.6') in IPv4Network('192.0.2.0/28')
True
>>> IPv4Address('192.0.3.6') in IPv4Network('192.0.2.0/28')
False
インターフェイスオブジェクト¶
インターフェースオブジェクトは hashable なので、辞書のキーとして使用できます。
- class ipaddress.IPv4Interface(address)¶
IPv4 インターフェースを構築します。 address の意味は
IPv4Networkのコンストラクタと同じですが、任意のホストアドレスを常に受け付ける点が異なります。IPv4InterfaceはIPv4Addressのサブクラスなので、そのすべての属性を継承します。 さらに、次の属性を利用できます。- ip¶
ネットワーク情報を含まないアドレス (
IPv4Address) です。>>> interface = IPv4Interface('192.0.2.5/24') >>> interface.ip IPv4Address('192.0.2.5')
- network¶
このインターフェースが属するネットワーク (
IPv4Network) です。>>> interface = IPv4Interface('192.0.2.5/24') >>> interface.network IPv4Network('192.0.2.0/24')
- with_prefixlen¶
マスクをプレフィックス表記で示したインターフェースの文字列表現です。
>>> interface = IPv4Interface('192.0.2.5/24') >>> interface.with_prefixlen '192.0.2.5/24'
- with_netmask¶
ネットワークをネットマスクで示したインターフェースの文字列表現です。
>>> interface = IPv4Interface('192.0.2.5/24') >>> interface.with_netmask '192.0.2.5/255.255.255.0'
- with_hostmask¶
ネットワークをホストマスクで示したインターフェースの文字列表現です。
>>> interface = IPv4Interface('192.0.2.5/24') >>> interface.with_hostmask '192.0.2.5/0.0.0.255'
- class ipaddress.IPv6Interface(address)¶
IPv6 インターフェースを構築します。 address の意味は
IPv6Networkのコンストラクタと同じですが、任意のホストアドレスを常に受け付ける点が異なります。IPv6InterfaceはIPv6Addressのサブクラスなので、そのすべての属性を継承します。 さらに、次の属性を利用できます。- ip¶
- network¶
- with_prefixlen¶
- with_netmask¶
- with_hostmask¶
IPv4Interfaceの対応する属性のドキュメントを参照してください。
演算子¶
Interface オブジェクトはいくつかの演算子をサポートします。明記されない限り、演算子は互換性のあるオブジェクト間 (つまり IPv4 同士や IPv6 同士) でのみ利用できます。
論理演算子¶
インターフェースオブジェクトは、通常の比較演算子で比較できます。
等価比較 (== と !=) では、IP アドレスとネットワークが両方とも同じ場合にオブジェクトが等しいとみなされます。
インターフェースが、アドレスオブジェクトやネットワークオブジェクトと等しいとみなされることはありません。
順序の比較 (<、> など) では規則が異なります。
同じ IP バージョンのインターフェースオブジェクトとアドレスオブジェクトは比較でき、アドレスオブジェクトが常にインターフェースオブジェクトより前に並びます。
2 つのインターフェースオブジェクトは、まずネットワークで比較され、それが同じであれば IP アドレスで比較されます。
その他のモジュールレベル関数¶
このモジュールは以下のモジュールレベル関数も提供しています:
- ipaddress.v4_int_to_packed(address)¶
アドレスをネットワークバイトオーダー(ビッグエンディアン)でパックされた4バイトで表現します。 address は IPv4 IPアドレスを整数で表したものです。整数が負だったり IPv4 IPアドレスとして大きすぎる場合は
ValueError例外を発生させます。>>> ipaddress.ip_address(3221225985) IPv4Address('192.0.2.1') >>> ipaddress.v4_int_to_packed(3221225985) b'\xc0\x00\x02\x01'
- ipaddress.v6_int_to_packed(address)¶
アドレスをネットワークバイトオーダー(ビッグエンディアン)でパックされた16バイトで表現します。 address は IPv6 IPアドレスを整数で表したものです。整数が負だったり IPv6 IPアドレスとして大きすぎる場合は
ValueError例外を発生させます。
- ipaddress.summarize_address_range(first, last)¶
最初と最後の IP アドレスで指定した範囲を集約したネットワークのイテレータを返します。 first はアドレス帯の中の最初の
IPv4AddressかIPv6Addressで、 last はアドレス帯の中の最後のIPv4AddressかIPv6Addressです。 first か last がIPアドレスでない場合や、2つの型が揃っていない場合に、TypeErrorを発生させます。 last が first より大きくない場合や、 first アドレスのバージョンが 4 でも 6 でもない場合はValueErrorを発生させます。>>> [ipaddr for ipaddr in ipaddress.summarize_address_range( ... ipaddress.IPv4Address('192.0.2.0'), ... ipaddress.IPv4Address('192.0.2.130'))] [IPv4Network('192.0.2.0/25'), IPv4Network('192.0.2.128/31'), IPv4Network('192.0.2.130/32')]
- ipaddress.collapse_addresses(addresses)¶
集約した
IPv4NetworkまたはIPv6Networkオブジェクトのイテレータを返します。 addresses はIPv4NetworkまたはIPv6Networkオブジェクトの イテラブル です。 addresses に異なる IP バージョンのオブジェクトが混在している場合、TypeErrorを送出します。>>> [ipaddr for ipaddr in ... ipaddress.collapse_addresses([ipaddress.IPv4Network('192.0.2.0/25'), ... ipaddress.IPv4Network('192.0.2.128/25')])] [IPv4Network('192.0.2.0/24')]
- ipaddress.get_mixed_type_key(obj)¶
ネットワークとアドレスをソートするための キーを返します。 アドレスとネットワークは本質的に違うものなので、デフォルトでは比較できません。 そのため、次の式は:
IPv4Address('192.0.2.0') <= IPv4Network('192.0.2.0/24')
この比較には意味がありません。 ただし、それでも
ipaddressでこれらをソートしたい場合もあります。 その場合は、sorted()の key 引数にこの関数を指定できます。obj はネットワークオブジェクトかアドレスオブジェクトのどちらかです。
独自の例外¶
クラスのコンストラクタがより具体的なエラー報告をするために、このモジュールでは以下の例外を定義します:
- exception ipaddress.AddressValueError(ValueError)¶
アドレスに関連する値のエラーです。
- exception ipaddress.NetmaskValueError(ValueError)¶
ネットマスクに関連する値のエラーです。