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 に応じて、 IPv4AddressIPv6Address のオブジェクトを返します。 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 に応じて、 IPv4NetworkIPv6Network のオブジェクトを返します。 address は IP ネットワークを示す文字列あるいは整数です。 IPv4 か IPv6 のネットワークを受け取ります; 2**32 より小さい整数はデフォルトでは IPv4 アドレスだと判断されます。 strictIPv4NetworkIPv6Network のコンストラクタに渡されます。 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 に応じて、 IPv4InterfaceIPv6Interface のオブジェクトを返します。 address は IP ネットワークを示す文字列あるいは整数です。 IPv4 か IPv6 のネットワークを受け取ります; 2**32 より小さい整数はデフォルトでは IPv4 アドレスだと判断されます。 address が正しい IPv4, IPv6 アドレスを表現していない場合は ValueError を発生させます。

これらの便利関数を利用するデメリットとして、IPv4 と IPv6 両方のフォーマットを扱う必要性があるために、どちらを期待されていたのかを知ることができず、エラーメッセージが最小限の情報しか提供できないことです。利用したいバージョンの特定のコンストラクタを直接呼ぶことで、より詳細なエラーレポートを得ることができます。

IP アドレス

Address オブジェクト

IPv4AddressIPv6Address オブジェクトは多くの共通した属性を持っています。両方の IP バージョンを扱うコードを書きやすくするために、IPv6 アドレスでしか意味が無いいくつかの属性も IPv4Address オブジェクトに実装されています。アドレスオブジェクトは hashable なので、辞書のキーとして利用できます。

class ipaddress.IPv4Address(address)

IPv4 アドレスを構築する。 address が正しい IPv4 アドレスでない場合、 AddressValueError を発生させます。

以下のものが正しい IPv4 アドレスを構築します:

  1. Рядок у десятковій точковій нотації, що складається з чотирьох цілих десяткових чисел у діапазоні від 0 до 255, розділених крапками (наприклад, 192.168.0.1). Кожне ціле число представляє октет (байт) в адресі. Початкові нулі не допускаються, щоб уникнути плутанини з вісімковою системою запису.

  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 で変更: Початкові нулі допускаються, навіть у неоднозначних випадках, які виглядають як вісімкове позначення.

バージョン 3.9.5 で変更: Початкові нулі більше не допускаються та розглядаються як помилка. Рядки адреси IPv4 тепер аналізуються так само строго, як glibc inet_pton().

version

適切なバージョン番号: IPv4 なら 4, IPv6 なら 6.

max_prefixlen

このバージョンのアドレスを表現するのに必要なビット数: IPv4 なら 32, IPv6 なら 128.

prefix は、アドレスがネットワークに含まれるかどうかを決定するために比較する、アドレスの先頭ビット数を定義します。

compressed
exploded

ドットと10進数を使った表現の文字列。この表現には先頭の 0 は含まれません。

IPv4 はアドレスの 0 オクテットを省略する記法を定義していないので、IPv4 アドレスにおいてこれらの2つの属性は常に str(addr) と等しくなります。これらの属性を用意することで、IPv4 と IPv6 アドレス両方を扱う、表示用コードが書きやすくなります。

packed

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

reverse_pointer

Ім’я зворотного запису PTR DNS для IP-адреси, наприклад:

>>> 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

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

is_private

True, если адрес определен как недоступный глобально с помощью iana-ipv4-special-registry (для IPv4) или iana-ipv6-special-registry (для IPv6) со следующими исключениями:

  • is_private имеет значение False для общего адресного пространства (100.64.0.0/10)

  • Для IPv6-адресов, сопоставленных с IPv4, значение 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.0/24 считается частным, за исключением 192.0.0.9/32 и 192.0.0.10/32 (ранее: только 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

True, если адрес определен как глобально доступный с помощью iana-ipv4-special-registry (для IPv4) или iana-ipv6-special-registry (для IPv6) со следующим исключением:

Для IPv6-адресов, сопоставленных с IPv4, значение 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

True if the address is noted as reserved by the IETF. For IPv4, this is only 240.0.0.0/4, the Reserved address block. For IPv6, this is all addresses allocated as Reserved by IETF for future use.

注釈

For IPv4, is_reserved is not related to the address block value of the Reserved-by-Protocol column in iana-ipv4-special-registry.

注意

For IPv6, fec0::/10 a former Site-Local scoped address prefix is currently excluded from that list (see is_site_local & RFC 3879).

is_loopback

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

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

ipv6_mapped

IPv4Address object representing the IPv4-mapped IPv6 address. See RFC 4291.

Added in version 3.13.

IPv4Address.__format__(fmt)

Повертає рядкове представлення IP-адреси, кероване рядком явного формату. fmt може бути одним із таких: 's', параметр за замовчуванням, еквівалентний str(), 'b' для двійкового рядка з доповненням нуля, 'X ' або 'x' для шістнадцяткового представлення у верхньому чи нижньому регістрі, або 'n', що еквівалентно 'b' для адрес IPv4 і 'x' для IPv6. Для двійкових і шістнадцяткових представлень доступні специфікатор форми '#' і опція групування '_'. __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. Якщо присутній, ідентифікатор області має бути непорожнім і не може містити "%". Докладніше див. 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_site_local

アドレスがサイトローカルな目的のために予約されいている場合に True. サイトローカルアドレスは RFC 3879 によって廃止されている事に注意してください。アドレスが RFC 4193 で定義されているユニークローカルアドレスの範囲に含まれているかどうかをテストするには、 is_private を利用してください。

ipv4_mapped

IPv4 にマップされた(::FFFF/96 で始まる)アドレスの場合、このプロパティは埋め込まれた IPv4 Address を返します。それ以外のアドレスに対しては、このプロパティは 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-адреси перетворюються на цілі числа без ідентифікатора зони.

演算子

Address オブジェクトはいくつかの演算子をサポートします。明記されない限り、演算子は互換性のあるオブジェクト間 (つまり IPv4 同士や IPv6 同士) でのみ利用できます。

比較演算子

Об'єкти адреси можна порівнювати за допомогою звичайного набору операторів порівняння. Однакові IPv6-адреси з різними ідентифікаторами зон дії не однакові. Деякі приклади:

>>> 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 ネットワーク定義

IPv4NetworkIPv6Network オブジェクトは IP ネットワークの定義とインスペクトのための機構を提供します。ネットワーク定義は maskネットワークアドレス からなり、 mask でマスク(bitごとの AND) するとネットワークアドレスと同じになる IP アドレスの範囲を定義します。例えば、 255.255.255.0 という mask192.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 はそれに追加で幾つかの属性を実装しています。 全ての追加属性は IPv4NetworkIPv6Network で共通なので、重複を避けるために 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. A two-tuple of an address description and a netmask, where the address description is either a string, a 32-bits integer, a 4-bytes packed integer, or an existing IPv4Address object; and the netmask is either an integer representing the prefix length (e.g. 24) or a string representing the prefix mask (e.g. 255.255.255.0).

address が有効な IPv4 アドレスでない場合に AddressValueError 例外を発生させます。マスクが IPv4 アドレスに対して有効でない場合に NetmaskValueError 例外を発生させます。

strictTrue の場合、与えられたアドレスのホストビットが立っていたら 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

Ці атрибути дійсні для мережі в цілому, якщо вони справедливі як для адреси мережі, так і для широкомовної адреси.

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()

Повертає ітератор для придатних для використання хостів у мережі. Використовувані хости — це всі IP-адреси, які належать до мережі, за винятком самої мережевої адреси та широкомовної адреси мережі. Для мереж із довжиною маски 31 мережева адреса та широкомовна адреса мережі також включені в результат. Мережі з маскою 32 повертатимуть список, що містить одну адресу хоста.

>>> 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 повністю міститься в цій мережі.

address_exclude(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 と比較します。比較ではネットワークアドレスのみが考慮され、ホストアドレスは考慮されません。-101 のいずれかを返します。

>>> 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 で非推奨: Він використовує той самий алгоритм упорядкування та порівняння, що й " <", "==", and "> "

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. A two-tuple of an address description and a netmask, where the address description is either a string, a 128-bits integer, a 16-bytes packed integer, or an existing IPv6Address object; and the netmask is an integer representing the prefix length.

address が有効な IPv6 アドレスでない場合に AddressValueError 例外を発生させます。マスクが IPv6 アドレスに対して有効でない場合に NetmaskValueError 例外を発生させます。

strictTrue の場合、与えられたアドレスのホストビットが立っていたら ValueError を発生させます。そうでない場合、ホストビットをマスクして正しいネットワークアドレスを計算します。

バージョン 3.5 で変更: address コンストラクタ引数に2要素のタプル形式を追加しました

version
max_prefixlen
is_multicast
is_private
is_unspecified
is_reserved
is_loopback
network_address
broadcast_address
hostmask
netmask
with_prefixlen
compressed
exploded
with_netmask
with_hostmask
num_addresses
prefixlen
hosts()

Повертає ітератор для придатних для використання хостів у мережі. Використовувані хости — це всі IP-адреси, які належать до мережі, за винятком будь-адреси маршрутизатора підмережі. Для мереж із довжиною маски 127 у результат також включено будь-яку адресу підмережного маршрутизатора. Мережі з маскою 128 повертатимуть список, що містить одну адресу хоста.

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

These attribute is true for the network as a whole if it is true for both the network address and the broadcast address.

演算子

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. Значення адреси таке ж, як і в конструкторі 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 можна порівнювати, і об’єкти адреси завжди будуть сортуватися перед об’єктами інтерфейсу. Два об’єкти інтерфейсу спочатку порівнюються за їхніми мережами, а якщо вони однакові, то за їхніми 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)

first と last で指定された IPアドレス帯に対するイテレーターを返します。 first はアドレス帯の中の最初の IPv4AddressIPv6Address で、 last はアドレス帯の中の最後の IPv4AddressIPv6Address です。 firstlast がIPアドレスでない場合や、2つの型が揃っていない場合に、 TypeError を発生させます。 lastfirst より大きくない場合や、 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)

Return an iterator of the collapsed IPv4Network or IPv6Network objects. addresses is an iterable of IPv4Network or IPv6Network objects. A TypeError is raised if addresses contains mixed version objects.

>>> [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)

ネットワークとアドレスをソートするための key 関数を返します。アドレスとネットワークは本質的に違うものなので、デフォルトでは比較できません。そのため、次の式は:

IPv4Address('192.0.2.0') <= IPv4Network('192.0.2.0/24')

doesn't make sense. There are some times however, where you may wish to have ipaddress sort these anyway. If you need to do this, you can use this function as the key argument to sorted().

obj はネットワークオブジェクトかアドレスオブジェクトのどちらかです。

Спеціальні винятки

クラスのコンストラクタがより具体的なエラー報告をするために、このモジュールでは以下の例外を定義します:

exception ipaddress.AddressValueError(ValueError)

Будь-яка помилка значення, пов’язана з адресою.

exception ipaddress.NetmaskValueError(ValueError)

Будь-яка помилка значення, пов’язана з маскою мережі.