17db96d56Sopenharmony_ci:mod:`ipaddress` --- IPv4/IPv6 manipulation library
27db96d56Sopenharmony_ci===================================================
37db96d56Sopenharmony_ci
47db96d56Sopenharmony_ci.. module:: ipaddress
57db96d56Sopenharmony_ci   :synopsis: IPv4/IPv6 manipulation library.
67db96d56Sopenharmony_ci
77db96d56Sopenharmony_ci.. moduleauthor:: Peter Moody
87db96d56Sopenharmony_ci
97db96d56Sopenharmony_ci**Source code:** :source:`Lib/ipaddress.py`
107db96d56Sopenharmony_ci
117db96d56Sopenharmony_ci--------------
127db96d56Sopenharmony_ci
137db96d56Sopenharmony_ci:mod:`ipaddress` provides the capabilities to create, manipulate and
147db96d56Sopenharmony_cioperate on IPv4 and IPv6 addresses and networks.
157db96d56Sopenharmony_ci
167db96d56Sopenharmony_ciThe functions and classes in this module make it straightforward to handle
177db96d56Sopenharmony_civarious tasks related to IP addresses, including checking whether or not two
187db96d56Sopenharmony_cihosts are on the same subnet, iterating over all hosts in a particular
197db96d56Sopenharmony_cisubnet, checking whether or not a string represents a valid IP address or
207db96d56Sopenharmony_cinetwork definition, and so on.
217db96d56Sopenharmony_ci
227db96d56Sopenharmony_ciThis is the full module API reference—for an overview and introduction, see
237db96d56Sopenharmony_ci:ref:`ipaddress-howto`.
247db96d56Sopenharmony_ci
257db96d56Sopenharmony_ci.. versionadded:: 3.3
267db96d56Sopenharmony_ci
277db96d56Sopenharmony_ci.. testsetup::
287db96d56Sopenharmony_ci
297db96d56Sopenharmony_ci   import ipaddress
307db96d56Sopenharmony_ci   from ipaddress import (
317db96d56Sopenharmony_ci       ip_network, IPv4Address, IPv4Interface, IPv4Network,
327db96d56Sopenharmony_ci   )
337db96d56Sopenharmony_ci
347db96d56Sopenharmony_ciConvenience factory functions
357db96d56Sopenharmony_ci-----------------------------
367db96d56Sopenharmony_ci
377db96d56Sopenharmony_ciThe :mod:`ipaddress` module provides factory functions to conveniently create
387db96d56Sopenharmony_ciIP addresses, networks and interfaces:
397db96d56Sopenharmony_ci
407db96d56Sopenharmony_ci.. function:: ip_address(address)
417db96d56Sopenharmony_ci
427db96d56Sopenharmony_ci   Return an :class:`IPv4Address` or :class:`IPv6Address` object depending on
437db96d56Sopenharmony_ci   the IP address passed as argument.  Either IPv4 or IPv6 addresses may be
447db96d56Sopenharmony_ci   supplied; integers less than ``2**32`` will be considered to be IPv4 by default.
457db96d56Sopenharmony_ci   A :exc:`ValueError` is raised if *address* does not represent a valid IPv4
467db96d56Sopenharmony_ci   or IPv6 address.
477db96d56Sopenharmony_ci
487db96d56Sopenharmony_ci   >>> ipaddress.ip_address('192.168.0.1')
497db96d56Sopenharmony_ci   IPv4Address('192.168.0.1')
507db96d56Sopenharmony_ci   >>> ipaddress.ip_address('2001:db8::')
517db96d56Sopenharmony_ci   IPv6Address('2001:db8::')
527db96d56Sopenharmony_ci
537db96d56Sopenharmony_ci
547db96d56Sopenharmony_ci.. function:: ip_network(address, strict=True)
557db96d56Sopenharmony_ci
567db96d56Sopenharmony_ci   Return an :class:`IPv4Network` or :class:`IPv6Network` object depending on
577db96d56Sopenharmony_ci   the IP address passed as argument.  *address* is a string or integer
587db96d56Sopenharmony_ci   representing the IP network.  Either IPv4 or IPv6 networks may be supplied;
597db96d56Sopenharmony_ci   integers less than ``2**32`` will be considered to be IPv4 by default.  *strict*
607db96d56Sopenharmony_ci   is passed to :class:`IPv4Network` or :class:`IPv6Network` constructor.  A
617db96d56Sopenharmony_ci   :exc:`ValueError` is raised if *address* does not represent a valid IPv4 or
627db96d56Sopenharmony_ci   IPv6 address, or if the network has host bits set.
637db96d56Sopenharmony_ci
647db96d56Sopenharmony_ci   >>> ipaddress.ip_network('192.168.0.0/28')
657db96d56Sopenharmony_ci   IPv4Network('192.168.0.0/28')
667db96d56Sopenharmony_ci
677db96d56Sopenharmony_ci
687db96d56Sopenharmony_ci.. function:: ip_interface(address)
697db96d56Sopenharmony_ci
707db96d56Sopenharmony_ci   Return an :class:`IPv4Interface` or :class:`IPv6Interface` object depending
717db96d56Sopenharmony_ci   on the IP address passed as argument.  *address* is a string or integer
727db96d56Sopenharmony_ci   representing the IP address.  Either IPv4 or IPv6 addresses may be supplied;
737db96d56Sopenharmony_ci   integers less than ``2**32`` will be considered to be IPv4 by default.  A
747db96d56Sopenharmony_ci   :exc:`ValueError` is raised if *address* does not represent a valid IPv4 or
757db96d56Sopenharmony_ci   IPv6 address.
767db96d56Sopenharmony_ci
777db96d56Sopenharmony_ciOne downside of these convenience functions is that the need to handle both
787db96d56Sopenharmony_ciIPv4 and IPv6 formats means that error messages provide minimal
797db96d56Sopenharmony_ciinformation on the precise error, as the functions don't know whether the
807db96d56Sopenharmony_ciIPv4 or IPv6 format was intended. More detailed error reporting can be
817db96d56Sopenharmony_ciobtained by calling the appropriate version specific class constructors
827db96d56Sopenharmony_cidirectly.
837db96d56Sopenharmony_ci
847db96d56Sopenharmony_ci
857db96d56Sopenharmony_ciIP Addresses
867db96d56Sopenharmony_ci------------
877db96d56Sopenharmony_ci
887db96d56Sopenharmony_ciAddress objects
897db96d56Sopenharmony_ci^^^^^^^^^^^^^^^
907db96d56Sopenharmony_ci
917db96d56Sopenharmony_ciThe :class:`IPv4Address` and :class:`IPv6Address` objects share a lot of common
927db96d56Sopenharmony_ciattributes.  Some attributes that are only meaningful for IPv6 addresses are
937db96d56Sopenharmony_cialso implemented by :class:`IPv4Address` objects, in order to make it easier to
947db96d56Sopenharmony_ciwrite code that handles both IP versions correctly.  Address objects are
957db96d56Sopenharmony_ci:term:`hashable`, so they can be used as keys in dictionaries.
967db96d56Sopenharmony_ci
977db96d56Sopenharmony_ci.. class:: IPv4Address(address)
987db96d56Sopenharmony_ci
997db96d56Sopenharmony_ci   Construct an IPv4 address.  An :exc:`AddressValueError` is raised if
1007db96d56Sopenharmony_ci   *address* is not a valid IPv4 address.
1017db96d56Sopenharmony_ci
1027db96d56Sopenharmony_ci   The following constitutes a valid IPv4 address:
1037db96d56Sopenharmony_ci
1047db96d56Sopenharmony_ci   1. A string in decimal-dot notation, consisting of four decimal integers in
1057db96d56Sopenharmony_ci      the inclusive range 0--255, separated by dots (e.g. ``192.168.0.1``). Each
1067db96d56Sopenharmony_ci      integer represents an octet (byte) in the address. Leading zeroes are
1077db96d56Sopenharmony_ci      not tolerated to prevent confusion with octal notation.
1087db96d56Sopenharmony_ci   2. An integer that fits into 32 bits.
1097db96d56Sopenharmony_ci   3. An integer packed into a :class:`bytes` object of length 4 (most
1107db96d56Sopenharmony_ci      significant octet first).
1117db96d56Sopenharmony_ci
1127db96d56Sopenharmony_ci   >>> ipaddress.IPv4Address('192.168.0.1')
1137db96d56Sopenharmony_ci   IPv4Address('192.168.0.1')
1147db96d56Sopenharmony_ci   >>> ipaddress.IPv4Address(3232235521)
1157db96d56Sopenharmony_ci   IPv4Address('192.168.0.1')
1167db96d56Sopenharmony_ci   >>> ipaddress.IPv4Address(b'\xC0\xA8\x00\x01')
1177db96d56Sopenharmony_ci   IPv4Address('192.168.0.1')
1187db96d56Sopenharmony_ci
1197db96d56Sopenharmony_ci   .. versionchanged:: 3.8
1207db96d56Sopenharmony_ci
1217db96d56Sopenharmony_ci      Leading zeros are tolerated, even in ambiguous cases that look like
1227db96d56Sopenharmony_ci      octal notation.
1237db96d56Sopenharmony_ci
1247db96d56Sopenharmony_ci   .. versionchanged:: 3.10
1257db96d56Sopenharmony_ci
1267db96d56Sopenharmony_ci      Leading zeros are no longer tolerated and are treated as an error.
1277db96d56Sopenharmony_ci      IPv4 address strings are now parsed as strict as glibc
1287db96d56Sopenharmony_ci      :func:`~socket.inet_pton`.
1297db96d56Sopenharmony_ci
1307db96d56Sopenharmony_ci   .. versionchanged:: 3.9.5
1317db96d56Sopenharmony_ci
1327db96d56Sopenharmony_ci      The above change was also included in Python 3.9 starting with
1337db96d56Sopenharmony_ci      version 3.9.5.
1347db96d56Sopenharmony_ci
1357db96d56Sopenharmony_ci   .. versionchanged:: 3.8.12
1367db96d56Sopenharmony_ci
1377db96d56Sopenharmony_ci      The above change was also included in Python 3.8 starting with
1387db96d56Sopenharmony_ci      version 3.8.12.
1397db96d56Sopenharmony_ci
1407db96d56Sopenharmony_ci   .. attribute:: version
1417db96d56Sopenharmony_ci
1427db96d56Sopenharmony_ci      The appropriate version number: ``4`` for IPv4, ``6`` for IPv6.
1437db96d56Sopenharmony_ci
1447db96d56Sopenharmony_ci   .. attribute:: max_prefixlen
1457db96d56Sopenharmony_ci
1467db96d56Sopenharmony_ci      The total number of bits in the address representation for this
1477db96d56Sopenharmony_ci      version: ``32`` for IPv4, ``128`` for IPv6.
1487db96d56Sopenharmony_ci
1497db96d56Sopenharmony_ci      The prefix defines the number of leading bits in an  address that
1507db96d56Sopenharmony_ci      are compared to determine whether or not an address is part of a
1517db96d56Sopenharmony_ci      network.
1527db96d56Sopenharmony_ci
1537db96d56Sopenharmony_ci   .. attribute:: compressed
1547db96d56Sopenharmony_ci   .. attribute:: exploded
1557db96d56Sopenharmony_ci
1567db96d56Sopenharmony_ci      The string representation in dotted decimal notation. Leading zeroes
1577db96d56Sopenharmony_ci      are never included in the representation.
1587db96d56Sopenharmony_ci
1597db96d56Sopenharmony_ci      As IPv4 does not define a shorthand notation for addresses with octets
1607db96d56Sopenharmony_ci      set to zero, these two attributes are always the same as ``str(addr)``
1617db96d56Sopenharmony_ci      for IPv4 addresses. Exposing these attributes makes it easier to
1627db96d56Sopenharmony_ci      write display code that can handle both IPv4 and IPv6 addresses.
1637db96d56Sopenharmony_ci
1647db96d56Sopenharmony_ci   .. attribute:: packed
1657db96d56Sopenharmony_ci
1667db96d56Sopenharmony_ci      The binary representation of this address - a :class:`bytes` object of
1677db96d56Sopenharmony_ci      the appropriate length (most significant octet first). This is 4 bytes
1687db96d56Sopenharmony_ci      for IPv4 and 16 bytes for IPv6.
1697db96d56Sopenharmony_ci
1707db96d56Sopenharmony_ci   .. attribute:: reverse_pointer
1717db96d56Sopenharmony_ci
1727db96d56Sopenharmony_ci      The name of the reverse DNS PTR record for the IP address, e.g.::
1737db96d56Sopenharmony_ci
1747db96d56Sopenharmony_ci          >>> ipaddress.ip_address("127.0.0.1").reverse_pointer
1757db96d56Sopenharmony_ci          '1.0.0.127.in-addr.arpa'
1767db96d56Sopenharmony_ci          >>> ipaddress.ip_address("2001:db8::1").reverse_pointer
1777db96d56Sopenharmony_ci          '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'
1787db96d56Sopenharmony_ci
1797db96d56Sopenharmony_ci      This is the name that could be used for performing a PTR lookup, not the
1807db96d56Sopenharmony_ci      resolved hostname itself.
1817db96d56Sopenharmony_ci
1827db96d56Sopenharmony_ci      .. versionadded:: 3.5
1837db96d56Sopenharmony_ci
1847db96d56Sopenharmony_ci   .. attribute:: is_multicast
1857db96d56Sopenharmony_ci
1867db96d56Sopenharmony_ci      ``True`` if the address is reserved for multicast use.  See
1877db96d56Sopenharmony_ci      :RFC:`3171` (for IPv4) or :RFC:`2373` (for IPv6).
1887db96d56Sopenharmony_ci
1897db96d56Sopenharmony_ci   .. attribute:: is_private
1907db96d56Sopenharmony_ci
1917db96d56Sopenharmony_ci      ``True`` if the address is allocated for private networks.  See
1927db96d56Sopenharmony_ci      iana-ipv4-special-registry_ (for IPv4) or iana-ipv6-special-registry_
1937db96d56Sopenharmony_ci      (for IPv6).
1947db96d56Sopenharmony_ci
1957db96d56Sopenharmony_ci   .. attribute:: is_global
1967db96d56Sopenharmony_ci
1977db96d56Sopenharmony_ci      ``True`` if the address is allocated for public networks.  See
1987db96d56Sopenharmony_ci      iana-ipv4-special-registry_ (for IPv4) or iana-ipv6-special-registry_
1997db96d56Sopenharmony_ci      (for IPv6).
2007db96d56Sopenharmony_ci
2017db96d56Sopenharmony_ci      .. versionadded:: 3.4
2027db96d56Sopenharmony_ci
2037db96d56Sopenharmony_ci   .. attribute:: is_unspecified
2047db96d56Sopenharmony_ci
2057db96d56Sopenharmony_ci      ``True`` if the address is unspecified.  See :RFC:`5735` (for IPv4)
2067db96d56Sopenharmony_ci      or :RFC:`2373` (for IPv6).
2077db96d56Sopenharmony_ci
2087db96d56Sopenharmony_ci   .. attribute:: is_reserved
2097db96d56Sopenharmony_ci
2107db96d56Sopenharmony_ci      ``True`` if the address is otherwise IETF reserved.
2117db96d56Sopenharmony_ci
2127db96d56Sopenharmony_ci   .. attribute:: is_loopback
2137db96d56Sopenharmony_ci
2147db96d56Sopenharmony_ci      ``True`` if this is a loopback address.  See :RFC:`3330` (for IPv4)
2157db96d56Sopenharmony_ci      or :RFC:`2373` (for IPv6).
2167db96d56Sopenharmony_ci
2177db96d56Sopenharmony_ci   .. attribute:: is_link_local
2187db96d56Sopenharmony_ci
2197db96d56Sopenharmony_ci      ``True`` if the address is reserved for link-local usage.  See
2207db96d56Sopenharmony_ci      :RFC:`3927`.
2217db96d56Sopenharmony_ci
2227db96d56Sopenharmony_ci.. _iana-ipv4-special-registry: https://www.iana.org/assignments/iana-ipv4-special-registry/iana-ipv4-special-registry.xhtml
2237db96d56Sopenharmony_ci.. _iana-ipv6-special-registry: https://www.iana.org/assignments/iana-ipv6-special-registry/iana-ipv6-special-registry.xhtml
2247db96d56Sopenharmony_ci
2257db96d56Sopenharmony_ci.. method:: IPv4Address.__format__(fmt)
2267db96d56Sopenharmony_ci
2277db96d56Sopenharmony_ci   Returns a string representation of the IP address, controlled by
2287db96d56Sopenharmony_ci   an explicit format string.
2297db96d56Sopenharmony_ci   *fmt* can be one of the following: ``'s'``, the default option,
2307db96d56Sopenharmony_ci   equivalent to :func:`str`, ``'b'`` for a zero-padded binary string,
2317db96d56Sopenharmony_ci   ``'X'`` or ``'x'`` for an uppercase or lowercase hexadecimal
2327db96d56Sopenharmony_ci   representation, or ``'n'``, which is equivalent to ``'b'`` for IPv4
2337db96d56Sopenharmony_ci   addresses and ``'x'`` for IPv6. For binary and hexadecimal
2347db96d56Sopenharmony_ci   representations, the form specifier ``'#'`` and the grouping option
2357db96d56Sopenharmony_ci   ``'_'`` are available. ``__format__`` is used by ``format``, ``str.format``
2367db96d56Sopenharmony_ci   and f-strings.
2377db96d56Sopenharmony_ci
2387db96d56Sopenharmony_ci      >>> format(ipaddress.IPv4Address('192.168.0.1'))
2397db96d56Sopenharmony_ci      '192.168.0.1'
2407db96d56Sopenharmony_ci      >>> '{:#b}'.format(ipaddress.IPv4Address('192.168.0.1'))
2417db96d56Sopenharmony_ci      '0b11000000101010000000000000000001'
2427db96d56Sopenharmony_ci      >>> f'{ipaddress.IPv6Address("2001:db8::1000"):s}'
2437db96d56Sopenharmony_ci      '2001:db8::1000'
2447db96d56Sopenharmony_ci      >>> format(ipaddress.IPv6Address('2001:db8::1000'), '_X')
2457db96d56Sopenharmony_ci      '2001_0DB8_0000_0000_0000_0000_0000_1000'
2467db96d56Sopenharmony_ci      >>> '{:#_n}'.format(ipaddress.IPv6Address('2001:db8::1000'))
2477db96d56Sopenharmony_ci      '0x2001_0db8_0000_0000_0000_0000_0000_1000'
2487db96d56Sopenharmony_ci
2497db96d56Sopenharmony_ci   .. versionadded:: 3.9
2507db96d56Sopenharmony_ci
2517db96d56Sopenharmony_ci
2527db96d56Sopenharmony_ci.. class:: IPv6Address(address)
2537db96d56Sopenharmony_ci
2547db96d56Sopenharmony_ci   Construct an IPv6 address.  An :exc:`AddressValueError` is raised if
2557db96d56Sopenharmony_ci   *address* is not a valid IPv6 address.
2567db96d56Sopenharmony_ci
2577db96d56Sopenharmony_ci   The following constitutes a valid IPv6 address:
2587db96d56Sopenharmony_ci
2597db96d56Sopenharmony_ci   1. A string consisting of eight groups of four hexadecimal digits, each
2607db96d56Sopenharmony_ci      group representing 16 bits.  The groups are separated by colons.
2617db96d56Sopenharmony_ci      This describes an *exploded* (longhand) notation.  The string can
2627db96d56Sopenharmony_ci      also be *compressed* (shorthand notation) by various means.  See
2637db96d56Sopenharmony_ci      :RFC:`4291` for details.  For example,
2647db96d56Sopenharmony_ci      ``"0000:0000:0000:0000:0000:0abc:0007:0def"`` can be compressed to
2657db96d56Sopenharmony_ci      ``"::abc:7:def"``.
2667db96d56Sopenharmony_ci
2677db96d56Sopenharmony_ci      Optionally, the string may also have a scope zone ID, expressed
2687db96d56Sopenharmony_ci      with a suffix ``%scope_id``. If present, the scope ID must be non-empty,
2697db96d56Sopenharmony_ci      and may not contain ``%``.
2707db96d56Sopenharmony_ci      See :RFC:`4007` for details.
2717db96d56Sopenharmony_ci      For example, ``fe80::1234%1`` might identify address ``fe80::1234`` on the first link of the node.
2727db96d56Sopenharmony_ci   2. An integer that fits into 128 bits.
2737db96d56Sopenharmony_ci   3. An integer packed into a :class:`bytes` object of length 16, big-endian.
2747db96d56Sopenharmony_ci
2757db96d56Sopenharmony_ci
2767db96d56Sopenharmony_ci   >>> ipaddress.IPv6Address('2001:db8::1000')
2777db96d56Sopenharmony_ci   IPv6Address('2001:db8::1000')
2787db96d56Sopenharmony_ci   >>> ipaddress.IPv6Address('ff02::5678%1')
2797db96d56Sopenharmony_ci   IPv6Address('ff02::5678%1')
2807db96d56Sopenharmony_ci
2817db96d56Sopenharmony_ci   .. attribute:: compressed
2827db96d56Sopenharmony_ci
2837db96d56Sopenharmony_ci   The short form of the address representation, with leading zeroes in
2847db96d56Sopenharmony_ci   groups omitted and the longest sequence of groups consisting entirely of
2857db96d56Sopenharmony_ci   zeroes collapsed to a single empty group.
2867db96d56Sopenharmony_ci
2877db96d56Sopenharmony_ci   This is also the value returned by ``str(addr)`` for IPv6 addresses.
2887db96d56Sopenharmony_ci
2897db96d56Sopenharmony_ci   .. attribute:: exploded
2907db96d56Sopenharmony_ci
2917db96d56Sopenharmony_ci   The long form of the address representation, with all leading zeroes and
2927db96d56Sopenharmony_ci   groups consisting entirely of zeroes included.
2937db96d56Sopenharmony_ci
2947db96d56Sopenharmony_ci
2957db96d56Sopenharmony_ci   For the following attributes and methods, see the corresponding
2967db96d56Sopenharmony_ci   documentation of the :class:`IPv4Address` class:
2977db96d56Sopenharmony_ci
2987db96d56Sopenharmony_ci   .. attribute:: packed
2997db96d56Sopenharmony_ci   .. attribute:: reverse_pointer
3007db96d56Sopenharmony_ci   .. attribute:: version
3017db96d56Sopenharmony_ci   .. attribute:: max_prefixlen
3027db96d56Sopenharmony_ci   .. attribute:: is_multicast
3037db96d56Sopenharmony_ci   .. attribute:: is_private
3047db96d56Sopenharmony_ci   .. attribute:: is_global
3057db96d56Sopenharmony_ci   .. attribute:: is_unspecified
3067db96d56Sopenharmony_ci   .. attribute:: is_reserved
3077db96d56Sopenharmony_ci   .. attribute:: is_loopback
3087db96d56Sopenharmony_ci   .. attribute:: is_link_local
3097db96d56Sopenharmony_ci
3107db96d56Sopenharmony_ci      .. versionadded:: 3.4
3117db96d56Sopenharmony_ci         is_global
3127db96d56Sopenharmony_ci
3137db96d56Sopenharmony_ci   .. attribute:: is_site_local
3147db96d56Sopenharmony_ci
3157db96d56Sopenharmony_ci      ``True`` if the address is reserved for site-local usage.  Note that
3167db96d56Sopenharmony_ci      the site-local address space has been deprecated by :RFC:`3879`. Use
3177db96d56Sopenharmony_ci      :attr:`~IPv4Address.is_private` to test if this address is in the
3187db96d56Sopenharmony_ci      space of unique local addresses as defined by :RFC:`4193`.
3197db96d56Sopenharmony_ci
3207db96d56Sopenharmony_ci   .. attribute:: ipv4_mapped
3217db96d56Sopenharmony_ci
3227db96d56Sopenharmony_ci      For addresses that appear to be IPv4 mapped addresses (starting with
3237db96d56Sopenharmony_ci      ``::FFFF/96``), this property will report the embedded IPv4 address.
3247db96d56Sopenharmony_ci      For any other address, this property will be ``None``.
3257db96d56Sopenharmony_ci
3267db96d56Sopenharmony_ci   .. attribute:: scope_id
3277db96d56Sopenharmony_ci
3287db96d56Sopenharmony_ci      For scoped addresses as defined by :RFC:`4007`, this property identifies
3297db96d56Sopenharmony_ci      the particular zone of the address's scope that the address belongs to,
3307db96d56Sopenharmony_ci      as a string. When no scope zone is specified, this property will be ``None``.
3317db96d56Sopenharmony_ci
3327db96d56Sopenharmony_ci   .. attribute:: sixtofour
3337db96d56Sopenharmony_ci
3347db96d56Sopenharmony_ci      For addresses that appear to be 6to4 addresses  (starting with
3357db96d56Sopenharmony_ci      ``2002::/16``) as defined by :RFC:`3056`, this property will report
3367db96d56Sopenharmony_ci      the embedded IPv4 address.  For any other address, this property will
3377db96d56Sopenharmony_ci      be ``None``.
3387db96d56Sopenharmony_ci
3397db96d56Sopenharmony_ci   .. attribute:: teredo
3407db96d56Sopenharmony_ci
3417db96d56Sopenharmony_ci      For addresses that appear to be Teredo addresses (starting with
3427db96d56Sopenharmony_ci      ``2001::/32``) as defined by :RFC:`4380`, this property will report
3437db96d56Sopenharmony_ci      the embedded ``(server, client)`` IP address pair.  For any other
3447db96d56Sopenharmony_ci      address, this property will be ``None``.
3457db96d56Sopenharmony_ci
3467db96d56Sopenharmony_ci.. method:: IPv6Address.__format__(fmt)
3477db96d56Sopenharmony_ci
3487db96d56Sopenharmony_ci   Refer to the corresponding method documentation in
3497db96d56Sopenharmony_ci   :class:`IPv4Address`.
3507db96d56Sopenharmony_ci
3517db96d56Sopenharmony_ci   .. versionadded:: 3.9
3527db96d56Sopenharmony_ci
3537db96d56Sopenharmony_ciConversion to Strings and Integers
3547db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3557db96d56Sopenharmony_ci
3567db96d56Sopenharmony_ciTo interoperate with networking interfaces such as the socket module,
3577db96d56Sopenharmony_ciaddresses must be converted to strings or integers. This is handled using
3587db96d56Sopenharmony_cithe :func:`str` and :func:`int` builtin functions::
3597db96d56Sopenharmony_ci
3607db96d56Sopenharmony_ci   >>> str(ipaddress.IPv4Address('192.168.0.1'))
3617db96d56Sopenharmony_ci   '192.168.0.1'
3627db96d56Sopenharmony_ci   >>> int(ipaddress.IPv4Address('192.168.0.1'))
3637db96d56Sopenharmony_ci   3232235521
3647db96d56Sopenharmony_ci   >>> str(ipaddress.IPv6Address('::1'))
3657db96d56Sopenharmony_ci   '::1'
3667db96d56Sopenharmony_ci   >>> int(ipaddress.IPv6Address('::1'))
3677db96d56Sopenharmony_ci   1
3687db96d56Sopenharmony_ci
3697db96d56Sopenharmony_ciNote that IPv6 scoped addresses are converted to integers without scope zone ID.
3707db96d56Sopenharmony_ci
3717db96d56Sopenharmony_ci
3727db96d56Sopenharmony_ciOperators
3737db96d56Sopenharmony_ci^^^^^^^^^
3747db96d56Sopenharmony_ci
3757db96d56Sopenharmony_ciAddress objects support some operators.  Unless stated otherwise, operators can
3767db96d56Sopenharmony_cionly be applied between compatible objects (i.e. IPv4 with IPv4, IPv6 with
3777db96d56Sopenharmony_ciIPv6).
3787db96d56Sopenharmony_ci
3797db96d56Sopenharmony_ci
3807db96d56Sopenharmony_ciComparison operators
3817db96d56Sopenharmony_ci""""""""""""""""""""
3827db96d56Sopenharmony_ci
3837db96d56Sopenharmony_ciAddress objects can be compared with the usual set of comparison operators.
3847db96d56Sopenharmony_ciSame IPv6 addresses with different scope zone IDs are not equal.
3857db96d56Sopenharmony_ciSome examples::
3867db96d56Sopenharmony_ci
3877db96d56Sopenharmony_ci   >>> IPv4Address('127.0.0.2') > IPv4Address('127.0.0.1')
3887db96d56Sopenharmony_ci   True
3897db96d56Sopenharmony_ci   >>> IPv4Address('127.0.0.2') == IPv4Address('127.0.0.1')
3907db96d56Sopenharmony_ci   False
3917db96d56Sopenharmony_ci   >>> IPv4Address('127.0.0.2') != IPv4Address('127.0.0.1')
3927db96d56Sopenharmony_ci   True
3937db96d56Sopenharmony_ci   >>> IPv6Address('fe80::1234') == IPv6Address('fe80::1234%1')
3947db96d56Sopenharmony_ci   False
3957db96d56Sopenharmony_ci   >>> IPv6Address('fe80::1234%1') != IPv6Address('fe80::1234%2')
3967db96d56Sopenharmony_ci   True
3977db96d56Sopenharmony_ci
3987db96d56Sopenharmony_ci
3997db96d56Sopenharmony_ciArithmetic operators
4007db96d56Sopenharmony_ci""""""""""""""""""""
4017db96d56Sopenharmony_ci
4027db96d56Sopenharmony_ciIntegers can be added to or subtracted from address objects.  Some examples::
4037db96d56Sopenharmony_ci
4047db96d56Sopenharmony_ci   >>> IPv4Address('127.0.0.2') + 3
4057db96d56Sopenharmony_ci   IPv4Address('127.0.0.5')
4067db96d56Sopenharmony_ci   >>> IPv4Address('127.0.0.2') - 3
4077db96d56Sopenharmony_ci   IPv4Address('126.255.255.255')
4087db96d56Sopenharmony_ci   >>> IPv4Address('255.255.255.255') + 1
4097db96d56Sopenharmony_ci   Traceback (most recent call last):
4107db96d56Sopenharmony_ci     File "<stdin>", line 1, in <module>
4117db96d56Sopenharmony_ci   ipaddress.AddressValueError: 4294967296 (>= 2**32) is not permitted as an IPv4 address
4127db96d56Sopenharmony_ci
4137db96d56Sopenharmony_ci
4147db96d56Sopenharmony_ciIP Network definitions
4157db96d56Sopenharmony_ci----------------------
4167db96d56Sopenharmony_ci
4177db96d56Sopenharmony_ciThe :class:`IPv4Network` and :class:`IPv6Network` objects provide a mechanism
4187db96d56Sopenharmony_cifor defining and inspecting IP network definitions.  A network definition
4197db96d56Sopenharmony_ciconsists of a *mask* and a *network address*, and as such defines a range of
4207db96d56Sopenharmony_ciIP addresses that equal the network address when masked (binary AND) with the
4217db96d56Sopenharmony_cimask.  For example, a network definition with the mask ``255.255.255.0`` and
4227db96d56Sopenharmony_cithe network address ``192.168.1.0`` consists of IP addresses in the inclusive
4237db96d56Sopenharmony_cirange ``192.168.1.0`` to ``192.168.1.255``.
4247db96d56Sopenharmony_ci
4257db96d56Sopenharmony_ci
4267db96d56Sopenharmony_ciPrefix, net mask and host mask
4277db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4287db96d56Sopenharmony_ci
4297db96d56Sopenharmony_ciThere are several equivalent ways to specify IP network masks.  A *prefix*
4307db96d56Sopenharmony_ci``/<nbits>`` is a notation that denotes how many high-order bits are set in
4317db96d56Sopenharmony_cithe network mask.  A *net mask* is an IP address with some number of
4327db96d56Sopenharmony_cihigh-order bits set.  Thus the prefix ``/24`` is equivalent to the net mask
4337db96d56Sopenharmony_ci``255.255.255.0`` in IPv4, or ``ffff:ff00::`` in IPv6.  In addition, a
4347db96d56Sopenharmony_ci*host mask* is the logical inverse of a *net mask*, and is sometimes used
4357db96d56Sopenharmony_ci(for example in Cisco access control lists) to denote a network mask.  The
4367db96d56Sopenharmony_cihost mask equivalent to ``/24`` in IPv4 is ``0.0.0.255``.
4377db96d56Sopenharmony_ci
4387db96d56Sopenharmony_ci
4397db96d56Sopenharmony_ciNetwork objects
4407db96d56Sopenharmony_ci^^^^^^^^^^^^^^^
4417db96d56Sopenharmony_ci
4427db96d56Sopenharmony_ciAll attributes implemented by address objects are implemented by network
4437db96d56Sopenharmony_ciobjects as well.  In addition, network objects implement additional attributes.
4447db96d56Sopenharmony_ciAll of these are common between :class:`IPv4Network` and :class:`IPv6Network`,
4457db96d56Sopenharmony_ciso to avoid duplication they are only documented for :class:`IPv4Network`.
4467db96d56Sopenharmony_ciNetwork objects are :term:`hashable`, so they can be used as keys in
4477db96d56Sopenharmony_cidictionaries.
4487db96d56Sopenharmony_ci
4497db96d56Sopenharmony_ci.. class:: IPv4Network(address, strict=True)
4507db96d56Sopenharmony_ci
4517db96d56Sopenharmony_ci   Construct an IPv4 network definition.  *address* can be one of the following:
4527db96d56Sopenharmony_ci
4537db96d56Sopenharmony_ci   1. A string consisting of an IP address and an optional mask, separated by
4547db96d56Sopenharmony_ci      a slash (``/``).  The IP address is the network address, and the mask
4557db96d56Sopenharmony_ci      can be either a single number, which means it's a *prefix*, or a string
4567db96d56Sopenharmony_ci      representation of an IPv4 address.  If it's the latter, the mask is
4577db96d56Sopenharmony_ci      interpreted as a *net mask* if it starts with a non-zero field, or as a
4587db96d56Sopenharmony_ci      *host mask* if it starts with a zero field, with the single exception of
4597db96d56Sopenharmony_ci      an all-zero mask which is treated as a *net mask*.  If no mask is provided,
4607db96d56Sopenharmony_ci      it's considered to be ``/32``.
4617db96d56Sopenharmony_ci
4627db96d56Sopenharmony_ci      For example, the following *address* specifications are equivalent:
4637db96d56Sopenharmony_ci      ``192.168.1.0/24``, ``192.168.1.0/255.255.255.0`` and
4647db96d56Sopenharmony_ci      ``192.168.1.0/0.0.0.255``.
4657db96d56Sopenharmony_ci
4667db96d56Sopenharmony_ci   2. An integer that fits into 32 bits.  This is equivalent to a
4677db96d56Sopenharmony_ci      single-address network, with the network address being *address* and
4687db96d56Sopenharmony_ci      the mask being ``/32``.
4697db96d56Sopenharmony_ci
4707db96d56Sopenharmony_ci   3. An integer packed into a :class:`bytes` object of length 4, big-endian.
4717db96d56Sopenharmony_ci      The interpretation is similar to an integer *address*.
4727db96d56Sopenharmony_ci
4737db96d56Sopenharmony_ci   4. A two-tuple of an address description and a netmask, where the address
4747db96d56Sopenharmony_ci      description is either a string, a 32-bits integer, a 4-bytes packed
4757db96d56Sopenharmony_ci      integer, or an existing IPv4Address object; and the netmask is either
4767db96d56Sopenharmony_ci      an integer representing the prefix length (e.g. ``24``) or a string
4777db96d56Sopenharmony_ci      representing the prefix mask (e.g. ``255.255.255.0``).
4787db96d56Sopenharmony_ci
4797db96d56Sopenharmony_ci   An :exc:`AddressValueError` is raised if *address* is not a valid IPv4
4807db96d56Sopenharmony_ci   address.  A :exc:`NetmaskValueError` is raised if the mask is not valid for
4817db96d56Sopenharmony_ci   an IPv4 address.
4827db96d56Sopenharmony_ci
4837db96d56Sopenharmony_ci   If *strict* is ``True`` and host bits are set in the supplied address,
4847db96d56Sopenharmony_ci   then :exc:`ValueError` is raised.  Otherwise, the host bits are masked out
4857db96d56Sopenharmony_ci   to determine the appropriate network address.
4867db96d56Sopenharmony_ci
4877db96d56Sopenharmony_ci   Unless stated otherwise, all network methods accepting other network/address
4887db96d56Sopenharmony_ci   objects will raise :exc:`TypeError` if the argument's IP version is
4897db96d56Sopenharmony_ci   incompatible to ``self``.
4907db96d56Sopenharmony_ci
4917db96d56Sopenharmony_ci   .. versionchanged:: 3.5
4927db96d56Sopenharmony_ci
4937db96d56Sopenharmony_ci      Added the two-tuple form for the *address* constructor parameter.
4947db96d56Sopenharmony_ci
4957db96d56Sopenharmony_ci   .. attribute:: version
4967db96d56Sopenharmony_ci   .. attribute:: max_prefixlen
4977db96d56Sopenharmony_ci
4987db96d56Sopenharmony_ci      Refer to the corresponding attribute documentation in
4997db96d56Sopenharmony_ci      :class:`IPv4Address`.
5007db96d56Sopenharmony_ci
5017db96d56Sopenharmony_ci   .. attribute:: is_multicast
5027db96d56Sopenharmony_ci   .. attribute:: is_private
5037db96d56Sopenharmony_ci   .. attribute:: is_unspecified
5047db96d56Sopenharmony_ci   .. attribute:: is_reserved
5057db96d56Sopenharmony_ci   .. attribute:: is_loopback
5067db96d56Sopenharmony_ci   .. attribute:: is_link_local
5077db96d56Sopenharmony_ci
5087db96d56Sopenharmony_ci      These attributes are true for the network as a whole if they are true
5097db96d56Sopenharmony_ci      for both the network address and the broadcast address.
5107db96d56Sopenharmony_ci
5117db96d56Sopenharmony_ci   .. attribute:: network_address
5127db96d56Sopenharmony_ci
5137db96d56Sopenharmony_ci      The network address for the network. The network address and the
5147db96d56Sopenharmony_ci      prefix length together uniquely define a network.
5157db96d56Sopenharmony_ci
5167db96d56Sopenharmony_ci   .. attribute:: broadcast_address
5177db96d56Sopenharmony_ci
5187db96d56Sopenharmony_ci      The broadcast address for the network. Packets sent to the broadcast
5197db96d56Sopenharmony_ci      address should be received by every host on the network.
5207db96d56Sopenharmony_ci
5217db96d56Sopenharmony_ci   .. attribute:: hostmask
5227db96d56Sopenharmony_ci
5237db96d56Sopenharmony_ci      The host mask, as an :class:`IPv4Address` object.
5247db96d56Sopenharmony_ci
5257db96d56Sopenharmony_ci   .. attribute:: netmask
5267db96d56Sopenharmony_ci
5277db96d56Sopenharmony_ci      The net mask, as an :class:`IPv4Address` object.
5287db96d56Sopenharmony_ci
5297db96d56Sopenharmony_ci   .. attribute:: with_prefixlen
5307db96d56Sopenharmony_ci   .. attribute:: compressed
5317db96d56Sopenharmony_ci   .. attribute:: exploded
5327db96d56Sopenharmony_ci
5337db96d56Sopenharmony_ci      A string representation of the network, with the mask in prefix
5347db96d56Sopenharmony_ci      notation.
5357db96d56Sopenharmony_ci
5367db96d56Sopenharmony_ci      ``with_prefixlen`` and ``compressed`` are always the same as
5377db96d56Sopenharmony_ci      ``str(network)``.
5387db96d56Sopenharmony_ci      ``exploded`` uses the exploded form the network address.
5397db96d56Sopenharmony_ci
5407db96d56Sopenharmony_ci   .. attribute:: with_netmask
5417db96d56Sopenharmony_ci
5427db96d56Sopenharmony_ci      A string representation of the network, with the mask in net mask
5437db96d56Sopenharmony_ci      notation.
5447db96d56Sopenharmony_ci
5457db96d56Sopenharmony_ci   .. attribute:: with_hostmask
5467db96d56Sopenharmony_ci
5477db96d56Sopenharmony_ci      A string representation of the network, with the mask in host mask
5487db96d56Sopenharmony_ci      notation.
5497db96d56Sopenharmony_ci
5507db96d56Sopenharmony_ci   .. attribute:: num_addresses
5517db96d56Sopenharmony_ci
5527db96d56Sopenharmony_ci      The total number of addresses in the network.
5537db96d56Sopenharmony_ci
5547db96d56Sopenharmony_ci   .. attribute:: prefixlen
5557db96d56Sopenharmony_ci
5567db96d56Sopenharmony_ci      Length of the network prefix, in bits.
5577db96d56Sopenharmony_ci
5587db96d56Sopenharmony_ci   .. method:: hosts()
5597db96d56Sopenharmony_ci
5607db96d56Sopenharmony_ci      Returns an iterator over the usable hosts in the network.  The usable
5617db96d56Sopenharmony_ci      hosts are all the IP addresses that belong to the network, except the
5627db96d56Sopenharmony_ci      network address itself and the network broadcast address.  For networks
5637db96d56Sopenharmony_ci      with a mask length of 31, the network address and network broadcast
5647db96d56Sopenharmony_ci      address are also included in the result. Networks with a mask of 32
5657db96d56Sopenharmony_ci      will return a list containing the single host address.
5667db96d56Sopenharmony_ci
5677db96d56Sopenharmony_ci         >>> list(ip_network('192.0.2.0/29').hosts())  #doctest: +NORMALIZE_WHITESPACE
5687db96d56Sopenharmony_ci         [IPv4Address('192.0.2.1'), IPv4Address('192.0.2.2'),
5697db96d56Sopenharmony_ci          IPv4Address('192.0.2.3'), IPv4Address('192.0.2.4'),
5707db96d56Sopenharmony_ci          IPv4Address('192.0.2.5'), IPv4Address('192.0.2.6')]
5717db96d56Sopenharmony_ci         >>> list(ip_network('192.0.2.0/31').hosts())
5727db96d56Sopenharmony_ci         [IPv4Address('192.0.2.0'), IPv4Address('192.0.2.1')]
5737db96d56Sopenharmony_ci         >>> list(ip_network('192.0.2.1/32').hosts())
5747db96d56Sopenharmony_ci         [IPv4Address('192.0.2.1')]
5757db96d56Sopenharmony_ci
5767db96d56Sopenharmony_ci   .. method:: overlaps(other)
5777db96d56Sopenharmony_ci
5787db96d56Sopenharmony_ci      ``True`` if this network is partly or wholly contained in *other* or
5797db96d56Sopenharmony_ci      *other* is wholly contained in this network.
5807db96d56Sopenharmony_ci
5817db96d56Sopenharmony_ci   .. method:: address_exclude(network)
5827db96d56Sopenharmony_ci
5837db96d56Sopenharmony_ci      Computes the network definitions resulting from removing the given
5847db96d56Sopenharmony_ci      *network* from this one.  Returns an iterator of network objects.
5857db96d56Sopenharmony_ci      Raises :exc:`ValueError` if *network* is not completely contained in
5867db96d56Sopenharmony_ci      this network.
5877db96d56Sopenharmony_ci
5887db96d56Sopenharmony_ci         >>> n1 = ip_network('192.0.2.0/28')
5897db96d56Sopenharmony_ci         >>> n2 = ip_network('192.0.2.1/32')
5907db96d56Sopenharmony_ci         >>> list(n1.address_exclude(n2))  #doctest: +NORMALIZE_WHITESPACE
5917db96d56Sopenharmony_ci         [IPv4Network('192.0.2.8/29'), IPv4Network('192.0.2.4/30'),
5927db96d56Sopenharmony_ci          IPv4Network('192.0.2.2/31'), IPv4Network('192.0.2.0/32')]
5937db96d56Sopenharmony_ci
5947db96d56Sopenharmony_ci   .. method:: subnets(prefixlen_diff=1, new_prefix=None)
5957db96d56Sopenharmony_ci
5967db96d56Sopenharmony_ci      The subnets that join to make the current network definition, depending
5977db96d56Sopenharmony_ci      on the argument values.  *prefixlen_diff* is the amount our prefix
5987db96d56Sopenharmony_ci      length should be increased by.  *new_prefix* is the desired new
5997db96d56Sopenharmony_ci      prefix of the subnets; it must be larger than our prefix.  One and
6007db96d56Sopenharmony_ci      only one of *prefixlen_diff* and *new_prefix* must be set.  Returns an
6017db96d56Sopenharmony_ci      iterator of network objects.
6027db96d56Sopenharmony_ci
6037db96d56Sopenharmony_ci         >>> list(ip_network('192.0.2.0/24').subnets())
6047db96d56Sopenharmony_ci         [IPv4Network('192.0.2.0/25'), IPv4Network('192.0.2.128/25')]
6057db96d56Sopenharmony_ci         >>> list(ip_network('192.0.2.0/24').subnets(prefixlen_diff=2))  #doctest: +NORMALIZE_WHITESPACE
6067db96d56Sopenharmony_ci         [IPv4Network('192.0.2.0/26'), IPv4Network('192.0.2.64/26'),
6077db96d56Sopenharmony_ci          IPv4Network('192.0.2.128/26'), IPv4Network('192.0.2.192/26')]
6087db96d56Sopenharmony_ci         >>> list(ip_network('192.0.2.0/24').subnets(new_prefix=26))  #doctest: +NORMALIZE_WHITESPACE
6097db96d56Sopenharmony_ci         [IPv4Network('192.0.2.0/26'), IPv4Network('192.0.2.64/26'),
6107db96d56Sopenharmony_ci          IPv4Network('192.0.2.128/26'), IPv4Network('192.0.2.192/26')]
6117db96d56Sopenharmony_ci         >>> list(ip_network('192.0.2.0/24').subnets(new_prefix=23))
6127db96d56Sopenharmony_ci         Traceback (most recent call last):
6137db96d56Sopenharmony_ci           File "<stdin>", line 1, in <module>
6147db96d56Sopenharmony_ci             raise ValueError('new prefix must be longer')
6157db96d56Sopenharmony_ci         ValueError: new prefix must be longer
6167db96d56Sopenharmony_ci         >>> list(ip_network('192.0.2.0/24').subnets(new_prefix=25))
6177db96d56Sopenharmony_ci         [IPv4Network('192.0.2.0/25'), IPv4Network('192.0.2.128/25')]
6187db96d56Sopenharmony_ci
6197db96d56Sopenharmony_ci   .. method:: supernet(prefixlen_diff=1, new_prefix=None)
6207db96d56Sopenharmony_ci
6217db96d56Sopenharmony_ci      The supernet containing this network definition, depending on the
6227db96d56Sopenharmony_ci      argument values.  *prefixlen_diff* is the amount our prefix length
6237db96d56Sopenharmony_ci      should be decreased by.  *new_prefix* is the desired new prefix of
6247db96d56Sopenharmony_ci      the supernet; it must be smaller than our prefix.  One and only one
6257db96d56Sopenharmony_ci      of *prefixlen_diff* and *new_prefix* must be set.  Returns a single
6267db96d56Sopenharmony_ci      network object.
6277db96d56Sopenharmony_ci
6287db96d56Sopenharmony_ci         >>> ip_network('192.0.2.0/24').supernet()
6297db96d56Sopenharmony_ci         IPv4Network('192.0.2.0/23')
6307db96d56Sopenharmony_ci         >>> ip_network('192.0.2.0/24').supernet(prefixlen_diff=2)
6317db96d56Sopenharmony_ci         IPv4Network('192.0.0.0/22')
6327db96d56Sopenharmony_ci         >>> ip_network('192.0.2.0/24').supernet(new_prefix=20)
6337db96d56Sopenharmony_ci         IPv4Network('192.0.0.0/20')
6347db96d56Sopenharmony_ci
6357db96d56Sopenharmony_ci   .. method:: subnet_of(other)
6367db96d56Sopenharmony_ci
6377db96d56Sopenharmony_ci      Return ``True`` if this network is a subnet of *other*.
6387db96d56Sopenharmony_ci
6397db96d56Sopenharmony_ci        >>> a = ip_network('192.168.1.0/24')
6407db96d56Sopenharmony_ci        >>> b = ip_network('192.168.1.128/30')
6417db96d56Sopenharmony_ci        >>> b.subnet_of(a)
6427db96d56Sopenharmony_ci        True
6437db96d56Sopenharmony_ci
6447db96d56Sopenharmony_ci      .. versionadded:: 3.7
6457db96d56Sopenharmony_ci
6467db96d56Sopenharmony_ci   .. method:: supernet_of(other)
6477db96d56Sopenharmony_ci
6487db96d56Sopenharmony_ci      Return ``True`` if this network is a supernet of *other*.
6497db96d56Sopenharmony_ci
6507db96d56Sopenharmony_ci        >>> a = ip_network('192.168.1.0/24')
6517db96d56Sopenharmony_ci        >>> b = ip_network('192.168.1.128/30')
6527db96d56Sopenharmony_ci        >>> a.supernet_of(b)
6537db96d56Sopenharmony_ci        True
6547db96d56Sopenharmony_ci
6557db96d56Sopenharmony_ci      .. versionadded:: 3.7
6567db96d56Sopenharmony_ci
6577db96d56Sopenharmony_ci   .. method:: compare_networks(other)
6587db96d56Sopenharmony_ci
6597db96d56Sopenharmony_ci      Compare this network to *other*.  In this comparison only the network
6607db96d56Sopenharmony_ci      addresses are considered; host bits aren't.  Returns either ``-1``,
6617db96d56Sopenharmony_ci      ``0`` or ``1``.
6627db96d56Sopenharmony_ci
6637db96d56Sopenharmony_ci         >>> ip_network('192.0.2.1/32').compare_networks(ip_network('192.0.2.2/32'))
6647db96d56Sopenharmony_ci         -1
6657db96d56Sopenharmony_ci         >>> ip_network('192.0.2.1/32').compare_networks(ip_network('192.0.2.0/32'))
6667db96d56Sopenharmony_ci         1
6677db96d56Sopenharmony_ci         >>> ip_network('192.0.2.1/32').compare_networks(ip_network('192.0.2.1/32'))
6687db96d56Sopenharmony_ci         0
6697db96d56Sopenharmony_ci
6707db96d56Sopenharmony_ci      .. deprecated:: 3.7
6717db96d56Sopenharmony_ci         It uses the same ordering and comparison algorithm as "<", "==", and ">"
6727db96d56Sopenharmony_ci
6737db96d56Sopenharmony_ci
6747db96d56Sopenharmony_ci.. class:: IPv6Network(address, strict=True)
6757db96d56Sopenharmony_ci
6767db96d56Sopenharmony_ci   Construct an IPv6 network definition.  *address* can be one of the following:
6777db96d56Sopenharmony_ci
6787db96d56Sopenharmony_ci   1. A string consisting of an IP address and an optional prefix length,
6797db96d56Sopenharmony_ci      separated by a slash (``/``).  The IP address is the network address,
6807db96d56Sopenharmony_ci      and the prefix length must be a single number, the *prefix*.  If no
6817db96d56Sopenharmony_ci      prefix length is provided, it's considered to be ``/128``.
6827db96d56Sopenharmony_ci
6837db96d56Sopenharmony_ci      Note that currently expanded netmasks are not supported.  That means
6847db96d56Sopenharmony_ci      ``2001:db00::0/24`` is a valid argument while ``2001:db00::0/ffff:ff00::``
6857db96d56Sopenharmony_ci      is not.
6867db96d56Sopenharmony_ci
6877db96d56Sopenharmony_ci   2. An integer that fits into 128 bits.  This is equivalent to a
6887db96d56Sopenharmony_ci      single-address network, with the network address being *address* and
6897db96d56Sopenharmony_ci      the mask being ``/128``.
6907db96d56Sopenharmony_ci
6917db96d56Sopenharmony_ci   3. An integer packed into a :class:`bytes` object of length 16, big-endian.
6927db96d56Sopenharmony_ci      The interpretation is similar to an integer *address*.
6937db96d56Sopenharmony_ci
6947db96d56Sopenharmony_ci   4. A two-tuple of an address description and a netmask, where the address
6957db96d56Sopenharmony_ci      description is either a string, a 128-bits integer, a 16-bytes packed
6967db96d56Sopenharmony_ci      integer, or an existing IPv6Address object; and the netmask is an
6977db96d56Sopenharmony_ci      integer representing the prefix length.
6987db96d56Sopenharmony_ci
6997db96d56Sopenharmony_ci   An :exc:`AddressValueError` is raised if *address* is not a valid IPv6
7007db96d56Sopenharmony_ci   address.  A :exc:`NetmaskValueError` is raised if the mask is not valid for
7017db96d56Sopenharmony_ci   an IPv6 address.
7027db96d56Sopenharmony_ci
7037db96d56Sopenharmony_ci   If *strict* is ``True`` and host bits are set in the supplied address,
7047db96d56Sopenharmony_ci   then :exc:`ValueError` is raised.  Otherwise, the host bits are masked out
7057db96d56Sopenharmony_ci   to determine the appropriate network address.
7067db96d56Sopenharmony_ci
7077db96d56Sopenharmony_ci   .. versionchanged:: 3.5
7087db96d56Sopenharmony_ci
7097db96d56Sopenharmony_ci      Added the two-tuple form for the *address* constructor parameter.
7107db96d56Sopenharmony_ci
7117db96d56Sopenharmony_ci   .. attribute:: version
7127db96d56Sopenharmony_ci   .. attribute:: max_prefixlen
7137db96d56Sopenharmony_ci   .. attribute:: is_multicast
7147db96d56Sopenharmony_ci   .. attribute:: is_private
7157db96d56Sopenharmony_ci   .. attribute:: is_unspecified
7167db96d56Sopenharmony_ci   .. attribute:: is_reserved
7177db96d56Sopenharmony_ci   .. attribute:: is_loopback
7187db96d56Sopenharmony_ci   .. attribute:: is_link_local
7197db96d56Sopenharmony_ci   .. attribute:: network_address
7207db96d56Sopenharmony_ci   .. attribute:: broadcast_address
7217db96d56Sopenharmony_ci   .. attribute:: hostmask
7227db96d56Sopenharmony_ci   .. attribute:: netmask
7237db96d56Sopenharmony_ci   .. attribute:: with_prefixlen
7247db96d56Sopenharmony_ci   .. attribute:: compressed
7257db96d56Sopenharmony_ci   .. attribute:: exploded
7267db96d56Sopenharmony_ci   .. attribute:: with_netmask
7277db96d56Sopenharmony_ci   .. attribute:: with_hostmask
7287db96d56Sopenharmony_ci   .. attribute:: num_addresses
7297db96d56Sopenharmony_ci   .. attribute:: prefixlen
7307db96d56Sopenharmony_ci   .. method:: hosts()
7317db96d56Sopenharmony_ci
7327db96d56Sopenharmony_ci      Returns an iterator over the usable hosts in the network.  The usable
7337db96d56Sopenharmony_ci      hosts are all the IP addresses that belong to the network, except the
7347db96d56Sopenharmony_ci      Subnet-Router anycast address.  For networks with a mask length of 127,
7357db96d56Sopenharmony_ci      the Subnet-Router anycast address is also included in the result.
7367db96d56Sopenharmony_ci      Networks with a mask of 128 will return a list containing the
7377db96d56Sopenharmony_ci      single host address.
7387db96d56Sopenharmony_ci
7397db96d56Sopenharmony_ci   .. method:: overlaps(other)
7407db96d56Sopenharmony_ci   .. method:: address_exclude(network)
7417db96d56Sopenharmony_ci   .. method:: subnets(prefixlen_diff=1, new_prefix=None)
7427db96d56Sopenharmony_ci   .. method:: supernet(prefixlen_diff=1, new_prefix=None)
7437db96d56Sopenharmony_ci   .. method:: subnet_of(other)
7447db96d56Sopenharmony_ci   .. method:: supernet_of(other)
7457db96d56Sopenharmony_ci   .. method:: compare_networks(other)
7467db96d56Sopenharmony_ci
7477db96d56Sopenharmony_ci      Refer to the corresponding attribute documentation in
7487db96d56Sopenharmony_ci      :class:`IPv4Network`.
7497db96d56Sopenharmony_ci
7507db96d56Sopenharmony_ci   .. attribute:: is_site_local
7517db96d56Sopenharmony_ci
7527db96d56Sopenharmony_ci      These attribute is true for the network as a whole if it is true
7537db96d56Sopenharmony_ci      for both the network address and the broadcast address.
7547db96d56Sopenharmony_ci
7557db96d56Sopenharmony_ci
7567db96d56Sopenharmony_ciOperators
7577db96d56Sopenharmony_ci^^^^^^^^^
7587db96d56Sopenharmony_ci
7597db96d56Sopenharmony_ciNetwork objects support some operators.  Unless stated otherwise, operators can
7607db96d56Sopenharmony_cionly be applied between compatible objects (i.e. IPv4 with IPv4, IPv6 with
7617db96d56Sopenharmony_ciIPv6).
7627db96d56Sopenharmony_ci
7637db96d56Sopenharmony_ci
7647db96d56Sopenharmony_ciLogical operators
7657db96d56Sopenharmony_ci"""""""""""""""""
7667db96d56Sopenharmony_ci
7677db96d56Sopenharmony_ciNetwork objects can be compared with the usual set of logical operators.
7687db96d56Sopenharmony_ciNetwork objects are ordered first by network address, then by net mask.
7697db96d56Sopenharmony_ci
7707db96d56Sopenharmony_ci
7717db96d56Sopenharmony_ciIteration
7727db96d56Sopenharmony_ci"""""""""
7737db96d56Sopenharmony_ci
7747db96d56Sopenharmony_ciNetwork objects can be iterated to list all the addresses belonging to the
7757db96d56Sopenharmony_cinetwork.  For iteration, *all* hosts are returned, including unusable hosts
7767db96d56Sopenharmony_ci(for usable hosts, use the :meth:`~IPv4Network.hosts` method).  An
7777db96d56Sopenharmony_ciexample::
7787db96d56Sopenharmony_ci
7797db96d56Sopenharmony_ci   >>> for addr in IPv4Network('192.0.2.0/28'):
7807db96d56Sopenharmony_ci   ...     addr
7817db96d56Sopenharmony_ci   ...
7827db96d56Sopenharmony_ci   IPv4Address('192.0.2.0')
7837db96d56Sopenharmony_ci   IPv4Address('192.0.2.1')
7847db96d56Sopenharmony_ci   IPv4Address('192.0.2.2')
7857db96d56Sopenharmony_ci   IPv4Address('192.0.2.3')
7867db96d56Sopenharmony_ci   IPv4Address('192.0.2.4')
7877db96d56Sopenharmony_ci   IPv4Address('192.0.2.5')
7887db96d56Sopenharmony_ci   IPv4Address('192.0.2.6')
7897db96d56Sopenharmony_ci   IPv4Address('192.0.2.7')
7907db96d56Sopenharmony_ci   IPv4Address('192.0.2.8')
7917db96d56Sopenharmony_ci   IPv4Address('192.0.2.9')
7927db96d56Sopenharmony_ci   IPv4Address('192.0.2.10')
7937db96d56Sopenharmony_ci   IPv4Address('192.0.2.11')
7947db96d56Sopenharmony_ci   IPv4Address('192.0.2.12')
7957db96d56Sopenharmony_ci   IPv4Address('192.0.2.13')
7967db96d56Sopenharmony_ci   IPv4Address('192.0.2.14')
7977db96d56Sopenharmony_ci   IPv4Address('192.0.2.15')
7987db96d56Sopenharmony_ci
7997db96d56Sopenharmony_ci
8007db96d56Sopenharmony_ciNetworks as containers of addresses
8017db96d56Sopenharmony_ci"""""""""""""""""""""""""""""""""""
8027db96d56Sopenharmony_ci
8037db96d56Sopenharmony_ciNetwork objects can act as containers of addresses.  Some examples::
8047db96d56Sopenharmony_ci
8057db96d56Sopenharmony_ci   >>> IPv4Network('192.0.2.0/28')[0]
8067db96d56Sopenharmony_ci   IPv4Address('192.0.2.0')
8077db96d56Sopenharmony_ci   >>> IPv4Network('192.0.2.0/28')[15]
8087db96d56Sopenharmony_ci   IPv4Address('192.0.2.15')
8097db96d56Sopenharmony_ci   >>> IPv4Address('192.0.2.6') in IPv4Network('192.0.2.0/28')
8107db96d56Sopenharmony_ci   True
8117db96d56Sopenharmony_ci   >>> IPv4Address('192.0.3.6') in IPv4Network('192.0.2.0/28')
8127db96d56Sopenharmony_ci   False
8137db96d56Sopenharmony_ci
8147db96d56Sopenharmony_ci
8157db96d56Sopenharmony_ciInterface objects
8167db96d56Sopenharmony_ci-----------------
8177db96d56Sopenharmony_ci
8187db96d56Sopenharmony_ciInterface objects are :term:`hashable`, so they can be used as keys in
8197db96d56Sopenharmony_cidictionaries.
8207db96d56Sopenharmony_ci
8217db96d56Sopenharmony_ci.. class:: IPv4Interface(address)
8227db96d56Sopenharmony_ci
8237db96d56Sopenharmony_ci   Construct an IPv4 interface.  The meaning of *address* is as in the
8247db96d56Sopenharmony_ci   constructor of :class:`IPv4Network`, except that arbitrary host addresses
8257db96d56Sopenharmony_ci   are always accepted.
8267db96d56Sopenharmony_ci
8277db96d56Sopenharmony_ci   :class:`IPv4Interface` is a subclass of :class:`IPv4Address`, so it inherits
8287db96d56Sopenharmony_ci   all the attributes from that class.  In addition, the following attributes
8297db96d56Sopenharmony_ci   are available:
8307db96d56Sopenharmony_ci
8317db96d56Sopenharmony_ci   .. attribute:: ip
8327db96d56Sopenharmony_ci
8337db96d56Sopenharmony_ci      The address (:class:`IPv4Address`) without network information.
8347db96d56Sopenharmony_ci
8357db96d56Sopenharmony_ci         >>> interface = IPv4Interface('192.0.2.5/24')
8367db96d56Sopenharmony_ci         >>> interface.ip
8377db96d56Sopenharmony_ci         IPv4Address('192.0.2.5')
8387db96d56Sopenharmony_ci
8397db96d56Sopenharmony_ci   .. attribute:: network
8407db96d56Sopenharmony_ci
8417db96d56Sopenharmony_ci      The network (:class:`IPv4Network`) this interface belongs to.
8427db96d56Sopenharmony_ci
8437db96d56Sopenharmony_ci         >>> interface = IPv4Interface('192.0.2.5/24')
8447db96d56Sopenharmony_ci         >>> interface.network
8457db96d56Sopenharmony_ci         IPv4Network('192.0.2.0/24')
8467db96d56Sopenharmony_ci
8477db96d56Sopenharmony_ci   .. attribute:: with_prefixlen
8487db96d56Sopenharmony_ci
8497db96d56Sopenharmony_ci      A string representation of the interface with the mask in prefix notation.
8507db96d56Sopenharmony_ci
8517db96d56Sopenharmony_ci         >>> interface = IPv4Interface('192.0.2.5/24')
8527db96d56Sopenharmony_ci         >>> interface.with_prefixlen
8537db96d56Sopenharmony_ci         '192.0.2.5/24'
8547db96d56Sopenharmony_ci
8557db96d56Sopenharmony_ci   .. attribute:: with_netmask
8567db96d56Sopenharmony_ci
8577db96d56Sopenharmony_ci      A string representation of the interface with the network as a net mask.
8587db96d56Sopenharmony_ci
8597db96d56Sopenharmony_ci         >>> interface = IPv4Interface('192.0.2.5/24')
8607db96d56Sopenharmony_ci         >>> interface.with_netmask
8617db96d56Sopenharmony_ci         '192.0.2.5/255.255.255.0'
8627db96d56Sopenharmony_ci
8637db96d56Sopenharmony_ci   .. attribute:: with_hostmask
8647db96d56Sopenharmony_ci
8657db96d56Sopenharmony_ci      A string representation of the interface with the network as a host mask.
8667db96d56Sopenharmony_ci
8677db96d56Sopenharmony_ci         >>> interface = IPv4Interface('192.0.2.5/24')
8687db96d56Sopenharmony_ci         >>> interface.with_hostmask
8697db96d56Sopenharmony_ci         '192.0.2.5/0.0.0.255'
8707db96d56Sopenharmony_ci
8717db96d56Sopenharmony_ci
8727db96d56Sopenharmony_ci.. class:: IPv6Interface(address)
8737db96d56Sopenharmony_ci
8747db96d56Sopenharmony_ci   Construct an IPv6 interface.  The meaning of *address* is as in the
8757db96d56Sopenharmony_ci   constructor of :class:`IPv6Network`, except that arbitrary host addresses
8767db96d56Sopenharmony_ci   are always accepted.
8777db96d56Sopenharmony_ci
8787db96d56Sopenharmony_ci   :class:`IPv6Interface` is a subclass of :class:`IPv6Address`, so it inherits
8797db96d56Sopenharmony_ci   all the attributes from that class.  In addition, the following attributes
8807db96d56Sopenharmony_ci   are available:
8817db96d56Sopenharmony_ci
8827db96d56Sopenharmony_ci   .. attribute:: ip
8837db96d56Sopenharmony_ci   .. attribute:: network
8847db96d56Sopenharmony_ci   .. attribute:: with_prefixlen
8857db96d56Sopenharmony_ci   .. attribute:: with_netmask
8867db96d56Sopenharmony_ci   .. attribute:: with_hostmask
8877db96d56Sopenharmony_ci
8887db96d56Sopenharmony_ci      Refer to the corresponding attribute documentation in
8897db96d56Sopenharmony_ci      :class:`IPv4Interface`.
8907db96d56Sopenharmony_ci
8917db96d56Sopenharmony_ci
8927db96d56Sopenharmony_ciOperators
8937db96d56Sopenharmony_ci^^^^^^^^^
8947db96d56Sopenharmony_ci
8957db96d56Sopenharmony_ciInterface objects support some operators.  Unless stated otherwise, operators
8967db96d56Sopenharmony_cican only be applied between compatible objects (i.e. IPv4 with IPv4, IPv6 with
8977db96d56Sopenharmony_ciIPv6).
8987db96d56Sopenharmony_ci
8997db96d56Sopenharmony_ci
9007db96d56Sopenharmony_ciLogical operators
9017db96d56Sopenharmony_ci"""""""""""""""""
9027db96d56Sopenharmony_ci
9037db96d56Sopenharmony_ciInterface objects can be compared with the usual set of logical operators.
9047db96d56Sopenharmony_ci
9057db96d56Sopenharmony_ciFor equality comparison (``==`` and ``!=``), both the IP address and network
9067db96d56Sopenharmony_cimust be the same for the objects to be equal.  An interface will not compare
9077db96d56Sopenharmony_ciequal to any address or network object.
9087db96d56Sopenharmony_ci
9097db96d56Sopenharmony_ciFor ordering (``<``, ``>``, etc) the rules are different.  Interface and
9107db96d56Sopenharmony_ciaddress objects with the same IP version can be compared, and the address
9117db96d56Sopenharmony_ciobjects will always sort before the interface objects.  Two interface objects
9127db96d56Sopenharmony_ciare first compared by their networks and, if those are the same, then by their
9137db96d56Sopenharmony_ciIP addresses.
9147db96d56Sopenharmony_ci
9157db96d56Sopenharmony_ci
9167db96d56Sopenharmony_ciOther Module Level Functions
9177db96d56Sopenharmony_ci----------------------------
9187db96d56Sopenharmony_ci
9197db96d56Sopenharmony_ciThe module also provides the following module level functions:
9207db96d56Sopenharmony_ci
9217db96d56Sopenharmony_ci.. function:: v4_int_to_packed(address)
9227db96d56Sopenharmony_ci
9237db96d56Sopenharmony_ci   Represent an address as 4 packed bytes in network (big-endian) order.
9247db96d56Sopenharmony_ci   *address* is an integer representation of an IPv4 IP address.  A
9257db96d56Sopenharmony_ci   :exc:`ValueError` is raised if the integer is negative or too large to be an
9267db96d56Sopenharmony_ci   IPv4 IP address.
9277db96d56Sopenharmony_ci
9287db96d56Sopenharmony_ci   >>> ipaddress.ip_address(3221225985)
9297db96d56Sopenharmony_ci   IPv4Address('192.0.2.1')
9307db96d56Sopenharmony_ci   >>> ipaddress.v4_int_to_packed(3221225985)
9317db96d56Sopenharmony_ci   b'\xc0\x00\x02\x01'
9327db96d56Sopenharmony_ci
9337db96d56Sopenharmony_ci
9347db96d56Sopenharmony_ci.. function:: v6_int_to_packed(address)
9357db96d56Sopenharmony_ci
9367db96d56Sopenharmony_ci   Represent an address as 16 packed bytes in network (big-endian) order.
9377db96d56Sopenharmony_ci   *address* is an integer representation of an IPv6 IP address.  A
9387db96d56Sopenharmony_ci   :exc:`ValueError` is raised if the integer is negative or too large to be an
9397db96d56Sopenharmony_ci   IPv6 IP address.
9407db96d56Sopenharmony_ci
9417db96d56Sopenharmony_ci
9427db96d56Sopenharmony_ci.. function:: summarize_address_range(first, last)
9437db96d56Sopenharmony_ci
9447db96d56Sopenharmony_ci   Return an iterator of the summarized network range given the first and last
9457db96d56Sopenharmony_ci   IP addresses.  *first* is the first :class:`IPv4Address` or
9467db96d56Sopenharmony_ci   :class:`IPv6Address` in the range and *last* is the last :class:`IPv4Address`
9477db96d56Sopenharmony_ci   or :class:`IPv6Address` in the range.  A :exc:`TypeError` is raised if
9487db96d56Sopenharmony_ci   *first* or *last* are not IP addresses or are not of the same version.  A
9497db96d56Sopenharmony_ci   :exc:`ValueError` is raised if *last* is not greater than *first* or if
9507db96d56Sopenharmony_ci   *first* address version is not 4 or 6.
9517db96d56Sopenharmony_ci
9527db96d56Sopenharmony_ci   >>> [ipaddr for ipaddr in ipaddress.summarize_address_range(
9537db96d56Sopenharmony_ci   ...    ipaddress.IPv4Address('192.0.2.0'),
9547db96d56Sopenharmony_ci   ...    ipaddress.IPv4Address('192.0.2.130'))]
9557db96d56Sopenharmony_ci   [IPv4Network('192.0.2.0/25'), IPv4Network('192.0.2.128/31'), IPv4Network('192.0.2.130/32')]
9567db96d56Sopenharmony_ci
9577db96d56Sopenharmony_ci
9587db96d56Sopenharmony_ci.. function:: collapse_addresses(addresses)
9597db96d56Sopenharmony_ci
9607db96d56Sopenharmony_ci   Return an iterator of the collapsed :class:`IPv4Network` or
9617db96d56Sopenharmony_ci   :class:`IPv6Network` objects.  *addresses* is an iterator of
9627db96d56Sopenharmony_ci   :class:`IPv4Network` or :class:`IPv6Network` objects.  A :exc:`TypeError` is
9637db96d56Sopenharmony_ci   raised if *addresses* contains mixed version objects.
9647db96d56Sopenharmony_ci
9657db96d56Sopenharmony_ci   >>> [ipaddr for ipaddr in
9667db96d56Sopenharmony_ci   ... ipaddress.collapse_addresses([ipaddress.IPv4Network('192.0.2.0/25'),
9677db96d56Sopenharmony_ci   ... ipaddress.IPv4Network('192.0.2.128/25')])]
9687db96d56Sopenharmony_ci   [IPv4Network('192.0.2.0/24')]
9697db96d56Sopenharmony_ci
9707db96d56Sopenharmony_ci
9717db96d56Sopenharmony_ci.. function:: get_mixed_type_key(obj)
9727db96d56Sopenharmony_ci
9737db96d56Sopenharmony_ci   Return a key suitable for sorting between networks and addresses.  Address
9747db96d56Sopenharmony_ci   and Network objects are not sortable by default; they're fundamentally
9757db96d56Sopenharmony_ci   different, so the expression::
9767db96d56Sopenharmony_ci
9777db96d56Sopenharmony_ci     IPv4Address('192.0.2.0') <= IPv4Network('192.0.2.0/24')
9787db96d56Sopenharmony_ci
9797db96d56Sopenharmony_ci   doesn't make sense.  There are some times however, where you may wish to
9807db96d56Sopenharmony_ci   have :mod:`ipaddress` sort these anyway.  If you need to do this, you can use
9817db96d56Sopenharmony_ci   this function as the *key* argument to :func:`sorted()`.
9827db96d56Sopenharmony_ci
9837db96d56Sopenharmony_ci   *obj* is either a network or address object.
9847db96d56Sopenharmony_ci
9857db96d56Sopenharmony_ci
9867db96d56Sopenharmony_ciCustom Exceptions
9877db96d56Sopenharmony_ci-----------------
9887db96d56Sopenharmony_ci
9897db96d56Sopenharmony_ciTo support more specific error reporting from class constructors, the
9907db96d56Sopenharmony_cimodule defines the following exceptions:
9917db96d56Sopenharmony_ci
9927db96d56Sopenharmony_ci.. exception:: AddressValueError(ValueError)
9937db96d56Sopenharmony_ci
9947db96d56Sopenharmony_ci   Any value error related to the address.
9957db96d56Sopenharmony_ci
9967db96d56Sopenharmony_ci
9977db96d56Sopenharmony_ci.. exception:: NetmaskValueError(ValueError)
9987db96d56Sopenharmony_ci
9997db96d56Sopenharmony_ci   Any value error related to the net mask.
1000