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