"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 アドレスを構築します:

   1. 0 以上 255 以下の 4 つの 10 進整数をドットで区切った、ドット付き
      10 進表記の文字列 (例: "192.168.0.1")。 各整数はアドレスの 1 オ
      クテット (1 バイト) を表します。 8 進表記との混同を避けるため、
      先頭のゼロは許可されません。

   2. 32bit に収まる整数。

   3. 大きさ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 アドレ
      ス両方を扱う、表示用コードが書きやすくなります。

   packed

      このアドレスのバイナリ表現 - 適切な長さをもった "bytes" オブジェ
      クト(最上位オクテットが先頭)。 IPv4 では 4 byte で、 IPv6 では
      16 byte。

   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_multicast

      アドレスがマルチキャスト用に予約されている場合は "True" 。 **RFC
      3171** (IPv4) か **RFC 2373** (IPv6) を参照。

   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_unspecified

      アドレスが未定義の時に "True". **RFC 5735** (IPv4) か **RFC
      2373** (IPv6) を参照。

   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** を参照)。

   is_loopback

      ループバックアドレスである場合に "True". **RFC 3330** (IPv4) か
      **RFC 2373** (IPv6) を参照。

   is_link_local

      アドレスがリンクローカル用に予約されいている場合に "True". **RFC
      3927** を参照。

   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 アドレスを構築します:

   1. 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" を示す場合があります。

   2. 128bit に収まる整数。

   3. ビッグエンディアンで 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" になります。

   sixtofour

      **RFC 3056** で定義された 6to4 ("2002::/16" で始まる)アドレスの
      場合、このプロパティは埋め込まれた IPv4 Address を返します。それ
      以外のアドレスに対しては、このプロパティは "None" になります。

   teredo

      **RFC 4380** で定義された Teredo ("2001::/32" で始まる)アドレス
      の場合、このプロパティは埋め込まれた "(server, client)" IP アド
      レスペアを返します。それ以外のアドレスに対しては、このプロパティ
      は "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つです:

   1. IPアドレスと、オプションでスラッシュ ("/") で区切られたマスクを
      持つ文字列。IPアドレスはネットワークアドレスで、マスクは *プリフ
      ィックス* を意味する1つの数値か、 IPv4 アドレスの文字列表現です
      。マスクがIPv4アドレスのとき、非ゼロのフィールドで始まるときは *
      ネットマスク* として、ゼロのフィールドで始まるときは *ホストマス
      ク* として解釈されます。ただし、すべてのフィールドが0の場合は、*
      ネットマスク* として扱われます。マスクが省略された場合、 "/32"
      が指定されたものとします。

      例えば、次の *address* 指定は全て等しくなります:
      "192.168.1.0/24", "192.168.1.0/255.255.255.0"
      "192.168.1.0/0.0.0.255".

   2. 32bit に収まる整数。これは1つのアドレスのネットワークと等しく、
      ネットワークアドレスが *address* に、マスクが "/32" になります。

   3. 4byte の "bytes" オブジェクトにビッグエンディアンでパックされた
      整数。これは整数の *address* と同じように解釈されます。

   4. アドレスの指定とネットマスクからなる 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つです:

   1. IP アドレスと、省略可能なプレフィックス長をスラッシュ ("/") で区
      切った文字列。 IP アドレスはネットワークアドレスで、プレフィック
      ス長は単一の数値である *プレフィックス* でなければなりません。
      プレフィックス長を省略すると "/128" とみなされます。

      現在、省略しない形式のネットマスクはサポートされていません。 つ
      まり、"2001:db00::0/24" は有効な引数ですが、
      "2001:db00::0/ffff:ff00::" は無効です。

   2. 128bit に収まる整数。これは1つのアドレスのネットワークと等しく、
      ネットワークアドレスが *address* に、マスクが "/128" になります
      。

   3. 16byte の "bytes" オブジェクトにビッグエンディアンでパックされた
      整数。これは整数の *address* と同じように解釈されます。

   4. アドレスの指定とネットマスクからなる 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)

   ネットマスクに関連する値のエラーです。
