ipaddress — IPv4 / IPv6操作ライブラリ
ソースコード: :source: `Lib / ipaddress.py`
ipaddress は、IPv4およびIPv6アドレスとネットワークを作成、操作、および操作する機能を提供します。
このモジュールの関数とクラスを使用すると、2つのホストが同じサブネット上にあるかどうかの確認、特定のサブネット内のすべてのホストの反復、文字列が有効かどうかの確認など、IPアドレスに関連するさまざまなタスクを簡単に処理できます。 IPアドレスやネットワーク定義など。
これは完全なモジュールAPIリファレンスです。概要と概要については、 ipaddressモジュールの概要を参照してください。
バージョン3.3の新機能。
コンビニエンスファクトリ機能
ipaddress モジュールは、IPアドレス、ネットワーク、およびインターフェイスを便利に作成するためのファクトリ関数を提供します。
- ipaddress.ip_address(address)
引数として渡されたIPアドレスに応じて、 IPv4Address または IPv6Address オブジェクトを返します。 IPv4またはIPv6アドレスのいずれかを指定できます。 2 ** 32未満の整数は、デフォルトでIPv4と見なされます。 ValueError は、 address が有効なIPv4またはIPv6アドレスを表していない場合に発生します。
- ipaddress.ip_network(address, strict=True)
引数として渡されたIPアドレスに応じて、 IPv4Network または IPv6Network オブジェクトを返します。 address は、IPネットワークを表す文字列または整数です。 IPv4またはIPv6ネットワークのいずれかを提供できます。 2 ** 32未満の整数は、デフォルトでIPv4と見なされます。 strict は IPv4Network または IPv6Network コンストラクターに渡されます。 ValueError は、 address が有効なIPv4またはIPv6アドレスを表していない場合、またはネットワークにホストビットが設定されている場合に発生します。
- ipaddress.ip_interface(address)
- 引数として渡されたIPアドレスに応じて、 IPv4Interface または IPv6Interface オブジェクトを返します。 address は、IPアドレスを表す文字列または整数です。 IPv4またはIPv6アドレスのいずれかを指定できます。 2 ** 32未満の整数は、デフォルトでIPv4と見なされます。 ValueError は、 address が有効なIPv4またはIPv6アドレスを表していない場合に発生します。
これらの便利な関数の欠点の1つは、IPv4形式とIPv6形式の両方を処理する必要があるということは、IPv4形式とIPv6形式のどちらが意図されているかを関数が認識しないため、エラーメッセージが正確なエラーに関する最小限の情報を提供することを意味します。 適切なバージョン固有のクラスコンストラクターを直接呼び出すことで、より詳細なエラーレポートを取得できます。
IPアドレス
アドレスオブジェクト
IPv4Address オブジェクトと IPv6Address オブジェクトは、多くの共通の属性を共有しています。 両方のIPバージョンを正しく処理するコードを簡単に記述できるようにするために、IPv6アドレスにのみ意味のある一部の属性は IPv4Address オブジェクトによっても実装されます。 アドレスオブジェクトはハッシュ可能であるため、辞書のキーとして使用できます。
- class ipaddress.IPv4Address(address)
IPv4アドレスを作成します。 アドレスが有効なIPv4アドレスでない場合、 AddressValueError が発生します。
以下は、有効なIPv4アドレスを構成します。
ドットで区切られた、0〜255の範囲の4つの10進整数で構成される10進ドット表記の文字列(例:
192.168.0.1
)。 各整数は、アドレスのオクテット(バイト)を表します。 8進表記との混同を防ぐために、先行ゼロは許容されません。32ビットに収まる整数。
長さ4の bytes オブジェクトにパックされた整数(最上位オクテットが最初)。
バージョン3.8で変更: 8進表記のように見えるあいまいな場合でも、先行ゼロは許容されます。
バージョン3.8.12で変更:先行ゼロは許容されなくなり、エラーとして扱われます。 IPv4アドレス文字列は、glibc inet_pton()と同じくらい厳密に解析されるようになりました。
- version
適切なバージョン番号:IPv4の場合は
4
、IPv6の場合は6
。
- max_prefixlen
このバージョンのアドレス表現の合計ビット数:IPv4の場合は
32
、IPv6の場合は128
。プレフィックスは、アドレスがネットワークの一部であるかどうかを判断するために比較される、アドレスの先頭ビット数を定義します。
- compressed
- exploded
ドット付き10進表記の文字列表現。 先行ゼロが表現に含まれることはありません。
IPv4は、オクテットがゼロに設定されたアドレスの省略表記を定義しないため、これら2つの属性は、IPv4アドレスの
str(addr)
と常に同じです。 これらの属性を公開すると、IPv4アドレスとIPv6アドレスの両方を処理できる表示コードを簡単に記述できます。
- packed
このアドレスのバイナリ表現-適切な長さの bytes オブジェクト(最上位オクテットが最初)。 これは、IPv4の場合は4バイト、IPv6の場合は16バイトです。
- reverse_pointer
IPアドレスの逆引きDNSPTRレコードの名前。例:
これは、解決されたホスト名自体ではなく、PTRルックアップの実行に使用できる名前です。
バージョン3.5の新機能。
- is_private
True
アドレスがプライベートネットワークに割り当てられている場合。 iana-ipv4-special-registry (IPv4の場合)または iana-ipv6-special-registry (IPv6の場合)を参照してください。
- is_global
True
アドレスがパブリックネットワークに割り当てられている場合。 iana-ipv4-special-registry (IPv4の場合)または iana-ipv6-special-registry (IPv6の場合)を参照してください。バージョン3.4の新機能。
- is_reserved
True
アドレスがIETFで予約されている場合。
- is_link_local
True
アドレスがリンクローカルでの使用のために予約されている場合。 RFC 3927 を参照してください。
- class ipaddress.IPv6Address(address)
IPv6アドレスを作成します。 address が有効なIPv6アドレスでない場合、 AddressValueError が発生します。
以下は、有効なIPv6アドレスを構成します。
4つの16進数の8つのグループで構成される文字列。各グループは16ビットを表します。 グループはコロンで区切られます。 これは、 exploded (ロングハンド)表記について説明しています。 文字列は、さまざまな方法で圧縮(省略表記)することもできます。 詳細については、 RFC 4291 を参照してください。 たとえば、
"0000:0000:0000:0000:0000:0abc:0007:0def"
は"::abc:7:def"
に圧縮できます。128ビットに収まる整数。
長さ16、ビッグエンディアンの bytes オブジェクトにパックされた整数。
- compressed
グループ内の先行ゼロが省略され、完全にゼロで構成されるグループの最長シーケンスが単一の空のグループに折りたたまれた、アドレス表現の短い形式。
これは、IPv6アドレスに対して
str(addr)
によって返される値でもあります。- exploded
長い形式のアドレス表現。すべての先行ゼロと、完全にゼロで構成されるグループが含まれます。
次の属性については、 IPv4Address クラスの対応するドキュメントを参照してください。
- packed
- reverse_pointer
- version
- max_prefixlen
- is_multicast
- is_private
- is_global
- is_unspecified
- is_reserved
- is_loopback
- is_link_local
バージョン3.4の新機能: is_global
- is_site_local
True
アドレスがサイトローカルで使用するために予約されている場合。 サイトローカルアドレススペースは、 RFC 3879 によって非推奨になっていることに注意してください。 is_private を使用して、このアドレスが RFC 4193 で定義されている一意のローカルアドレスのスペースにあるかどうかをテストします。
- ipv4_mapped
IPv4マップアドレス(
::FFFF/96
で始まる)のように見えるアドレスの場合、このプロパティは埋め込まれたIPv4アドレスを報告します。 その他のアドレスの場合、このプロパティはNone
になります。
- sixtofour
RFC 3056 で定義されている6to4アドレス(
2002::/16
で始まる)のように見えるアドレスの場合、このプロパティは埋め込みIPv4アドレスを報告します。 その他のアドレスの場合、このプロパティはNone
になります。
- teredo
RFC 4380 で定義されているTeredoアドレス(
2001::/32
で始まる)のように見えるアドレスの場合、このプロパティは埋め込まれた(server, client)
IPアドレスを報告しますペア。 その他のアドレスの場合、このプロパティはNone
になります。
文字列と整数への変換
ソケットモジュールなどのネットワークインターフェイスと相互運用するには、アドレスを文字列または整数に変換する必要があります。 これは、 str()および int()組み込み関数を使用して処理されます。
演算子
アドレスオブジェクトは一部の演算子をサポートしています。 特に明記されていない限り、演算子は互換性のあるオブジェクト間でのみ適用できます(つまり、 IPv4とIPv4、IPv6とIPv6)。
比較演算子
アドレスオブジェクトは、通常の比較演算子のセットと比較できます。 いくつかの例:
算術演算子
整数は、住所オブジェクトに加算またはアドレスオブジェクトから減算できます。 いくつかの例:
IPネットワークの定義
IPv4Network および IPv6Network オブジェクトは、IPネットワーク定義を定義および検査するためのメカニズムを提供します。 ネットワーク定義は、マスクとネットワークアドレスで構成され、マスクでマスク(バイナリAND)されたときにネットワークアドレスと等しいIPアドレスの範囲を定義します。 たとえば、マスク255.255.255.0
とネットワークアドレス192.168.1.0
のネットワーク定義は、192.168.1.0
から192.168.1.255
までの範囲のIPアドレスで構成されます。
プレフィックス、ネットマスク、ホストマスク
IPネットワークマスクを指定するには、同等の方法がいくつかあります。 プレフィックス /<nbits>
は、ネットワークマスクに設定されている上位ビットの数を示す表記です。 ネットマスクは、いくつかの上位ビットが設定されたIPアドレスです。 したがって、プレフィックス/24
は、IPv4のネットマスク255.255.255.0
、またはIPv6のffff:ff00::
と同等です。 さらに、ホストマスクはネットマスクの論理的な逆であり、ネットワークマスクを示すために(たとえば、Ciscoアクセスコントロールリストで)使用されることがあります。 IPv4の/24
に相当するホストマスクは0.0.0.255
です。
ネットワークオブジェクト
アドレスオブジェクトによって実装されるすべての属性は、ネットワークオブジェクトによっても実装されます。 さらに、ネットワークオブジェクトは追加の属性を実装します。 これらはすべて IPv4Network と IPv6Network の間で共通であるため、重複を避けるために、 IPv4Network についてのみ文書化されています。 ネットワークオブジェクトはハッシュ可能であるため、辞書のキーとして使用できます。
- class ipaddress.IPv4Network(address, strict=True)
IPv4ネットワーク定義を構築します。 アドレスは次のいずれかになります。
スラッシュ(
/
)で区切られたIPアドレスとオプションのマスクで構成される文字列。 IPアドレスはネットワークアドレスであり、マスクはプレフィックスであることを意味する単一の数値、またはIPv4アドレスの文字列表現のいずれかです。 後者の場合、マスクは、ゼロ以外のフィールドで始まる場合はネットマスクとして解釈され、ゼロフィールドで始まる場合はホストマスクとして解釈されます。 ネットマスクとして扱われるオールゼロマスクの単一の例外。 マスクが提供されていない場合は、/32
と見なされます。たとえば、次のアドレス仕様は同等です:
192.168.1.0/24
、192.168.1.0/255.255.255.0
、および192.168.1.0/0.0.0.255
。32ビットに収まる整数。 これは、ネットワークアドレスがアドレスで、マスクが
/32
である、単一アドレスネットワークと同等です。長さ4の bytes オブジェクトにパックされた整数。ビッグエンディアン。 解釈は整数アドレスに似ています。
アドレス記述とネットマスクの2つのタプル。アドレス記述は、文字列、32ビット整数、4バイトのパック整数、または既存のIPv4Addressオブジェクトのいずれかです。 ネットマスクは、プレフィックスの長さを表す整数です(例:
24
)またはプレフィックスマスクを表す文字列(例:255.255.255.0
)。
アドレスが有効なIPv4アドレスでない場合、 AddressValueError が発生します。 マスクがIPv4アドレスに対して有効でない場合、 NetmaskValueError が発生します。
strict が
True
で、指定されたアドレスにホストビットが設定されている場合、 ValueError が発生します。 それ以外の場合は、ホストビットがマスクされて適切なネットワークアドレスが決定されます。特に明記されていない限り、引数の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
ネットワークのネットワークアドレス。 ネットワークアドレスとプレフィックス長は一緒になって、ネットワークを一意に定義します。
- 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のネットワークは、単一のホストアドレスを含むリストを返します。
- overlaps(other)
True
このネットワークの一部または全部が other に含まれている場合または other が完全にこのネットワークに含まれている場合。
- address_exclude(network)
指定されたネットワークをこのネットワークから削除した結果のネットワーク定義を計算します。 ネットワークオブジェクトのイテレータを返します。 network がこのネットワークに完全に含まれていない場合、 ValueError を発生させます。
- subnets(prefixlen_diff=1, new_prefix=None)
引数の値に応じて、現在のネットワーク定義を作成するために参加するサブネット。 prefixlen_diff は、プレフィックス長を増やす必要がある量です。 new_prefix は、サブネットの目的の新しいプレフィックスです。 プレフィックスよりも大きくする必要があります。 prefixlen_diff と new_prefix の1つだけを設定する必要があります。 ネットワークオブジェクトのイテレータを返します。
- supernet(prefixlen_diff=1, new_prefix=None)
引数の値に応じて、このネットワーク定義を含むスーパーネット。 prefixlen_diff は、プレフィックス長を減らす必要がある量です。 new_prefix は、スーパーネットの目的の新しいプレフィックスです。 プレフィックスよりも小さくする必要があります。 prefixlen_diff と new_prefix の1つだけを設定する必要があります。 単一のネットワークオブジェクトを返します。
- subnet_of(other)
このネットワークが other のサブネットである場合は、
True
を返します。バージョン3.7の新機能。
- supernet_of(other)
このネットワークが other のスーパーネットである場合は、
True
を返します。バージョン3.7の新機能。
- compare_networks(other)
このネットワークをその他と比較してください。 この比較では、ネットワークアドレスのみが考慮されます。 ホストビットはそうではありません。
-1
、0
、または1
のいずれかを返します。バージョン3.7以降非推奨: これは、「」と同じ順序付けおよび比較アルゴリズムを使用します。
- class ipaddress.IPv6Network(address, strict=True)
IPv6ネットワーク定義を構築します。 アドレスは次のいずれかになります。
スラッシュ(
/
)で区切られたIPアドレスとオプションのプレフィックス長で構成される文字列。 IPアドレスはネットワークアドレスであり、プレフィックスの長さは単一の番号 prefix である必要があります。 プレフィックス長が指定されていない場合は、/128
と見なされます。現在拡張されているネットマスクはサポートされていないことに注意してください。 つまり、
2001:db00::0/24
は有効な引数ですが、2001:db00::0/ffff:ff00::
は有効な引数ではありません。128ビットに収まる整数。 これは、ネットワークアドレスがアドレスで、マスクが
/128
である、単一アドレスネットワークと同等です。長さ16、ビッグエンディアンの bytes オブジェクトにパックされた整数。 解釈は整数アドレスに似ています。
アドレス記述とネットマスクの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()
ネットワーク内の使用可能なホスト上のイテレータを返します。 使用可能なホストは、サブネットルーターのエニーキャストアドレスを除く、ネットワークに属するすべての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
これらの属性は、ネットワークアドレスとブロードキャストアドレスの両方に当てはまる場合、ネットワーク全体に当てはまります。
演算子
ネットワークオブジェクトは一部の演算子をサポートしています。 特に明記されていない限り、演算子は互換性のあるオブジェクト間でのみ適用できます(つまり、 IPv4とIPv4、IPv6とIPv6)。
論理演算子
ネットワークオブジェクトは、通常の論理演算子のセットと比較できます。 ネットワークオブジェクトは、最初にネットワークアドレス、次にネットマスクの順に並べられます。
反復
ネットワークオブジェクトを繰り返して、ネットワークに属するすべてのアドレスを一覧表示できます。 反復の場合、使用できないホストを含むすべてのホストが返されます(使用可能なホストの場合は、 hosts()メソッドを使用します)。 例:
アドレスのコンテナとしてのネットワーク
ネットワークオブジェクトは、アドレスのコンテナとして機能できます。 いくつかの例:
インターフェイスオブジェクト
インターフェイスオブジェクトはハッシュ可能であるため、辞書のキーとして使用できます。
- class ipaddress.IPv4Interface(address)
IPv4インターフェースを構築します。 アドレスの意味は、 IPv4Network のコンストラクターと同じですが、任意のホストアドレスが常に受け入れられる点が異なります。
IPv4Interface は IPv4Address のサブクラスであるため、そのクラスからすべての属性を継承します。 さらに、次の属性を使用できます。
- ip
ネットワーク情報のないアドレス( IPv4Address )。
- network
このインターフェースが属するネットワーク( IPv4Network )。
- with_prefixlen
プレフィックス表記のマスクを使用したインターフェイスの文字列表現。
- with_netmask
ネットマスクとしてのネットワークとのインターフェースの文字列表現。
- with_hostmask
ホストマスクとしてのネットワークとのインターフェースの文字列表現。
- class ipaddress.IPv6Interface(address)
IPv6インターフェースを構築します。 アドレスの意味は、 IPv6Network のコンストラクターと同じですが、任意のホストアドレスが常に受け入れられる点が異なります。
IPv6Interface は IPv6Address のサブクラスであるため、そのクラスからすべての属性を継承します。 さらに、次の属性を使用できます。
- ip
- network
- with_prefixlen
- with_netmask
- with_hostmask
IPv4Interface の対応する属性のドキュメントを参照してください。
演算子
インターフェイスオブジェクトは一部の演算子をサポートしています。 特に明記されていない限り、演算子は互換性のあるオブジェクト間でのみ適用できます(つまり、 IPv4とIPv4、IPv6とIPv6)。
論理演算子
インターフェイスオブジェクトは、通常の論理演算子のセットと比較できます。
同等性の比較(==
と!=
)の場合、オブジェクトが等しくなるには、IPアドレスとネットワークの両方が同じである必要があります。 インターフェイスは、どのアドレスまたはネットワークオブジェクトとも同等とは比較されません。
注文(<
、>
など)の場合、ルールは異なります。 同じIPバージョンのインターフェイスオブジェクトとアドレスオブジェクトを比較でき、アドレスオブジェクトは常にインターフェイスオブジェクトの前に並べ替えられます。 2つのインターフェイスオブジェクトは、最初にネットワークによって比較され、同じ場合はIPアドレスによって比較されます。
その他のモジュールレベルの機能
このモジュールは、次のモジュールレベルの機能も提供します。
- ipaddress.v4_int_to_packed(address)
アドレスをネットワーク(ビッグエンディアン)の順序で4パックバイトとして表します。 address は、IPv4IPアドレスの整数表現です。 ValueError は、整数が負の場合、または大きすぎてIPv4IPアドレスにならない場合に発生します。
- ipaddress.v6_int_to_packed(address)
- ネットワーク(ビッグエンディアン)の順序で16パックバイトとしてアドレスを表します。 address は、IPv6IPアドレスの整数表現です。 ValueError は、整数が負であるか、IPv6IPアドレスには大きすぎる場合に発生します。
- ipaddress.summarize_address_range(first, last)
最初と最後のIPアドレスを指定して、要約されたネットワーク範囲のイテレータを返します。 first は、範囲内の最初の IPv4Address または IPv6Address であり、 last は最後の IPv4Address またはです。範囲内のIPv6Address 。 TypeError は、 first または last がIPアドレスでないか、同じバージョンでない場合に発生します。 ValueError は、 last が first 以下の場合、または first アドレスバージョンが4または6でない場合に発生します。
- ipaddress.collapse_addresses(addresses)
折りたたまれた IPv4Network または IPv6Network オブジェクトのイテレータを返します。 アドレスは、 IPv4Network または IPv6Network オブジェクトのイテレーターです。 アドレスに混合バージョンのオブジェクトが含まれている場合、 TypeError が発生します。
- ipaddress.get_mixed_type_key(obj)
ネットワークとアドレスの並べ替えに適したキーを返します。 アドレスオブジェクトとネットワークオブジェクトは、デフォルトでは並べ替えることができません。 それらは根本的に異なるため、次の式を使用します。
意味がありません。 ただし、とにかく ipaddress でこれらを並べ替えたい場合があります。 これを行う必要がある場合は、この関数を sorted()の key 引数として使用できます。
obj は、ネットワークオブジェクトまたはアドレスオブジェクトのいずれかです。
カスタム例外
クラスコンストラクターからのより具体的なエラー報告をサポートするために、モジュールは次の例外を定義します。
- exception ipaddress.AddressValueError(ValueError)
- アドレスに関連する値エラー。
- exception ipaddress.NetmaskValueError(ValueError)
- ネットマスクに関連する値エラー。