mirror of
https://github.com/fofolee/uTools-Manuals.git
synced 2025-06-09 07:24:04 +08:00
132 lines
87 KiB
HTML
132 lines
87 KiB
HTML
<div class="body" role="main"><div class="section" id="module-ipaddress"><h1><span class="yiyi-st" id="yiyi-10">21.28. <a class="reference internal" href="#module-ipaddress" title="ipaddress: IPv4/IPv6 manipulation library."><code class="xref py py-mod docutils literal"><span class="pre">ipaddress</span></code></a> - IPv4 / IPv6操作库</span></h1><p><span class="yiyi-st" id="yiyi-11"><strong>源代码:</strong> <a class="reference external" href="https://hg.python.org/cpython/file/3.5/Lib/ipaddress.py">Lib / ipaddress.py</a></span></p><p><span class="yiyi-st" id="yiyi-12"><a class="reference internal" href="#module-ipaddress" title="ipaddress: IPv4/IPv6 manipulation library."><code class="xref py py-mod docutils literal"><span class="pre">ipaddress</span></code></a>提供创建,操作和操作IPv4和IPv6地址和网络的功能。</span></p><p><span class="yiyi-st" id="yiyi-13">此模块中的函数和类可以直接处理与IP地址相关的各种任务,包括检查两个主机是否在同一子网上,遍历特定子网中的所有主机,检查字符串是否表示有效IP地址或网络定义等。</span></p><p><span class="yiyi-st" id="yiyi-14">这是完整的模块API参考 - 有关概述和简介,请参阅<a class="reference internal" href="../howto/ipaddress.html#ipaddress-howto"><span>An introduction to the ipaddress module</span></a>。</span></p><div class="versionadded"><p><span class="yiyi-st" id="yiyi-15"><span class="versionmodified">版本3.3中的新功能。</span></span></p></div><div class="section" id="convenience-factory-functions"><h2><span class="yiyi-st" id="yiyi-16">21.28.1. </span><span class="yiyi-st" id="yiyi-17">Convenience factory functions</span></h2><p><span class="yiyi-st" id="yiyi-18"><a class="reference internal" href="#module-ipaddress" title="ipaddress: IPv4/IPv6 manipulation library."><code class="xref py py-mod docutils literal"><span class="pre">ipaddress</span></code></a>模块提供了工厂功能,可以方便地创建IP地址,网络和接口:</span></p><dl class="function"><dt id="ipaddress.ip_address"><span class="yiyi-st" id="yiyi-19"> <code class="descclassname">ipaddress.</code><code class="descname">ip_address</code><span class="sig-paren">(</span><em>address</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-20">根据作为参数传递的IP地址,返回<a class="reference internal" href="#ipaddress.IPv4Address" title="ipaddress.IPv4Address"><code class="xref py py-class docutils literal"><span class="pre">IPv4Address</span></code></a>或<a class="reference internal" href="#ipaddress.IPv6Address" title="ipaddress.IPv6Address"><code class="xref py py-class docutils literal"><span class="pre">IPv6Address</span></code></a>对象。</span><span class="yiyi-st" id="yiyi-21">可以提供IPv4或IPv6地址;默认情况下,小于2 ** 32的整数将被视为IPv4。</span><span class="yiyi-st" id="yiyi-22">如果<em>地址</em>不表示有效的IPv4或IPv6地址,则会引发<a class="reference internal" href="exceptions.html#ValueError" title="ValueError"><code class="xref py py-exc docutils literal"><span class="pre">ValueError</span></code></a>。</span></p><div class="highlight-python3"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">ipaddress</span><span class="o">.</span><span class="n">ip_address</span><span class="p">(</span><span class="s1">'192.168.0.1'</span><span class="p">)</span>
|
||
<span class="go">IPv4Address('192.168.0.1')</span>
|
||
<span class="gp">>>> </span><span class="n">ipaddress</span><span class="o">.</span><span class="n">ip_address</span><span class="p">(</span><span class="s1">'2001:db8::'</span><span class="p">)</span>
|
||
<span class="go">IPv6Address('2001:db8::')</span>
|
||
</pre></div></div></dd></dl><dl class="function"><dt id="ipaddress.ip_network"><span class="yiyi-st" id="yiyi-23"> <code class="descclassname">ipaddress.</code><code class="descname">ip_network</code><span class="sig-paren">(</span><em>address</em>, <em>strict=True</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-24">根据作为参数传递的IP地址,返回<a class="reference internal" href="#ipaddress.IPv4Network" title="ipaddress.IPv4Network"><code class="xref py py-class docutils literal"><span class="pre">IPv4Network</span></code></a>或<a class="reference internal" href="#ipaddress.IPv6Network" title="ipaddress.IPv6Network"><code class="xref py py-class docutils literal"><span class="pre">IPv6Network</span></code></a>对象。</span><span class="yiyi-st" id="yiyi-25"><em>地址</em>是表示IP网络的字符串或整数。</span><span class="yiyi-st" id="yiyi-26">可以提供IPv4或IPv6网络;默认情况下,小于2 ** 32的整数将被视为IPv4。</span><span class="yiyi-st" id="yiyi-27"><em>严格</em>传递到<a class="reference internal" href="#ipaddress.IPv4Network" title="ipaddress.IPv4Network"><code class="xref py py-class docutils literal"><span class="pre">IPv4Network</span></code></a>或<a class="reference internal" href="#ipaddress.IPv6Network" title="ipaddress.IPv6Network"><code class="xref py py-class docutils literal"><span class="pre">IPv6Network</span></code></a>构造函数。</span><span class="yiyi-st" id="yiyi-28">如果<em>地址</em>不表示有效的IPv4或IPv6地址,或者如果网络已设置主机位,则会引发<a class="reference internal" href="exceptions.html#ValueError" title="ValueError"><code class="xref py py-exc docutils literal"><span class="pre">ValueError</span></code></a>。</span></p><div class="highlight-python3"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">ipaddress</span><span class="o">.</span><span class="n">ip_network</span><span class="p">(</span><span class="s1">'192.168.0.0/28'</span><span class="p">)</span>
|
||
<span class="go">IPv4Network('192.168.0.0/28')</span>
|
||
</pre></div></div></dd></dl><dl class="function"><dt id="ipaddress.ip_interface"><span class="yiyi-st" id="yiyi-29"> <code class="descclassname">ipaddress.</code><code class="descname">ip_interface</code><span class="sig-paren">(</span><em>address</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-30">根据作为参数传递的IP地址,返回<a class="reference internal" href="#ipaddress.IPv4Interface" title="ipaddress.IPv4Interface"><code class="xref py py-class docutils literal"><span class="pre">IPv4Interface</span></code></a>或<a class="reference internal" href="#ipaddress.IPv6Interface" title="ipaddress.IPv6Interface"><code class="xref py py-class docutils literal"><span class="pre">IPv6Interface</span></code></a>对象。</span><span class="yiyi-st" id="yiyi-31"><em>地址</em>是表示IP地址的字符串或整数。</span><span class="yiyi-st" id="yiyi-32">可以提供IPv4或IPv6地址;默认情况下,小于2 ** 32的整数将被视为IPv4。</span><span class="yiyi-st" id="yiyi-33">如果<em>地址</em>不表示有效的IPv4或IPv6地址,则会引发<a class="reference internal" href="exceptions.html#ValueError" title="ValueError"><code class="xref py py-exc docutils literal"><span class="pre">ValueError</span></code></a>。</span></p></dd></dl><p><span class="yiyi-st" id="yiyi-34">这些便利功能的一个缺点是,需要处理IPv4和IPv6格式意味着错误消息提供关于精确错误的最少信息,因为功能不知道IPv4或IPv6格式是否是预期的。</span><span class="yiyi-st" id="yiyi-35">可以通过直接调用适当的特定于类的构造函数来获取更详细的错误报告。</span></p></div><div class="section" id="ip-addresses"><h2><span class="yiyi-st" id="yiyi-36">21.28.2. </span><span class="yiyi-st" id="yiyi-37">IP Addresses</span></h2><div class="section" id="address-objects"><h3><span class="yiyi-st" id="yiyi-38">21.28.2.1. </span><span class="yiyi-st" id="yiyi-39">Address objects</span></h3><p><span class="yiyi-st" id="yiyi-40"><a class="reference internal" href="#ipaddress.IPv4Address" title="ipaddress.IPv4Address"><code class="xref py py-class docutils literal"><span class="pre">IPv4Address</span></code></a>和<a class="reference internal" href="#ipaddress.IPv6Address" title="ipaddress.IPv6Address"><code class="xref py py-class docutils literal"><span class="pre">IPv6Address</span></code></a>对象共享许多常见属性。</span><span class="yiyi-st" id="yiyi-41">一些仅对IPv6地址有意义的属性也由<a class="reference internal" href="#ipaddress.IPv4Address" title="ipaddress.IPv4Address"><code class="xref py py-class docutils literal"><span class="pre">IPv4Address</span></code></a>对象实现,以便于更容易编写正确处理两个IP版本的代码。</span></p><dl class="class"><dt id="ipaddress.IPv4Address"><span class="yiyi-st" id="yiyi-42"> <em class="property">class </em><code class="descclassname">ipaddress.</code><code class="descname">IPv4Address</code><span class="sig-paren">(</span><em>address</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-43">构造IPv4地址。</span><span class="yiyi-st" id="yiyi-44">如果<em>地址</em>不是有效的IPv4地址,则会产生<a class="reference internal" href="#ipaddress.AddressValueError" title="ipaddress.AddressValueError"><code class="xref py py-exc docutils literal"><span class="pre">AddressValueError</span></code></a>。</span></p><p><span class="yiyi-st" id="yiyi-45">以下构成有效的IPv4地址:</span></p><ol class="arabic simple"><li><span class="yiyi-st" id="yiyi-46">以十进制点表示法的字符串,由四个十进制整数组成,包含范围0-255,用点分隔。</span><span class="yiyi-st" id="yiyi-47"><code class="docutils literal"><span class="pre">192.168.0.1</span></code>)。</span><span class="yiyi-st" id="yiyi-48">每个整数表示地址中的八位字节(字节)。</span><span class="yiyi-st" id="yiyi-49">只有小于8的值才允许前导零(因为这种字符串的十进制和八进制解释之间没有歧义)。</span></li><li><span class="yiyi-st" id="yiyi-50">适合32位的整数。</span></li><li><span class="yiyi-st" id="yiyi-51">整数打包成长度为4(最高有效字节优先)的<a class="reference internal" href="functions.html#bytes" title="bytes"><code class="xref py py-class docutils literal"><span class="pre">bytes</span></code></a>对象。</span></li></ol><div class="highlight-python3"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">ipaddress</span><span class="o">.</span><span class="n">IPv4Address</span><span class="p">(</span><span class="s1">'192.168.0.1'</span><span class="p">)</span>
|
||
<span class="go">IPv4Address('192.168.0.1')</span>
|
||
<span class="gp">>>> </span><span class="n">ipaddress</span><span class="o">.</span><span class="n">IPv4Address</span><span class="p">(</span><span class="mi">3232235521</span><span class="p">)</span>
|
||
<span class="go">IPv4Address('192.168.0.1')</span>
|
||
<span class="gp">>>> </span><span class="n">ipaddress</span><span class="o">.</span><span class="n">IPv4Address</span><span class="p">(</span><span class="n">b</span><span class="s1">'</span><span class="se">\xC0\xA8\x00\x01</span><span class="s1">'</span><span class="p">)</span>
|
||
<span class="go">IPv4Address('192.168.0.1')</span>
|
||
</pre></div></div><dl class="attribute"><dt id="ipaddress.IPv4Address.version"><span class="yiyi-st" id="yiyi-52"> <code class="descname">version</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-53">适当的版本号:IPv4的<code class="docutils literal"><span class="pre">4</span></code>,IPv6的<code class="docutils literal"><span class="pre">6</span></code>。</span></p></dd></dl><dl class="attribute"><dt id="ipaddress.IPv4Address.max_prefixlen"><span class="yiyi-st" id="yiyi-54"> <code class="descname">max_prefixlen</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-55">此版本的地址表示中的总位数:IPv4的<code class="docutils literal"><span class="pre">32</span></code>,IPv6的<code class="docutils literal"><span class="pre">128</span></code>。</span></p><p><span class="yiyi-st" id="yiyi-56">前缀定义了地址中前导比特的数量,这些比特被比较以确定地址是否是网络的一部分。</span></p></dd></dl><dl class="attribute"><dt id="ipaddress.IPv4Address.compressed"><span class="yiyi-st" id="yiyi-57"> <code class="descname">compressed</code></span></dt><dd></dd></dl><dl class="attribute"><dt id="ipaddress.IPv4Address.exploded"><span class="yiyi-st" id="yiyi-58"> <code class="descname">exploded</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-59">以点分十进制符号表示的字符串。</span><span class="yiyi-st" id="yiyi-60">前导零从不包括在表示中。</span></p><p><span class="yiyi-st" id="yiyi-61">由于IPv4没有为八位字节设置为零的地址定义速记符号,因此这两个属性对于IPv4地址始终与<code class="docutils literal"><span class="pre">str(addr)</span></code>相同。</span><span class="yiyi-st" id="yiyi-62">暴露这些属性使得编写能够处理IPv4和IPv6地址的显示代码变得更容易。</span></p></dd></dl><dl class="attribute"><dt id="ipaddress.IPv4Address.packed"><span class="yiyi-st" id="yiyi-63"> <code class="descname">packed</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-64">此地址的二进制表示 - 适当长度(最高有效字节优先)的<a class="reference internal" href="functions.html#bytes" title="bytes"><code class="xref py py-class docutils literal"><span class="pre">bytes</span></code></a>对象。</span><span class="yiyi-st" id="yiyi-65">IPv4为4字节,IPv6为16字节。</span></p></dd></dl><dl class="attribute"><dt id="ipaddress.IPv4Address.reverse_pointer"><span class="yiyi-st" id="yiyi-66"> <code class="descname">reverse_pointer</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-67">IP地址的反向DNS PTR记录的名称,例如</span><span class="yiyi-st" id="yiyi-68">:</span></p><div class="highlight-python3"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">ipaddress</span><span class="o">.</span><span class="n">ip_address</span><span class="p">(</span><span class="s2">"127.0.0.1"</span><span class="p">)</span><span class="o">.</span><span class="n">reverse_pointer</span>
|
||
<span class="go">'1.0.0.127.in-addr.arpa'</span>
|
||
<span class="gp">>>> </span><span class="n">ipaddress</span><span class="o">.</span><span class="n">ip_address</span><span class="p">(</span><span class="s2">"2001:db8::1"</span><span class="p">)</span><span class="o">.</span><span class="n">reverse_pointer</span>
|
||
<span class="go">'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'</span>
|
||
</pre></div></div><p><span class="yiyi-st" id="yiyi-69">这是可用于执行PTR查找的名称,而不是解析的主机名本身。</span></p><div class="versionadded"><p><span class="yiyi-st" id="yiyi-70"><span class="versionmodified">版本3.5中的新功能。</span></span></p></div></dd></dl><dl class="attribute"><dt id="ipaddress.IPv4Address.is_multicast"><span class="yiyi-st" id="yiyi-71"> <code class="descname">is_multicast</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-72"><code class="docutils literal"><span class="pre">True</span></code>如果地址保留供多播使用。</span><span class="yiyi-st" id="yiyi-73">有关详细信息,请参阅<span class="target" id="index-0"></span> <a class="rfc reference external" href="https://tools.ietf.org/html/rfc3171.html"><strong>RFC 3171</strong></a>(适用于IPv4)或<span class="target" id="index-1"></span> <a class="rfc reference external" href="https://tools.ietf.org/html/rfc2373.html"><strong>RFC 2373</strong></a>。</span></p></dd></dl><dl class="attribute"><dt id="ipaddress.IPv4Address.is_private"><span class="yiyi-st" id="yiyi-74"> <code class="descname">is_private</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-75"><code class="docutils literal"><span class="pre">True</span></code>如果地址分配给专用网络。</span><span class="yiyi-st" id="yiyi-76">请参阅<a class="reference external" href="https://www.iana.org/assignments/iana-ipv4-special-registry/iana-ipv4-special-registry.xhtml">iana-ipv4-special-registry</a>(适用于IPv4)或<a class="reference external" href="https://www.iana.org/assignments/iana-ipv6-special-registry/iana-ipv6-special-registry.xhtml">iana-ipv6-special-registry</a>(适用于IPv6)。</span></p></dd></dl><dl class="attribute"><dt id="ipaddress.IPv4Address.is_global"><span class="yiyi-st" id="yiyi-77"> <code class="descname">is_global</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-78"><code class="docutils literal"><span class="pre">True</span></code>如果地址分配给公共网络。</span><span class="yiyi-st" id="yiyi-79">请参阅<a class="reference external" href="https://www.iana.org/assignments/iana-ipv4-special-registry/iana-ipv4-special-registry.xhtml">iana-ipv4-special-registry</a>(适用于IPv4)或<a class="reference external" href="https://www.iana.org/assignments/iana-ipv6-special-registry/iana-ipv6-special-registry.xhtml">iana-ipv6-special-registry</a>(适用于IPv6)。</span></p><div class="versionadded"><p><span class="yiyi-st" id="yiyi-80"><span class="versionmodified">版本3.4中的新功能。</span></span></p></div></dd></dl><dl class="attribute"><dt id="ipaddress.IPv4Address.is_unspecified"><span class="yiyi-st" id="yiyi-81"> <code class="descname">is_unspecified</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-82"><code class="docutils literal"><span class="pre">True</span></code>如果地址未指定。</span><span class="yiyi-st" id="yiyi-83">请参见<span class="target" id="index-2"></span> <a class="rfc reference external" href="https://tools.ietf.org/html/rfc5735.html"><strong>RFC 5735</strong></a>(适用于IPv4)或<span class="target" id="index-3"></span> <a class="rfc reference external" href="https://tools.ietf.org/html/rfc2373.html"><strong>RFC 2373</strong></a></span></p></dd></dl><dl class="attribute"><dt id="ipaddress.IPv4Address.is_reserved"><span class="yiyi-st" id="yiyi-84"> <code class="descname">is_reserved</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-85"><code class="docutils literal"><span class="pre">True</span></code>如果地址是其他IETF保留。</span></p></dd></dl><dl class="attribute"><dt id="ipaddress.IPv4Address.is_loopback"><span class="yiyi-st" id="yiyi-86"> <code class="descname">is_loopback</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-87"><code class="docutils literal"><span class="pre">True</span></code>如果这是一个环回地址。</span><span class="yiyi-st" id="yiyi-88">请参见<span class="target" id="index-4"></span> <a class="rfc reference external" href="https://tools.ietf.org/html/rfc3330.html"><strong>RFC 3330</strong></a>(对于IPv4)或<span class="target" id="index-5"></span> <a class="rfc reference external" href="https://tools.ietf.org/html/rfc2373.html"><strong>RFC 2373</strong></a></span></p></dd></dl><dl class="attribute"><dt id="ipaddress.IPv4Address.is_link_local"><span class="yiyi-st" id="yiyi-89"> <code class="descname">is_link_local</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-90"><code class="docutils literal"><span class="pre">True</span></code>如果地址保留供链路本地使用。</span><span class="yiyi-st" id="yiyi-91">请参阅<span class="target" id="index-6"></span> <a class="rfc reference external" href="https://tools.ietf.org/html/rfc3927.html"><strong>RFC 3927</strong></a>。</span></p></dd></dl></dd></dl><dl class="class"><dt id="ipaddress.IPv6Address"><span class="yiyi-st" id="yiyi-92"> <em class="property">class </em><code class="descclassname">ipaddress.</code><code class="descname">IPv6Address</code><span class="sig-paren">(</span><em>address</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-93">构造IPv6地址。</span><span class="yiyi-st" id="yiyi-94">如果<em>地址</em>不是有效的IPv6地址,则会产生<a class="reference internal" href="#ipaddress.AddressValueError" title="ipaddress.AddressValueError"><code class="xref py py-exc docutils literal"><span class="pre">AddressValueError</span></code></a>。</span></p><p><span class="yiyi-st" id="yiyi-95">以下构成有效的IPv6地址:</span></p><ol class="arabic simple"><li><span class="yiyi-st" id="yiyi-96">一个由八组四个十六进制数字组成的字符串,每组代表16位。</span><span class="yiyi-st" id="yiyi-97">这些组由冒号分隔。</span><span class="yiyi-st" id="yiyi-98">这描述了<em>分解的</em>(长符)符号。</span><span class="yiyi-st" id="yiyi-99">字符串也可以通过各种方法<em>压缩</em>(简写符号)。</span><span class="yiyi-st" id="yiyi-100">有关详细信息,请参阅<span class="target" id="index-7"></span> <a class="rfc reference external" href="https://tools.ietf.org/html/rfc4291.html"><strong>RFC 4291</strong></a>。</span><span class="yiyi-st" id="yiyi-101">例如,<code class="docutils literal"><span class="pre">"0000:0000:0000:0000:0000:0abc:0007:0def"</span></code>可以压缩为<code class="docutils literal"><span class="pre">"::abc:7:def"</span></code></span></li><li><span class="yiyi-st" id="yiyi-102">适合128位的整数。</span></li><li><span class="yiyi-st" id="yiyi-103">整数打包成长度为16,big-endian的<a class="reference internal" href="functions.html#bytes" title="bytes"><code class="xref py py-class docutils literal"><span class="pre">bytes</span></code></a>对象。</span></li></ol><div class="highlight-python3"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">ipaddress</span><span class="o">.</span><span class="n">IPv6Address</span><span class="p">(</span><span class="s1">'2001:db8::1000'</span><span class="p">)</span>
|
||
<span class="go">IPv6Address('2001:db8::1000')</span>
|
||
</pre></div></div><dl class="attribute"><dt id="ipaddress.IPv6Address.compressed"><span class="yiyi-st" id="yiyi-104"> <code class="descname">compressed</code></span></dt><dd></dd></dl><p><span class="yiyi-st" id="yiyi-105">地址表示的短形式,其中组中的前导零被省略并且组的最长序列完全由零组成,折叠到单个空组。</span></p><p><span class="yiyi-st" id="yiyi-106">这也是<code class="docutils literal"><span class="pre">str(addr)</span></code>为IPv6地址返回的值。</span></p><dl class="attribute"><dt id="ipaddress.IPv6Address.exploded"><span class="yiyi-st" id="yiyi-107"> <code class="descname">exploded</code></span></dt><dd></dd></dl><p><span class="yiyi-st" id="yiyi-108">长形式的地址表示,包括所有前导零和组完全由零组成。</span></p><p><span class="yiyi-st" id="yiyi-109">有关以下属性,请参阅<a class="reference internal" href="#ipaddress.IPv4Address" title="ipaddress.IPv4Address"><code class="xref py py-class docutils literal"><span class="pre">IPv4Address</span></code></a>类的相应文档:</span></p><dl class="attribute"><dt id="ipaddress.IPv6Address.packed"><span class="yiyi-st" id="yiyi-110"> <code class="descname">packed</code></span></dt><dd></dd></dl><dl class="attribute"><dt id="ipaddress.IPv6Address.reverse_pointer"><span class="yiyi-st" id="yiyi-111"> <code class="descname">reverse_pointer</code></span></dt><dd></dd></dl><dl class="attribute"><dt id="ipaddress.IPv6Address.version"><span class="yiyi-st" id="yiyi-112"> <code class="descname">version</code></span></dt><dd></dd></dl><dl class="attribute"><dt id="ipaddress.IPv6Address.max_prefixlen"><span class="yiyi-st" id="yiyi-113"> <code class="descname">max_prefixlen</code></span></dt><dd></dd></dl><dl class="attribute"><dt id="ipaddress.IPv6Address.is_multicast"><span class="yiyi-st" id="yiyi-114"> <code class="descname">is_multicast</code></span></dt><dd></dd></dl><dl class="attribute"><dt id="ipaddress.IPv6Address.is_private"><span class="yiyi-st" id="yiyi-115"> <code class="descname">is_private</code></span></dt><dd></dd></dl><dl class="attribute"><dt id="ipaddress.IPv6Address.is_global"><span class="yiyi-st" id="yiyi-116"> <code class="descname">is_global</code></span></dt><dd></dd></dl><dl class="attribute"><dt id="ipaddress.IPv6Address.is_unspecified"><span class="yiyi-st" id="yiyi-117"> <code class="descname">is_unspecified</code></span></dt><dd></dd></dl><dl class="attribute"><dt id="ipaddress.IPv6Address.is_reserved"><span class="yiyi-st" id="yiyi-118"> <code class="descname">is_reserved</code></span></dt><dd></dd></dl><dl class="attribute"><dt id="ipaddress.IPv6Address.is_loopback"><span class="yiyi-st" id="yiyi-119"> <code class="descname">is_loopback</code></span></dt><dd></dd></dl><dl class="attribute"><dt id="ipaddress.IPv6Address.is_link_local"><span class="yiyi-st" id="yiyi-120"> <code class="descname">is_link_local</code></span></dt><dd><div class="versionadded"><p><span class="yiyi-st" id="yiyi-121"><span class="versionmodified">版本3.4中的新功能:</span> is_global</span></p></div></dd></dl><dl class="attribute"><dt id="ipaddress.IPv6Address.is_site_local"><span class="yiyi-st" id="yiyi-122"> <code class="descname">is_site_local</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-123"><code class="docutils literal"><span class="pre">True</span></code>如果地址保留为站点本地使用。</span><span class="yiyi-st" id="yiyi-124">请注意,站点本地地址空间已被<span class="target" id="index-8"></span> <a class="rfc reference external" href="https://tools.ietf.org/html/rfc3879.html"><strong>RFC 3879</strong></a>所取代。</span><span class="yiyi-st" id="yiyi-125">使用<a class="reference internal" href="#ipaddress.IPv4Address.is_private" title="ipaddress.IPv4Address.is_private"><code class="xref py py-attr docutils literal"><span class="pre">is_private</span></code></a>可测试此地址是否位于由<span class="target" id="index-9"></span> <a class="rfc reference external" href="https://tools.ietf.org/html/rfc4193.html"><strong>RFC 4193</strong></a>定义的唯一本地地址空间中。</span></p></dd></dl><dl class="attribute"><dt id="ipaddress.IPv6Address.ipv4_mapped"><span class="yiyi-st" id="yiyi-126"> <code class="descname">ipv4_mapped</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-127">对于看起来是IPv4映射地址(从<code class="docutils literal"><span class="pre">::FFFF/96</span></code>开始)的地址,此属性将报告嵌入的IPv4地址。</span><span class="yiyi-st" id="yiyi-128">对于任何其他地址,此属性将为<code class="docutils literal"><span class="pre">None</span></code>。</span></p></dd></dl><dl class="attribute"><dt id="ipaddress.IPv6Address.sixtofour"><span class="yiyi-st" id="yiyi-129"> <code class="descname">sixtofour</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-130">对于显示为<span class="target" id="index-10"></span> <a class="rfc reference external" href="https://tools.ietf.org/html/rfc3056.html"><strong>RFC 3056</strong></a>定义的6to4地址(以<code class="docutils literal"><span class="pre">2002::/16</span></code>开头)的地址,此属性将报告嵌入式IPv4地址。</span><span class="yiyi-st" id="yiyi-131">对于任何其他地址,此属性将为<code class="docutils literal"><span class="pre">None</span></code>。</span></p></dd></dl><dl class="attribute"><dt id="ipaddress.IPv6Address.teredo"><span class="yiyi-st" id="yiyi-132"> <code class="descname">teredo</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-133">对于显示为由<span class="target" id="index-11"></span> <a class="rfc reference external" href="https://tools.ietf.org/html/rfc4380.html"><strong>RFC 4380</strong></a>定义的Teredo地址(以<code class="docutils literal"><span class="pre">2001::/32</span></code>开头)的地址,此属性将报告嵌入式<code class="docutils literal"><span class="pre">(服务器,</span> <span class="pre">客户端)</span></code> IP地址对。</span><span class="yiyi-st" id="yiyi-134">对于任何其他地址,此属性将为<code class="docutils literal"><span class="pre">None</span></code>。</span></p></dd></dl></dd></dl></div><div class="section" id="conversion-to-strings-and-integers"><h3><span class="yiyi-st" id="yiyi-135">21.28.2.2. </span><span class="yiyi-st" id="yiyi-136">Conversion to Strings and Integers</span></h3><p><span class="yiyi-st" id="yiyi-137">要与网络接口(如套接字模块)互操作,地址必须转换为字符串或整数。</span><span class="yiyi-st" id="yiyi-138">这是使用<a class="reference internal" href="stdtypes.html#str" title="str"><code class="xref py py-func docutils literal"><span class="pre">str()</span></code></a>和<a class="reference internal" href="functions.html#int" title="int"><code class="xref py py-func docutils literal"><span class="pre">int()</span></code></a>内置函数处理的:</span></p><div class="highlight-python3"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="nb">str</span><span class="p">(</span><span class="n">ipaddress</span><span class="o">.</span><span class="n">IPv4Address</span><span class="p">(</span><span class="s1">'192.168.0.1'</span><span class="p">))</span>
|
||
<span class="go">'192.168.0.1'</span>
|
||
<span class="gp">>>> </span><span class="nb">int</span><span class="p">(</span><span class="n">ipaddress</span><span class="o">.</span><span class="n">IPv4Address</span><span class="p">(</span><span class="s1">'192.168.0.1'</span><span class="p">))</span>
|
||
<span class="go">3232235521</span>
|
||
<span class="gp">>>> </span><span class="nb">str</span><span class="p">(</span><span class="n">ipaddress</span><span class="o">.</span><span class="n">IPv6Address</span><span class="p">(</span><span class="s1">'::1'</span><span class="p">))</span>
|
||
<span class="go">'::1'</span>
|
||
<span class="gp">>>> </span><span class="nb">int</span><span class="p">(</span><span class="n">ipaddress</span><span class="o">.</span><span class="n">IPv6Address</span><span class="p">(</span><span class="s1">'::1'</span><span class="p">))</span>
|
||
<span class="go">1</span>
|
||
</pre></div></div></div><div class="section" id="operators"><h3><span class="yiyi-st" id="yiyi-139">21.28.2.3. </span><span class="yiyi-st" id="yiyi-140">Operators</span></h3><p><span class="yiyi-st" id="yiyi-141">地址对象支持一些操作符。</span><span class="yiyi-st" id="yiyi-142">除非另有说明,操作员只能在兼容对象之间应用。</span><span class="yiyi-st" id="yiyi-143">IPv4与IPv4,IPv6与IPv6)。</span></p><div class="section" id="comparison-operators"><h4><span class="yiyi-st" id="yiyi-144">21.28.2.3.1. </span><span class="yiyi-st" id="yiyi-145">Comparison operators</span></h4><p><span class="yiyi-st" id="yiyi-146">地址对象可以与通常的一组比较运算符进行比较。</span><span class="yiyi-st" id="yiyi-147">一些例子:</span></p><div class="highlight-python3"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">IPv4Address</span><span class="p">(</span><span class="s1">'127.0.0.2'</span><span class="p">)</span> <span class="o">></span> <span class="n">IPv4Address</span><span class="p">(</span><span class="s1">'127.0.0.1'</span><span class="p">)</span>
|
||
<span class="go">True</span>
|
||
<span class="gp">>>> </span><span class="n">IPv4Address</span><span class="p">(</span><span class="s1">'127.0.0.2'</span><span class="p">)</span> <span class="o">==</span> <span class="n">IPv4Address</span><span class="p">(</span><span class="s1">'127.0.0.1'</span><span class="p">)</span>
|
||
<span class="go">False</span>
|
||
<span class="gp">>>> </span><span class="n">IPv4Address</span><span class="p">(</span><span class="s1">'127.0.0.2'</span><span class="p">)</span> <span class="o">!=</span> <span class="n">IPv4Address</span><span class="p">(</span><span class="s1">'127.0.0.1'</span><span class="p">)</span>
|
||
<span class="go">True</span>
|
||
</pre></div></div></div><div class="section" id="arithmetic-operators"><h4><span class="yiyi-st" id="yiyi-148">21.28.2.3.2. </span><span class="yiyi-st" id="yiyi-149">Arithmetic operators</span></h4><p><span class="yiyi-st" id="yiyi-150">整数可以添加到地址对象或从地址对象中减去。</span><span class="yiyi-st" id="yiyi-151">一些例子:</span></p><div class="highlight-python3"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">IPv4Address</span><span class="p">(</span><span class="s1">'127.0.0.2'</span><span class="p">)</span> <span class="o">+</span> <span class="mi">3</span>
|
||
<span class="go">IPv4Address('127.0.0.5')</span>
|
||
<span class="gp">>>> </span><span class="n">IPv4Address</span><span class="p">(</span><span class="s1">'127.0.0.2'</span><span class="p">)</span> <span class="o">-</span> <span class="mi">3</span>
|
||
<span class="go">IPv4Address('126.255.255.255')</span>
|
||
<span class="gp">>>> </span><span class="n">IPv4Address</span><span class="p">(</span><span class="s1">'255.255.255.255'</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span>
|
||
<span class="gt">Traceback (most recent call last):</span>
|
||
File <span class="nb">"<stdin>"</span>, line <span class="m">1</span>, in <span class="n"><module></span>
|
||
<span class="gr">ipaddress.AddressValueError</span>: <span class="n">4294967296 (>= 2**32) is not permitted as an IPv4 address</span>
|
||
</pre></div></div></div></div></div><div class="section" id="ip-network-definitions"><h2><span class="yiyi-st" id="yiyi-152">21.28.3. </span><span class="yiyi-st" id="yiyi-153">IP Network definitions</span></h2><p><span class="yiyi-st" id="yiyi-154"><a class="reference internal" href="#ipaddress.IPv4Network" title="ipaddress.IPv4Network"><code class="xref py py-class docutils literal"><span class="pre">IPv4Network</span></code></a>和<a class="reference internal" href="#ipaddress.IPv6Network" title="ipaddress.IPv6Network"><code class="xref py py-class docutils literal"><span class="pre">IPv6Network</span></code></a>对象提供了一种定义和检查IP网络定义的机制。</span><span class="yiyi-st" id="yiyi-155">网络定义由<em>掩码</em>和<em>网络地址</em>组成,因此定义了在使用掩码进行掩码(二进制AND)时等于网络地址的IP地址范围。</span><span class="yiyi-st" id="yiyi-156">For example, a network definition with the mask <code class="docutils literal"><span class="pre">255.255.255.0</span></code> and the network address <code class="docutils literal"><span class="pre">192.168.1.0</span></code> consists of IP addresses in the inclusive range <code class="docutils literal"><span class="pre">192.168.1.0</span></code> to <code class="docutils literal"><span class="pre">192.168.1.255</span></code>.</span></p><div class="section" id="prefix-net-mask-and-host-mask"><h3><span class="yiyi-st" id="yiyi-157">21.28.3.1. </span><span class="yiyi-st" id="yiyi-158">Prefix, net mask and host mask</span></h3><p><span class="yiyi-st" id="yiyi-159">有几种等效的方法来指定IP网络掩码。</span><span class="yiyi-st" id="yiyi-160"><em>前缀</em> <code class="docutils literal"><span class="pre">/<nbits></span></code>是表示在网络掩码中设置了多少个高阶比特的符号。</span><span class="yiyi-st" id="yiyi-161"><em>网络掩码</em>是设置了一些数量的高阶位的IP地址。</span><span class="yiyi-st" id="yiyi-162">因此,前缀<code class="docutils literal"><span class="pre">/24</span></code>等效于IPv4中的网络掩码<code class="docutils literal"><span class="pre">255.255.255.0</span></code>或IPv6中的<code class="docutils literal"><span class="pre">ffff:ff00::</span></code>。</span><span class="yiyi-st" id="yiyi-163">此外,<em>主机掩码</em>是<em>网络掩码</em>的逻辑反转,并且有时(例如在Cisco访问控制列表中)用于表示网络掩码。</span><span class="yiyi-st" id="yiyi-164">IPv4中等效于<code class="docutils literal"><span class="pre">/24</span></code>的主机掩码为<code class="docutils literal"><span class="pre">0.0.0.255</span></code>。</span></p></div><div class="section" id="network-objects"><h3><span class="yiyi-st" id="yiyi-165">21.28.3.2. </span><span class="yiyi-st" id="yiyi-166">Network objects</span></h3><p><span class="yiyi-st" id="yiyi-167">地址对象实现的所有属性也由网络对象实现。</span><span class="yiyi-st" id="yiyi-168">此外,网络对象实现附加属性。</span><span class="yiyi-st" id="yiyi-169">所有这些在<a class="reference internal" href="#ipaddress.IPv4Network" title="ipaddress.IPv4Network"><code class="xref py py-class docutils literal"><span class="pre">IPv4Network</span></code></a>和<a class="reference internal" href="#ipaddress.IPv6Network" title="ipaddress.IPv6Network"><code class="xref py py-class docutils literal"><span class="pre">IPv6Network</span></code></a>之间是常见的,因此为了避免重复,它们仅记录在<a class="reference internal" href="#ipaddress.IPv4Network" title="ipaddress.IPv4Network"><code class="xref py py-class docutils literal"><span class="pre">IPv4Network</span></code></a>。</span></p><dl class="class"><dt id="ipaddress.IPv4Network"><span class="yiyi-st" id="yiyi-170"> <em class="property">class </em><code class="descclassname">ipaddress.</code><code class="descname">IPv4Network</code><span class="sig-paren">(</span><em>address</em>, <em>strict=True</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-171">构造IPv4网络定义。</span><span class="yiyi-st" id="yiyi-172"><em>地址</em>可以是以下之一:</span></p><ol class="arabic"><li><p class="first"><span class="yiyi-st" id="yiyi-173">由IP地址和可选掩码组成的字符串,以斜杠(<code class="docutils literal"><span class="pre">/</span></code>)分隔。</span><span class="yiyi-st" id="yiyi-174">IP地址是网络地址,掩码可以是单个数字,这意味着它是<em>前缀</em>,也可以是IPv4地址的字符串表示形式。</span><span class="yiyi-st" id="yiyi-175">如果是后者,如果它以非零字段开始,则掩码被解释为<em>网络掩码</em>,如果它以零字段开始,则被解释为<em>主机掩码</em>。</span><span class="yiyi-st" id="yiyi-176">如果没有提供掩码,它被认为是<code class="docutils literal"><span class="pre">/32</span></code>。</span></p><p><span class="yiyi-st" id="yiyi-177">例如,以下<em>地址</em>规范是等效的:<code class="docutils literal"><span class="pre">192.168.1.0/24</span></code>,<code class="docutils literal"><span class="pre">192.168.1.0/255.255.255.0</span></code>和<code class="docutils literal"><span class="pre">192.168.1.0/0.0.0.255</span></code>。</span></p></li><li><p class="first"><span class="yiyi-st" id="yiyi-178">适合32位的整数。</span><span class="yiyi-st" id="yiyi-179">这相当于单地址网络,网络地址为<em>地址</em>,掩码为<code class="docutils literal"><span class="pre">/32</span></code>。</span></p></li><li><p class="first"><span class="yiyi-st" id="yiyi-180">整数打包成长度为4,big-endian的<a class="reference internal" href="functions.html#bytes" title="bytes"><code class="xref py py-class docutils literal"><span class="pre">bytes</span></code></a>对象。</span><span class="yiyi-st" id="yiyi-181">解释类似于整数<em>地址</em>。</span></p></li><li><p class="first"><span class="yiyi-st" id="yiyi-182">地址描述和网络掩码的二元组,其中地址描述是字符串,32位整数,4字节打包整数或现有IPv4Address对象;并且网络掩码是表示前缀长度的整数。</span><span class="yiyi-st" id="yiyi-183"><code class="docutils literal"><span class="pre">24</span></code>)或表示前缀掩码的字符串(例如,</span><span class="yiyi-st" id="yiyi-184"><code class="docutils literal"><span class="pre">255.255.255.0</span></code>)。</span></p></li></ol><p><span class="yiyi-st" id="yiyi-185">如果<em>地址</em>不是有效的IPv4地址,则会产生<a class="reference internal" href="#ipaddress.AddressValueError" title="ipaddress.AddressValueError"><code class="xref py py-exc docutils literal"><span class="pre">AddressValueError</span></code></a>。</span><span class="yiyi-st" id="yiyi-186">如果掩码对IPv4地址无效,则会引发<a class="reference internal" href="#ipaddress.NetmaskValueError" title="ipaddress.NetmaskValueError"><code class="xref py py-exc docutils literal"><span class="pre">NetmaskValueError</span></code></a>。</span></p><p><span class="yiyi-st" id="yiyi-187">如果<em>严格</em>为<code class="docutils literal"><span class="pre">True</span></code>且主机位在提供的地址中设置,则会引发<a class="reference internal" href="exceptions.html#ValueError" title="ValueError"><code class="xref py py-exc docutils literal"><span class="pre">ValueError</span></code></a>。</span><span class="yiyi-st" id="yiyi-188">否则,主机位被屏蔽以确定适当的网络地址。</span></p><p><span class="yiyi-st" id="yiyi-189">除非另有说明,如果参数的IP版本与<code class="docutils literal"><span class="pre">self</span></code>不兼容,则接受其他网络/地址对象的所有网络方法都将引用<a class="reference internal" href="exceptions.html#TypeError" title="TypeError"><code class="xref py py-exc docutils literal"><span class="pre">TypeError</span></code></a></span></p><div class="versionchanged"><p><span class="yiyi-st" id="yiyi-190"><span class="versionmodified">在版本3.5中已更改:</span>添加了<em>地址</em>构造函数参数的二元组格式。</span></p></div><dl class="attribute"><dt id="ipaddress.IPv4Network.version"><span class="yiyi-st" id="yiyi-191"> <code class="descname">version</code></span></dt><dd></dd></dl><dl class="attribute"><dt id="ipaddress.IPv4Network.max_prefixlen"><span class="yiyi-st" id="yiyi-192"> <code class="descname">max_prefixlen</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-193">请参阅<a class="reference internal" href="#ipaddress.IPv4Address" title="ipaddress.IPv4Address"><code class="xref py py-class docutils literal"><span class="pre">IPv4Address</span></code></a>中的相应属性文档</span></p></dd></dl><dl class="attribute"><dt id="ipaddress.IPv4Network.is_multicast"><span class="yiyi-st" id="yiyi-194"> <code class="descname">is_multicast</code></span></dt><dd></dd></dl><dl class="attribute"><dt id="ipaddress.IPv4Network.is_private"><span class="yiyi-st" id="yiyi-195"> <code class="descname">is_private</code></span></dt><dd></dd></dl><dl class="attribute"><dt id="ipaddress.IPv4Network.is_unspecified"><span class="yiyi-st" id="yiyi-196"> <code class="descname">is_unspecified</code></span></dt><dd></dd></dl><dl class="attribute"><dt id="ipaddress.IPv4Network.is_reserved"><span class="yiyi-st" id="yiyi-197"> <code class="descname">is_reserved</code></span></dt><dd></dd></dl><dl class="attribute"><dt id="ipaddress.IPv4Network.is_loopback"><span class="yiyi-st" id="yiyi-198"> <code class="descname">is_loopback</code></span></dt><dd></dd></dl><dl class="attribute"><dt id="ipaddress.IPv4Network.is_link_local"><span class="yiyi-st" id="yiyi-199"> <code class="descname">is_link_local</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-200">这些属性对于网络作为整体是真实的,如果它们对于网络地址和广播地址是真的</span></p></dd></dl><dl class="attribute"><dt id="ipaddress.IPv4Network.network_address"><span class="yiyi-st" id="yiyi-201"> <code class="descname">network_address</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-202">网络的网络地址。</span><span class="yiyi-st" id="yiyi-203">网络地址和前缀长度一起唯一地定义网络。</span></p></dd></dl><dl class="attribute"><dt id="ipaddress.IPv4Network.broadcast_address"><span class="yiyi-st" id="yiyi-204"> <code class="descname">broadcast_address</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-205">网络的广播地址。</span><span class="yiyi-st" id="yiyi-206">发送到广播地址的数据包应该由网络上的每个主机接收。</span></p></dd></dl><dl class="attribute"><dt id="ipaddress.IPv4Network.hostmask"><span class="yiyi-st" id="yiyi-207"> <code class="descname">hostmask</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-208">主机掩码,作为字符串。</span></p></dd></dl><dl class="attribute"><dt id="ipaddress.IPv4Network.with_prefixlen"><span class="yiyi-st" id="yiyi-209"> <code class="descname">with_prefixlen</code></span></dt><dd></dd></dl><dl class="attribute"><dt id="ipaddress.IPv4Network.compressed"><span class="yiyi-st" id="yiyi-210"> <code class="descname">compressed</code></span></dt><dd></dd></dl><dl class="attribute"><dt id="ipaddress.IPv4Network.exploded"><span class="yiyi-st" id="yiyi-211"> <code class="descname">exploded</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-212">网络的字符串表示,带有前缀符号的掩码。</span></p><p><span class="yiyi-st" id="yiyi-213"><code class="docutils literal"><span class="pre">with_prefixlen</span></code>和<code class="docutils literal"><span class="pre">compressed</span></code>始终与<code class="docutils literal"><span class="pre">str(network)</span></code>相同。</span><span class="yiyi-st" id="yiyi-214"><code class="docutils literal"><span class="pre">exploded</span></code>使用网络地址的分解形式。</span></p></dd></dl><dl class="attribute"><dt id="ipaddress.IPv4Network.with_netmask"><span class="yiyi-st" id="yiyi-215"> <code class="descname">with_netmask</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-216">网络的字符串表示,带有网络掩码符号的掩码。</span></p></dd></dl><dl class="attribute"><dt id="ipaddress.IPv4Network.with_hostmask"><span class="yiyi-st" id="yiyi-217"> <code class="descname">with_hostmask</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-218">网络的字符串表示,在主机掩码符号中带有掩码。</span></p></dd></dl><dl class="attribute"><dt id="ipaddress.IPv4Network.num_addresses"><span class="yiyi-st" id="yiyi-219"> <code class="descname">num_addresses</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-220">网络中的地址总数。</span></p></dd></dl><dl class="attribute"><dt id="ipaddress.IPv4Network.prefixlen"><span class="yiyi-st" id="yiyi-221"> <code class="descname">prefixlen</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-222">网络前缀的长度(以位为单位)。</span></p></dd></dl><dl class="method"><dt id="ipaddress.IPv4Network.hosts"><span class="yiyi-st" id="yiyi-223"> <code class="descname">hosts</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-224">在网络中的可用主机上返回迭代器。</span><span class="yiyi-st" id="yiyi-225">可用主机是属于网络的所有IP地址,除了网络地址本身和网络广播地址。</span></p><div class="highlight-python3"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="nb">list</span><span class="p">(</span><span class="n">ip_network</span><span class="p">(</span><span class="s1">'192.0.2.0/29'</span><span class="p">)</span><span class="o">.</span><span class="n">hosts</span><span class="p">())</span>
|
||
<span class="go">[IPv4Address('192.0.2.1'), IPv4Address('192.0.2.2'),</span>
|
||
<span class="go"> IPv4Address('192.0.2.3'), IPv4Address('192.0.2.4'),</span>
|
||
<span class="go"> IPv4Address('192.0.2.5'), IPv4Address('192.0.2.6')]</span>
|
||
</pre></div></div></dd></dl><dl class="method"><dt id="ipaddress.IPv4Network.overlaps"><span class="yiyi-st" id="yiyi-226"> <code class="descname">overlaps</code><span class="sig-paren">(</span><em>other</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-227"><code class="docutils literal"><span class="pre">True</span></code>如果此网络部分或全部包含在<em>其他</em>或<em>其他</em>完全包含在此网络中。</span></p></dd></dl><dl class="method"><dt id="ipaddress.IPv4Network.address_exclude"><span class="yiyi-st" id="yiyi-228"> <code class="descname">address_exclude</code><span class="sig-paren">(</span><em>network</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-229">计算从此表中删除给定<em>网络</em>所产生的网络定义。</span><span class="yiyi-st" id="yiyi-230">返回网络对象的迭代器。</span><span class="yiyi-st" id="yiyi-231">引发<a class="reference internal" href="exceptions.html#ValueError" title="ValueError"><code class="xref py py-exc docutils literal"><span class="pre">ValueError</span></code></a>如果<em>网络</em>未完全包含在此网络中。</span></p><div class="highlight-python3"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">n1</span> <span class="o">=</span> <span class="n">ip_network</span><span class="p">(</span><span class="s1">'192.0.2.0/28'</span><span class="p">)</span>
|
||
<span class="gp">>>> </span><span class="n">n2</span> <span class="o">=</span> <span class="n">ip_network</span><span class="p">(</span><span class="s1">'192.0.2.1/32'</span><span class="p">)</span>
|
||
<span class="gp">>>> </span><span class="nb">list</span><span class="p">(</span><span class="n">n1</span><span class="o">.</span><span class="n">address_exclude</span><span class="p">(</span><span class="n">n2</span><span class="p">))</span>
|
||
<span class="go">[IPv4Network('192.0.2.8/29'), IPv4Network('192.0.2.4/30'),</span>
|
||
<span class="go"> IPv4Network('192.0.2.2/31'), IPv4Network('192.0.2.0/32')]</span>
|
||
</pre></div></div></dd></dl><dl class="method"><dt id="ipaddress.IPv4Network.subnets"><span class="yiyi-st" id="yiyi-232"> <code class="descname">subnets</code><span class="sig-paren">(</span><em>prefixlen_diff=1</em>, <em>new_prefix=None</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-233">根据参数值,连接进行当前网络定义的子网。</span><span class="yiyi-st" id="yiyi-234"><em>prefixlen_diff</em>是我们的前缀长度应该增加的量。</span><span class="yiyi-st" id="yiyi-235"><em>new_prefix</em>是所需的子网的新前缀;它必须大于我们的前缀。</span><span class="yiyi-st" id="yiyi-236">必须设置<em>prefixlen_diff</em>和<em>new_prefix</em>中的一个且仅有一个。</span><span class="yiyi-st" id="yiyi-237">返回网络对象的迭代器。</span></p><div class="highlight-python3"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="nb">list</span><span class="p">(</span><span class="n">ip_network</span><span class="p">(</span><span class="s1">'192.0.2.0/24'</span><span class="p">)</span><span class="o">.</span><span class="n">subnets</span><span class="p">())</span>
|
||
<span class="go">[IPv4Network('192.0.2.0/25'), IPv4Network('192.0.2.128/25')]</span>
|
||
<span class="gp">>>> </span><span class="nb">list</span><span class="p">(</span><span class="n">ip_network</span><span class="p">(</span><span class="s1">'192.0.2.0/24'</span><span class="p">)</span><span class="o">.</span><span class="n">subnets</span><span class="p">(</span><span class="n">prefixlen_diff</span><span class="o">=</span><span class="mi">2</span><span class="p">))</span>
|
||
<span class="go">[IPv4Network('192.0.2.0/26'), IPv4Network('192.0.2.64/26'),</span>
|
||
<span class="go"> IPv4Network('192.0.2.128/26'), IPv4Network('192.0.2.192/26')]</span>
|
||
<span class="gp">>>> </span><span class="nb">list</span><span class="p">(</span><span class="n">ip_network</span><span class="p">(</span><span class="s1">'192.0.2.0/24'</span><span class="p">)</span><span class="o">.</span><span class="n">subnets</span><span class="p">(</span><span class="n">new_prefix</span><span class="o">=</span><span class="mi">26</span><span class="p">))</span>
|
||
<span class="go">[IPv4Network('192.0.2.0/26'), IPv4Network('192.0.2.64/26'),</span>
|
||
<span class="go"> IPv4Network('192.0.2.128/26'), IPv4Network('192.0.2.192/26')]</span>
|
||
<span class="gp">>>> </span><span class="nb">list</span><span class="p">(</span><span class="n">ip_network</span><span class="p">(</span><span class="s1">'192.0.2.0/24'</span><span class="p">)</span><span class="o">.</span><span class="n">subnets</span><span class="p">(</span><span class="n">new_prefix</span><span class="o">=</span><span class="mi">23</span><span class="p">))</span>
|
||
<span class="gt">Traceback (most recent call last):</span>
|
||
File <span class="nb">"<stdin>"</span>, line <span class="m">1</span>, in <span class="n"><module></span>
|
||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">'new prefix must be longer'</span><span class="p">)</span>
|
||
<span class="gr">ValueError</span>: <span class="n">new prefix must be longer</span>
|
||
<span class="gp">>>> </span><span class="nb">list</span><span class="p">(</span><span class="n">ip_network</span><span class="p">(</span><span class="s1">'192.0.2.0/24'</span><span class="p">)</span><span class="o">.</span><span class="n">subnets</span><span class="p">(</span><span class="n">new_prefix</span><span class="o">=</span><span class="mi">25</span><span class="p">))</span>
|
||
<span class="go">[IPv4Network('192.0.2.0/25'), IPv4Network('192.0.2.128/25')]</span>
|
||
</pre></div></div></dd></dl><dl class="method"><dt id="ipaddress.IPv4Network.supernet"><span class="yiyi-st" id="yiyi-238"> <code class="descname">supernet</code><span class="sig-paren">(</span><em>prefixlen_diff=1</em>, <em>new_prefix=None</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-239">包含此网络定义的超集,取决于参数值。</span><span class="yiyi-st" id="yiyi-240"><em>prefixlen_diff</em>是我们的前缀长度应该减少的量。</span><span class="yiyi-st" id="yiyi-241"><em>new_prefix</em>是所需的超新的前缀;它必须小于我们的前缀。</span><span class="yiyi-st" id="yiyi-242">必须设置<em>prefixlen_diff</em>和<em>new_prefix</em>中的一个且仅有一个。</span><span class="yiyi-st" id="yiyi-243">返回单个网络对象。</span></p><div class="highlight-python3"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">ip_network</span><span class="p">(</span><span class="s1">'192.0.2.0/24'</span><span class="p">)</span><span class="o">.</span><span class="n">supernet</span><span class="p">()</span>
|
||
<span class="go">IPv4Network('192.0.2.0/23')</span>
|
||
<span class="gp">>>> </span><span class="n">ip_network</span><span class="p">(</span><span class="s1">'192.0.2.0/24'</span><span class="p">)</span><span class="o">.</span><span class="n">supernet</span><span class="p">(</span><span class="n">prefixlen_diff</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
|
||
<span class="go">IPv4Network('192.0.0.0/22')</span>
|
||
<span class="gp">>>> </span><span class="n">ip_network</span><span class="p">(</span><span class="s1">'192.0.2.0/24'</span><span class="p">)</span><span class="o">.</span><span class="n">supernet</span><span class="p">(</span><span class="n">new_prefix</span><span class="o">=</span><span class="mi">20</span><span class="p">)</span>
|
||
<span class="go">IPv4Network('192.0.0.0/20')</span>
|
||
</pre></div></div></dd></dl><dl class="method"><dt id="ipaddress.IPv4Network.compare_networks"><span class="yiyi-st" id="yiyi-244"> <code class="descname">compare_networks</code><span class="sig-paren">(</span><em>other</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-245">将此网络与<em>其他</em>进行比较。</span><span class="yiyi-st" id="yiyi-246">在该比较中,仅考虑网络地址;主机位不是。</span><span class="yiyi-st" id="yiyi-247">返回<code class="docutils literal"><span class="pre">-1</span></code>,<code class="docutils literal"><span class="pre">0</span></code>或<code class="docutils literal"><span class="pre">1</span></code>。</span></p><div class="highlight-python3"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">ip_network</span><span class="p">(</span><span class="s1">'192.0.2.1/32'</span><span class="p">)</span><span class="o">.</span><span class="n">compare_networks</span><span class="p">(</span><span class="n">ip_network</span><span class="p">(</span><span class="s1">'192.0.2.2/32'</span><span class="p">))</span>
|
||
<span class="go">-1</span>
|
||
<span class="gp">>>> </span><span class="n">ip_network</span><span class="p">(</span><span class="s1">'192.0.2.1/32'</span><span class="p">)</span><span class="o">.</span><span class="n">compare_networks</span><span class="p">(</span><span class="n">ip_network</span><span class="p">(</span><span class="s1">'192.0.2.0/32'</span><span class="p">))</span>
|
||
<span class="go">1</span>
|
||
<span class="gp">>>> </span><span class="n">ip_network</span><span class="p">(</span><span class="s1">'192.0.2.1/32'</span><span class="p">)</span><span class="o">.</span><span class="n">compare_networks</span><span class="p">(</span><span class="n">ip_network</span><span class="p">(</span><span class="s1">'192.0.2.1/32'</span><span class="p">))</span>
|
||
<span class="go">0</span>
|
||
</pre></div></div></dd></dl></dd></dl><dl class="class"><dt id="ipaddress.IPv6Network"><span class="yiyi-st" id="yiyi-248"> <em class="property">class </em><code class="descclassname">ipaddress.</code><code class="descname">IPv6Network</code><span class="sig-paren">(</span><em>address</em>, <em>strict=True</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-249">构造IPv6网络定义。</span><span class="yiyi-st" id="yiyi-250"><em>地址</em>可以是以下之一:</span></p><ol class="arabic"><li><p class="first"><span class="yiyi-st" id="yiyi-251">由IP地址和可选掩码组成的字符串,以斜杠(<code class="docutils literal"><span class="pre">/</span></code>)分隔。</span><span class="yiyi-st" id="yiyi-252">IP地址是网络地址,掩码可以是单个数字,这意味着它是<em>前缀</em>或IPv6地址的字符串表示形式。</span><span class="yiyi-st" id="yiyi-253">如果是后者,则掩码被解释为<em>网络掩码</em>。</span><span class="yiyi-st" id="yiyi-254">如果没有提供掩码,则认为是<code class="docutils literal"><span class="pre">/128</span></code>。</span></p><p><span class="yiyi-st" id="yiyi-255">例如,以下<em>地址</em>规范是等效的:<code class="docutils literal"><span class="pre">2001:db00::0/24</span></code>和<code class="docutils literal"><span class="pre">2001:db00::0/ffff:ff00::</span></code></span></p></li><li><p class="first"><span class="yiyi-st" id="yiyi-256">适合128位的整数。</span><span class="yiyi-st" id="yiyi-257">这相当于单地址网络,网络地址为<em>地址</em>,掩码为<code class="docutils literal"><span class="pre">/128</span></code>。</span></p></li><li><p class="first"><span class="yiyi-st" id="yiyi-258">整数打包成长度为16,big-endian的<a class="reference internal" href="functions.html#bytes" title="bytes"><code class="xref py py-class docutils literal"><span class="pre">bytes</span></code></a>对象。</span><span class="yiyi-st" id="yiyi-259">解释类似于整数<em>地址</em>。</span></p></li><li><p class="first"><span class="yiyi-st" id="yiyi-260">地址描述和网络掩码的二元组,其中地址描述是字符串,128位整数,16字节打包整数或现有的IPv6地址对象;并且网络掩码是表示前缀长度的整数。</span></p></li></ol><p><span class="yiyi-st" id="yiyi-261">如果<em>地址</em>不是有效的IPv6地址,则会产生<a class="reference internal" href="#ipaddress.AddressValueError" title="ipaddress.AddressValueError"><code class="xref py py-exc docutils literal"><span class="pre">AddressValueError</span></code></a>。</span><span class="yiyi-st" id="yiyi-262">如果掩码对IPv6地址无效,则会引发<a class="reference internal" href="#ipaddress.NetmaskValueError" title="ipaddress.NetmaskValueError"><code class="xref py py-exc docutils literal"><span class="pre">NetmaskValueError</span></code></a>。</span></p><p><span class="yiyi-st" id="yiyi-263">如果<em>严格</em>为<code class="docutils literal"><span class="pre">True</span></code>且主机位在提供的地址中设置,则会引发<a class="reference internal" href="exceptions.html#ValueError" title="ValueError"><code class="xref py py-exc docutils literal"><span class="pre">ValueError</span></code></a>。</span><span class="yiyi-st" id="yiyi-264">否则,主机位被屏蔽以确定适当的网络地址。</span></p><div class="versionchanged"><p><span class="yiyi-st" id="yiyi-265"><span class="versionmodified">在版本3.5中已更改:</span>添加了<em>地址</em>构造函数参数的二元组格式。</span></p></div><dl class="attribute"><dt id="ipaddress.IPv6Network.version"><span class="yiyi-st" id="yiyi-266"> <code class="descname">version</code></span></dt><dd></dd></dl><dl class="attribute"><dt id="ipaddress.IPv6Network.max_prefixlen"><span class="yiyi-st" id="yiyi-267"> <code class="descname">max_prefixlen</code></span></dt><dd></dd></dl><dl class="attribute"><dt id="ipaddress.IPv6Network.is_multicast"><span class="yiyi-st" id="yiyi-268"> <code class="descname">is_multicast</code></span></dt><dd></dd></dl><dl class="attribute"><dt id="ipaddress.IPv6Network.is_private"><span class="yiyi-st" id="yiyi-269"> <code class="descname">is_private</code></span></dt><dd></dd></dl><dl class="attribute"><dt id="ipaddress.IPv6Network.is_unspecified"><span class="yiyi-st" id="yiyi-270"> <code class="descname">is_unspecified</code></span></dt><dd></dd></dl><dl class="attribute"><dt id="ipaddress.IPv6Network.is_reserved"><span class="yiyi-st" id="yiyi-271"> <code class="descname">is_reserved</code></span></dt><dd></dd></dl><dl class="attribute"><dt id="ipaddress.IPv6Network.is_loopback"><span class="yiyi-st" id="yiyi-272"> <code class="descname">is_loopback</code></span></dt><dd></dd></dl><dl class="attribute"><dt id="ipaddress.IPv6Network.is_link_local"><span class="yiyi-st" id="yiyi-273"> <code class="descname">is_link_local</code></span></dt><dd></dd></dl><dl class="attribute"><dt id="ipaddress.IPv6Network.network_address"><span class="yiyi-st" id="yiyi-274"> <code class="descname">network_address</code></span></dt><dd></dd></dl><dl class="attribute"><dt id="ipaddress.IPv6Network.broadcast_address"><span class="yiyi-st" id="yiyi-275"> <code class="descname">broadcast_address</code></span></dt><dd></dd></dl><dl class="attribute"><dt id="ipaddress.IPv6Network.hostmask"><span class="yiyi-st" id="yiyi-276"> <code class="descname">hostmask</code></span></dt><dd></dd></dl><dl class="attribute"><dt id="ipaddress.IPv6Network.with_prefixlen"><span class="yiyi-st" id="yiyi-277"> <code class="descname">with_prefixlen</code></span></dt><dd></dd></dl><dl class="attribute"><dt id="ipaddress.IPv6Network.compressed"><span class="yiyi-st" id="yiyi-278"> <code class="descname">compressed</code></span></dt><dd></dd></dl><dl class="attribute"><dt id="ipaddress.IPv6Network.exploded"><span class="yiyi-st" id="yiyi-279"> <code class="descname">exploded</code></span></dt><dd></dd></dl><dl class="attribute"><dt id="ipaddress.IPv6Network.with_netmask"><span class="yiyi-st" id="yiyi-280"> <code class="descname">with_netmask</code></span></dt><dd></dd></dl><dl class="attribute"><dt id="ipaddress.IPv6Network.with_hostmask"><span class="yiyi-st" id="yiyi-281"> <code class="descname">with_hostmask</code></span></dt><dd></dd></dl><dl class="attribute"><dt id="ipaddress.IPv6Network.num_addresses"><span class="yiyi-st" id="yiyi-282"> <code class="descname">num_addresses</code></span></dt><dd></dd></dl><dl class="attribute"><dt id="ipaddress.IPv6Network.prefixlen"><span class="yiyi-st" id="yiyi-283"> <code class="descname">prefixlen</code></span></dt><dd></dd></dl><dl class="method"><dt id="ipaddress.IPv6Network.hosts"><span class="yiyi-st" id="yiyi-284"> <code class="descname">hosts</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd></dd></dl><dl class="method"><dt id="ipaddress.IPv6Network.overlaps"><span class="yiyi-st" id="yiyi-285"> <code class="descname">overlaps</code><span class="sig-paren">(</span><em>other</em><span class="sig-paren">)</span></span></dt><dd></dd></dl><dl class="method"><dt id="ipaddress.IPv6Network.address_exclude"><span class="yiyi-st" id="yiyi-286"> <code class="descname">address_exclude</code><span class="sig-paren">(</span><em>network</em><span class="sig-paren">)</span></span></dt><dd></dd></dl><dl class="method"><dt id="ipaddress.IPv6Network.subnets"><span class="yiyi-st" id="yiyi-287"> <code class="descname">subnets</code><span class="sig-paren">(</span><em>prefixlen_diff=1</em>, <em>new_prefix=None</em><span class="sig-paren">)</span></span></dt><dd></dd></dl><dl class="method"><dt id="ipaddress.IPv6Network.supernet"><span class="yiyi-st" id="yiyi-288"> <code class="descname">supernet</code><span class="sig-paren">(</span><em>prefixlen_diff=1</em>, <em>new_prefix=None</em><span class="sig-paren">)</span></span></dt><dd></dd></dl><dl class="method"><dt id="ipaddress.IPv6Network.compare_networks"><span class="yiyi-st" id="yiyi-289"> <code class="descname">compare_networks</code><span class="sig-paren">(</span><em>other</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-290">请参阅<a class="reference internal" href="#ipaddress.IPv4Network" title="ipaddress.IPv4Network"><code class="xref py py-class docutils literal"><span class="pre">IPv4Network</span></code></a>中的相应属性文档</span></p></dd></dl><dl class="attribute"><dt id="ipaddress.IPv6Network.is_site_local"><span class="yiyi-st" id="yiyi-291"> <code class="descname">is_site_local</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-292">如果对于网络地址和广播地址都是真的,则这些属性对于网络作为整体是真实的</span></p></dd></dl></dd></dl></div><div class="section" id="id1"><h3><span class="yiyi-st" id="yiyi-293">21.28.3.3. </span><span class="yiyi-st" id="yiyi-294">Operators</span></h3><p><span class="yiyi-st" id="yiyi-295">网络对象支持一些运算符。</span><span class="yiyi-st" id="yiyi-296">除非另有说明,操作员只能在兼容对象之间应用。</span><span class="yiyi-st" id="yiyi-297">IPv4与IPv4,IPv6与IPv6)。</span></p><div class="section" id="logical-operators"><h4><span class="yiyi-st" id="yiyi-298">21.28.3.3.1. </span><span class="yiyi-st" id="yiyi-299">Logical operators</span></h4><p><span class="yiyi-st" id="yiyi-300">网络对象可以与通常的一组逻辑运算符进行比较,类似于地址对象。</span></p></div><div class="section" id="iteration"><h4><span class="yiyi-st" id="yiyi-301">21.28.3.3.2. </span><span class="yiyi-st" id="yiyi-302">Iteration</span></h4><p><span class="yiyi-st" id="yiyi-303">可以迭代网络对象以列出属于网络的所有地址。</span><span class="yiyi-st" id="yiyi-304">对于迭代,会返回<em>所有</em>主机,包括不可用的主机(对于可用主机,请使用<a class="reference internal" href="#ipaddress.IPv4Network.hosts" title="ipaddress.IPv4Network.hosts"><code class="xref py py-meth docutils literal"><span class="pre">hosts()</span></code></a>方法)。</span><span class="yiyi-st" id="yiyi-305">一个例子:</span></p><div class="highlight-python3"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="k">for</span> <span class="n">addr</span> <span class="ow">in</span> <span class="n">IPv4Network</span><span class="p">(</span><span class="s1">'192.0.2.0/28'</span><span class="p">):</span>
|
||
<span class="gp">... </span> <span class="n">addr</span>
|
||
<span class="gp">...</span>
|
||
<span class="go">IPv4Address('192.0.2.0')</span>
|
||
<span class="go">IPv4Address('192.0.2.1')</span>
|
||
<span class="go">IPv4Address('192.0.2.2')</span>
|
||
<span class="go">IPv4Address('192.0.2.3')</span>
|
||
<span class="go">IPv4Address('192.0.2.4')</span>
|
||
<span class="go">IPv4Address('192.0.2.5')</span>
|
||
<span class="go">IPv4Address('192.0.2.6')</span>
|
||
<span class="go">IPv4Address('192.0.2.7')</span>
|
||
<span class="go">IPv4Address('192.0.2.8')</span>
|
||
<span class="go">IPv4Address('192.0.2.9')</span>
|
||
<span class="go">IPv4Address('192.0.2.10')</span>
|
||
<span class="go">IPv4Address('192.0.2.11')</span>
|
||
<span class="go">IPv4Address('192.0.2.12')</span>
|
||
<span class="go">IPv4Address('192.0.2.13')</span>
|
||
<span class="go">IPv4Address('192.0.2.14')</span>
|
||
<span class="go">IPv4Address('192.0.2.15')</span>
|
||
</pre></div></div></div><div class="section" id="networks-as-containers-of-addresses"><h4><span class="yiyi-st" id="yiyi-306">21.28.3.3.3. </span><span class="yiyi-st" id="yiyi-307">Networks as containers of addresses</span></h4><p><span class="yiyi-st" id="yiyi-308">网络对象可以充当地址的容器。</span><span class="yiyi-st" id="yiyi-309">一些例子:</span></p><div class="highlight-python3"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">IPv4Network</span><span class="p">(</span><span class="s1">'192.0.2.0/28'</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
|
||
<span class="go">IPv4Address('192.0.2.0')</span>
|
||
<span class="gp">>>> </span><span class="n">IPv4Network</span><span class="p">(</span><span class="s1">'192.0.2.0/28'</span><span class="p">)[</span><span class="mi">15</span><span class="p">]</span>
|
||
<span class="go">IPv4Address('192.0.2.15')</span>
|
||
<span class="gp">>>> </span><span class="n">IPv4Address</span><span class="p">(</span><span class="s1">'192.0.2.6'</span><span class="p">)</span> <span class="ow">in</span> <span class="n">IPv4Network</span><span class="p">(</span><span class="s1">'192.0.2.0/28'</span><span class="p">)</span>
|
||
<span class="go">True</span>
|
||
<span class="gp">>>> </span><span class="n">IPv4Address</span><span class="p">(</span><span class="s1">'192.0.3.6'</span><span class="p">)</span> <span class="ow">in</span> <span class="n">IPv4Network</span><span class="p">(</span><span class="s1">'192.0.2.0/28'</span><span class="p">)</span>
|
||
<span class="go">False</span>
|
||
</pre></div></div></div></div></div><div class="section" id="interface-objects"><h2><span class="yiyi-st" id="yiyi-310">21.28.4. </span><span class="yiyi-st" id="yiyi-311">Interface objects</span></h2><dl class="class"><dt id="ipaddress.IPv4Interface"><span class="yiyi-st" id="yiyi-312"> <em class="property">class </em><code class="descclassname">ipaddress.</code><code class="descname">IPv4Interface</code><span class="sig-paren">(</span><em>address</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-313">构造IPv4接口。</span><span class="yiyi-st" id="yiyi-314"><em>address</em>的含义与<a class="reference internal" href="#ipaddress.IPv4Network" title="ipaddress.IPv4Network"><code class="xref py py-class docutils literal"><span class="pre">IPv4Network</span></code></a>的构造函数中的相同,除了始终接受任意主机地址。</span></p><p><span class="yiyi-st" id="yiyi-315"><a class="reference internal" href="#ipaddress.IPv4Interface" title="ipaddress.IPv4Interface"><code class="xref py py-class docutils literal"><span class="pre">IPv4Interface</span></code></a>是<a class="reference internal" href="#ipaddress.IPv4Address" title="ipaddress.IPv4Address"><code class="xref py py-class docutils literal"><span class="pre">IPv4Address</span></code></a>的子类,因此它继承了该类的所有属性。</span><span class="yiyi-st" id="yiyi-316">此外,还有以下属性可用:</span></p><dl class="attribute"><dt id="ipaddress.IPv4Interface.ip"><span class="yiyi-st" id="yiyi-317"> <code class="descname">ip</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-318">没有网络信息的地址(<a class="reference internal" href="#ipaddress.IPv4Address" title="ipaddress.IPv4Address"><code class="xref py py-class docutils literal"><span class="pre">IPv4Address</span></code></a>)。</span></p><div class="highlight-python3"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">interface</span> <span class="o">=</span> <span class="n">IPv4Interface</span><span class="p">(</span><span class="s1">'192.0.2.5/24'</span><span class="p">)</span>
|
||
<span class="gp">>>> </span><span class="n">interface</span><span class="o">.</span><span class="n">ip</span>
|
||
<span class="go">IPv4Address('192.0.2.5')</span>
|
||
</pre></div></div></dd></dl><dl class="attribute"><dt id="ipaddress.IPv4Interface.network"><span class="yiyi-st" id="yiyi-319"> <code class="descname">network</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-320">此接口所属的网络(<a class="reference internal" href="#ipaddress.IPv4Network" title="ipaddress.IPv4Network"><code class="xref py py-class docutils literal"><span class="pre">IPv4Network</span></code></a>)。</span></p><div class="highlight-python3"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">interface</span> <span class="o">=</span> <span class="n">IPv4Interface</span><span class="p">(</span><span class="s1">'192.0.2.5/24'</span><span class="p">)</span>
|
||
<span class="gp">>>> </span><span class="n">interface</span><span class="o">.</span><span class="n">network</span>
|
||
<span class="go">IPv4Network('192.0.2.0/24')</span>
|
||
</pre></div></div></dd></dl><dl class="attribute"><dt id="ipaddress.IPv4Interface.with_prefixlen"><span class="yiyi-st" id="yiyi-321"> <code class="descname">with_prefixlen</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-322">带有掩码的接口的字符串表示形式,以前缀符号表示。</span></p><div class="highlight-python3"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">interface</span> <span class="o">=</span> <span class="n">IPv4Interface</span><span class="p">(</span><span class="s1">'192.0.2.5/24'</span><span class="p">)</span>
|
||
<span class="gp">>>> </span><span class="n">interface</span><span class="o">.</span><span class="n">with_prefixlen</span>
|
||
<span class="go">'192.0.2.5/24'</span>
|
||
</pre></div></div></dd></dl><dl class="attribute"><dt id="ipaddress.IPv4Interface.with_netmask"><span class="yiyi-st" id="yiyi-323"> <code class="descname">with_netmask</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-324">与网络的接口的字符串表示作为网络掩码。</span></p><div class="highlight-python3"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">interface</span> <span class="o">=</span> <span class="n">IPv4Interface</span><span class="p">(</span><span class="s1">'192.0.2.5/24'</span><span class="p">)</span>
|
||
<span class="gp">>>> </span><span class="n">interface</span><span class="o">.</span><span class="n">with_netmask</span>
|
||
<span class="go">'192.0.2.5/255.255.255.0'</span>
|
||
</pre></div></div></dd></dl><dl class="attribute"><dt id="ipaddress.IPv4Interface.with_hostmask"><span class="yiyi-st" id="yiyi-325"> <code class="descname">with_hostmask</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-326">以网络作为主机掩码的接口的字符串表示。</span></p><div class="highlight-python3"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">interface</span> <span class="o">=</span> <span class="n">IPv4Interface</span><span class="p">(</span><span class="s1">'192.0.2.5/24'</span><span class="p">)</span>
|
||
<span class="gp">>>> </span><span class="n">interface</span><span class="o">.</span><span class="n">with_hostmask</span>
|
||
<span class="go">'192.0.2.5/0.0.0.255'</span>
|
||
</pre></div></div></dd></dl></dd></dl><dl class="class"><dt id="ipaddress.IPv6Interface"><span class="yiyi-st" id="yiyi-327"> <em class="property">class </em><code class="descclassname">ipaddress.</code><code class="descname">IPv6Interface</code><span class="sig-paren">(</span><em>address</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-328">构造IPv6接口。</span><span class="yiyi-st" id="yiyi-329"><em>地址</em>的含义与<a class="reference internal" href="#ipaddress.IPv6Network" title="ipaddress.IPv6Network"><code class="xref py py-class docutils literal"><span class="pre">IPv6Network</span></code></a>的构造函数相同,除了始终接受任意主机地址。</span></p><p><span class="yiyi-st" id="yiyi-330"><a class="reference internal" href="#ipaddress.IPv6Interface" title="ipaddress.IPv6Interface"><code class="xref py py-class docutils literal"><span class="pre">IPv6Interface</span></code></a>是<a class="reference internal" href="#ipaddress.IPv6Address" title="ipaddress.IPv6Address"><code class="xref py py-class docutils literal"><span class="pre">IPv6Address</span></code></a>的子类,因此它继承了该类的所有属性。</span><span class="yiyi-st" id="yiyi-331">此外,还有以下属性可用:</span></p><dl class="attribute"><dt id="ipaddress.IPv6Interface.ip"><span class="yiyi-st" id="yiyi-332"> <code class="descname">ip</code></span></dt><dd></dd></dl><dl class="attribute"><dt id="ipaddress.IPv6Interface.network"><span class="yiyi-st" id="yiyi-333"> <code class="descname">network</code></span></dt><dd></dd></dl><dl class="attribute"><dt id="ipaddress.IPv6Interface.with_prefixlen"><span class="yiyi-st" id="yiyi-334"> <code class="descname">with_prefixlen</code></span></dt><dd></dd></dl><dl class="attribute"><dt id="ipaddress.IPv6Interface.with_netmask"><span class="yiyi-st" id="yiyi-335"> <code class="descname">with_netmask</code></span></dt><dd></dd></dl><dl class="attribute"><dt id="ipaddress.IPv6Interface.with_hostmask"><span class="yiyi-st" id="yiyi-336"> <code class="descname">with_hostmask</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-337">请参阅<a class="reference internal" href="#ipaddress.IPv4Interface" title="ipaddress.IPv4Interface"><code class="xref py py-class docutils literal"><span class="pre">IPv4Interface</span></code></a>中的相应属性文档。</span></p></dd></dl></dd></dl></div><div class="section" id="other-module-level-functions"><h2><span class="yiyi-st" id="yiyi-338">21.28.5. </span><span class="yiyi-st" id="yiyi-339">Other Module Level Functions</span></h2><p><span class="yiyi-st" id="yiyi-340">该模块还提供以下模块级功能:</span></p><dl class="function"><dt id="ipaddress.v4_int_to_packed"><span class="yiyi-st" id="yiyi-341"> <code class="descclassname">ipaddress.</code><code class="descname">v4_int_to_packed</code><span class="sig-paren">(</span><em>address</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-342">将地址表示为网络(big-endian)顺序中的4个打包字节。</span><span class="yiyi-st" id="yiyi-343"><em>address</em>是IPv4 IP地址的整数表示形式。</span><span class="yiyi-st" id="yiyi-344">如果整数为负或太大而不是IPv4 IP地址,则会引发<a class="reference internal" href="exceptions.html#ValueError" title="ValueError"><code class="xref py py-exc docutils literal"><span class="pre">ValueError</span></code></a>。</span></p><div class="highlight-python3"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">ipaddress</span><span class="o">.</span><span class="n">ip_address</span><span class="p">(</span><span class="mi">3221225985</span><span class="p">)</span>
|
||
<span class="go">IPv4Address('192.0.2.1')</span>
|
||
<span class="gp">>>> </span><span class="n">ipaddress</span><span class="o">.</span><span class="n">v4_int_to_packed</span><span class="p">(</span><span class="mi">3221225985</span><span class="p">)</span>
|
||
<span class="go">b'\xc0\x00\x02\x01'</span>
|
||
</pre></div></div></dd></dl><dl class="function"><dt id="ipaddress.v6_int_to_packed"><span class="yiyi-st" id="yiyi-345"> <code class="descclassname">ipaddress.</code><code class="descname">v6_int_to_packed</code><span class="sig-paren">(</span><em>address</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-346">将地址表示为网络(big-endian)顺序中的16个打包字节。</span><span class="yiyi-st" id="yiyi-347"><em>address</em>是IPv6 IP地址的整数表示形式。</span><span class="yiyi-st" id="yiyi-348">如果整数为负或太大而不是IPv6 IP地址,则会引发<a class="reference internal" href="exceptions.html#ValueError" title="ValueError"><code class="xref py py-exc docutils literal"><span class="pre">ValueError</span></code></a>。</span></p></dd></dl><dl class="function"><dt id="ipaddress.summarize_address_range"><span class="yiyi-st" id="yiyi-349"> <code class="descclassname">ipaddress.</code><code class="descname">summarize_address_range</code><span class="sig-paren">(</span><em>first</em>, <em>last</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-350">返回给定第一个和最后一个IP地址的汇总网络范围的迭代器。</span><span class="yiyi-st" id="yiyi-351"><em>first</em> is the first <a class="reference internal" href="#ipaddress.IPv4Address" title="ipaddress.IPv4Address"><code class="xref py py-class docutils literal"><span class="pre">IPv4Address</span></code></a> or <a class="reference internal" href="#ipaddress.IPv6Address" title="ipaddress.IPv6Address"><code class="xref py py-class docutils literal"><span class="pre">IPv6Address</span></code></a> in the range and <em>last</em> is the last <a class="reference internal" href="#ipaddress.IPv4Address" title="ipaddress.IPv4Address"><code class="xref py py-class docutils literal"><span class="pre">IPv4Address</span></code></a> or <a class="reference internal" href="#ipaddress.IPv6Address" title="ipaddress.IPv6Address"><code class="xref py py-class docutils literal"><span class="pre">IPv6Address</span></code></a> in the range. </span><span class="yiyi-st" id="yiyi-352">如果<em>第一</em>或<em>最后</em>不是IP地址或不是相同版本,则会引发<a class="reference internal" href="exceptions.html#TypeError" title="TypeError"><code class="xref py py-exc docutils literal"><span class="pre">TypeError</span></code></a>。</span><span class="yiyi-st" id="yiyi-353">如果<em>最后</em>不大于<em>第一</em>或如果<em>第一</em>地址版本不是4或6,则会产生<a class="reference internal" href="exceptions.html#ValueError" title="ValueError"><code class="xref py py-exc docutils literal"><span class="pre">ValueError</span></code></a></span></p><div class="highlight-python3"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="p">[</span><span class="n">ipaddr</span> <span class="k">for</span> <span class="n">ipaddr</span> <span class="ow">in</span> <span class="n">ipaddress</span><span class="o">.</span><span class="n">summarize_address_range</span><span class="p">(</span>
|
||
<span class="gp">... </span> <span class="n">ipaddress</span><span class="o">.</span><span class="n">IPv4Address</span><span class="p">(</span><span class="s1">'192.0.2.0'</span><span class="p">),</span>
|
||
<span class="gp">... </span> <span class="n">ipaddress</span><span class="o">.</span><span class="n">IPv4Address</span><span class="p">(</span><span class="s1">'192.0.2.130'</span><span class="p">))]</span>
|
||
<span class="go">[IPv4Network('192.0.2.0/25'), IPv4Network('192.0.2.128/31'), IPv4Network('192.0.2.130/32')]</span>
|
||
</pre></div></div></dd></dl><dl class="function"><dt id="ipaddress.collapse_addresses"><span class="yiyi-st" id="yiyi-354"> <code class="descclassname">ipaddress.</code><code class="descname">collapse_addresses</code><span class="sig-paren">(</span><em>addresses</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-355">返回折叠的<a class="reference internal" href="#ipaddress.IPv4Network" title="ipaddress.IPv4Network"><code class="xref py py-class docutils literal"><span class="pre">IPv4Network</span></code></a>或<a class="reference internal" href="#ipaddress.IPv6Network" title="ipaddress.IPv6Network"><code class="xref py py-class docutils literal"><span class="pre">IPv6Network</span></code></a>对象的迭代器。</span><span class="yiyi-st" id="yiyi-356"><em>addresses</em> is an iterator of <a class="reference internal" href="#ipaddress.IPv4Network" title="ipaddress.IPv4Network"><code class="xref py py-class docutils literal"><span class="pre">IPv4Network</span></code></a> or <a class="reference internal" href="#ipaddress.IPv6Network" title="ipaddress.IPv6Network"><code class="xref py py-class docutils literal"><span class="pre">IPv6Network</span></code></a> objects. </span><span class="yiyi-st" id="yiyi-357">如果<em>地址</em>包含混合版本对象,则会引发<a class="reference internal" href="exceptions.html#TypeError" title="TypeError"><code class="xref py py-exc docutils literal"><span class="pre">TypeError</span></code></a>。</span></p><div class="highlight-python3"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="p">[</span><span class="n">ipaddr</span> <span class="k">for</span> <span class="n">ipaddr</span> <span class="ow">in</span>
|
||
<span class="gp">... </span><span class="n">ipaddress</span><span class="o">.</span><span class="n">collapse_addresses</span><span class="p">([</span><span class="n">ipaddress</span><span class="o">.</span><span class="n">IPv4Network</span><span class="p">(</span><span class="s1">'192.0.2.0/25'</span><span class="p">),</span>
|
||
<span class="gp">... </span><span class="n">ipaddress</span><span class="o">.</span><span class="n">IPv4Network</span><span class="p">(</span><span class="s1">'192.0.2.128/25'</span><span class="p">)])]</span>
|
||
<span class="go">[IPv4Network('192.0.2.0/24')]</span>
|
||
</pre></div></div></dd></dl><dl class="function"><dt id="ipaddress.get_mixed_type_key"><span class="yiyi-st" id="yiyi-358"> <code class="descclassname">ipaddress.</code><code class="descname">get_mixed_type_key</code><span class="sig-paren">(</span><em>obj</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-359">返回适用于在网络和地址之间排序的键。</span><span class="yiyi-st" id="yiyi-360">地址和网络对象默认不可排序;他们根本不同,所以表达式:</span></p><div class="highlight-python3"><div class="highlight"><pre><span></span><span class="n">IPv4Address</span><span class="p">(</span><span class="s1">'192.0.2.0'</span><span class="p">)</span> <span class="o"><=</span> <span class="n">IPv4Network</span><span class="p">(</span><span class="s1">'192.0.2.0/24'</span><span class="p">)</span>
|
||
</pre></div></div><p><span class="yiyi-st" id="yiyi-361">没有意义。</span><span class="yiyi-st" id="yiyi-362">但有些时候,您可能希望<a class="reference internal" href="#module-ipaddress" title="ipaddress: IPv4/IPv6 manipulation library."><code class="xref py py-mod docutils literal"><span class="pre">ipaddress</span></code></a>排序这些反正。</span><span class="yiyi-st" id="yiyi-363">如果您需要这样做,您可以使用此功能作为<a class="reference internal" href="functions.html#sorted" title="sorted"><code class="xref py py-func docutils literal"><span class="pre">sorted()</span></code></a>的<code class="docutils literal"><span class="pre">key</span></code>参数。</span></p><p><span class="yiyi-st" id="yiyi-364"><em>obj</em>是网络或地址对象。</span></p></dd></dl></div><div class="section" id="custom-exceptions"><h2><span class="yiyi-st" id="yiyi-365">21.28.6. </span><span class="yiyi-st" id="yiyi-366">Custom Exceptions</span></h2><p><span class="yiyi-st" id="yiyi-367">为了支持来自类构造函数的更具体的错误报告,模块定义了以下异常:</span></p><dl class="exception"><dt id="ipaddress.AddressValueError"><span class="yiyi-st" id="yiyi-368"> <em class="property">exception </em><code class="descclassname">ipaddress.</code><code class="descname">AddressValueError</code><span class="sig-paren">(</span><em>ValueError</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-369">与地址相关的任何值错误。</span></p></dd></dl><dl class="exception"><dt id="ipaddress.NetmaskValueError"><span class="yiyi-st" id="yiyi-370"> <em class="property">exception </em><code class="descclassname">ipaddress.</code><code class="descname">NetmaskValueError</code><span class="sig-paren">(</span><em>ValueError</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-371">与网络掩码相关的任何值错误。</span></p></dd></dl></div></div></div> |