| :mod:`!ipaddress` --- IPv4/IPv6 manipulation library | |
| ==================================================== | |
| .. module:: ipaddress | |
| :synopsis: IPv4/IPv6 manipulation library. | |
| **Source code:** :source:`Lib/ipaddress.py` | |
| -------------- | |
| :mod:`!ipaddress` provides the capabilities to create, manipulate and | |
| operate on IPv4 and IPv6 addresses and networks. | |
| The functions and classes in this module make it straightforward to handle | |
| various tasks related to IP addresses, including checking whether or not two | |
| hosts are on the same subnet, iterating over all hosts in a particular | |
| subnet, checking whether or not a string represents a valid IP address or | |
| network definition, and so on. | |
| This is the full module API reference—for an overview and introduction, see | |
| :ref:`ipaddress-howto`. | |
| .. versionadded:: 3.3 | |
| .. testsetup:: | |
| import ipaddress | |
| from ipaddress import ( | |
| ip_network, IPv4Address, IPv4Interface, IPv4Network, | |
| ) | |
| Convenience factory functions | |
| ----------------------------- | |
| The :mod:`!ipaddress` module provides factory functions to conveniently create | |
| IP addresses, networks and interfaces: | |
| .. function:: ip_address(address) | |
| Return an :class:`IPv4Address` or :class:`IPv6Address` object depending on | |
| the IP address passed as argument. Either IPv4 or IPv6 addresses may be | |
| supplied; integers less than ``2**32`` will be considered to be IPv4 by default. | |
| A :exc:`ValueError` is raised if *address* does not represent a valid IPv4 | |
| or IPv6 address. | |
| >>> ipaddress.ip_address('192.168.0.1') | |
| IPv4Address('192.168.0.1') | |
| >>> ipaddress.ip_address('2001:db8::') | |
| IPv6Address('2001:db8::') | |
| .. function:: ip_network(address, strict=True) | |
| Return an :class:`IPv4Network` or :class:`IPv6Network` object depending on | |
| the IP address passed as argument. *address* is a string or integer | |
| representing the IP network. Either IPv4 or IPv6 networks may be supplied; | |
| integers less than ``2**32`` will be considered to be IPv4 by default. *strict* | |
| is passed to :class:`IPv4Network` or :class:`IPv6Network` constructor. A | |
| :exc:`ValueError` is raised if *address* does not represent a valid IPv4 or | |
| IPv6 address, or if the network has host bits set. | |
| >>> ipaddress.ip_network('192.168.0.0/28') | |
| IPv4Network('192.168.0.0/28') | |
| .. function:: ip_interface(address) | |
| Return an :class:`IPv4Interface` or :class:`IPv6Interface` object depending | |
| on the IP address passed as argument. *address* is a string or integer | |
| representing the IP address. Either IPv4 or IPv6 addresses may be supplied; | |
| integers less than ``2**32`` will be considered to be IPv4 by default. A | |
| :exc:`ValueError` is raised if *address* does not represent a valid IPv4 or | |
| IPv6 address. | |
| One downside of these convenience functions is that the need to handle both | |
| IPv4 and IPv6 formats means that error messages provide minimal | |
| information on the precise error, as the functions don't know whether the | |
| IPv4 or IPv6 format was intended. More detailed error reporting can be | |
| obtained by calling the appropriate version specific class constructors | |
| directly. | |
| IP Addresses | |
| ------------ | |
| Address objects | |
| ^^^^^^^^^^^^^^^ | |
| The :class:`IPv4Address` and :class:`IPv6Address` objects share a lot of common | |
| attributes. Some attributes that are only meaningful for IPv6 addresses are | |
| also implemented by :class:`IPv4Address` objects, in order to make it easier to | |
| write code that handles both IP versions correctly. Address objects are | |
| :term:`hashable`, so they can be used as keys in dictionaries. | |
| .. class:: IPv4Address(address) | |
| Construct an IPv4 address. An :exc:`AddressValueError` is raised if | |
| *address* is not a valid IPv4 address. | |
| The following constitutes a valid IPv4 address: | |
| 1. A string in decimal-dot notation, consisting of four decimal integers in | |
| the inclusive range 0--255, separated by dots (e.g. ``192.168.0.1``). Each | |
| integer represents an octet (byte) in the address. Leading zeroes are | |
| not tolerated to prevent confusion with octal notation. | |
| 2. An integer that fits into 32 bits. | |
| 3. An integer packed into a :class:`bytes` object of length 4 (most | |
| significant octet first). | |
| >>> ipaddress.IPv4Address('192.168.0.1') | |
| IPv4Address('192.168.0.1') | |
| >>> ipaddress.IPv4Address(3232235521) | |
| IPv4Address('192.168.0.1') | |
| >>> ipaddress.IPv4Address(b'\xC0\xA8\x00\x01') | |
| IPv4Address('192.168.0.1') | |
| .. versionchanged:: 3.8 | |
| Leading zeros are tolerated, even in ambiguous cases that look like | |
| octal notation. | |
| .. versionchanged:: 3.9.5 | |
| Leading zeros are no longer tolerated and are treated as an error. | |
| IPv4 address strings are now parsed as strict as glibc | |
| :func:`~socket.inet_pton`. | |
| .. attribute:: version | |
| The appropriate version number: ``4`` for IPv4, ``6`` for IPv6. | |
| .. versionchanged:: 3.14 | |
| Made available on the class. | |
| .. attribute:: max_prefixlen | |
| The total number of bits in the address representation for this | |
| version: ``32`` for IPv4, ``128`` for IPv6. | |
| The prefix defines the number of leading bits in an address that | |
| are compared to determine whether or not an address is part of a | |
| network. | |
| .. versionchanged:: 3.14 | |
| Made available on the class. | |
| .. attribute:: compressed | |
| .. attribute:: exploded | |
| The string representation in dotted decimal notation. Leading zeroes | |
| are never included in the representation. | |
| As IPv4 does not define a shorthand notation for addresses with octets | |
| set to zero, these two attributes are always the same as ``str(addr)`` | |
| for IPv4 addresses. Exposing these attributes makes it easier to | |
| write display code that can handle both IPv4 and IPv6 addresses. | |
| .. attribute:: packed | |
| The binary representation of this address - a :class:`bytes` object of | |
| the appropriate length (most significant octet first). This is 4 bytes | |
| for IPv4 and 16 bytes for IPv6. | |
| .. attribute:: reverse_pointer | |
| The name of the reverse DNS PTR record for the IP address, e.g.:: | |
| >>> ipaddress.ip_address("127.0.0.1").reverse_pointer | |
| '1.0.0.127.in-addr.arpa' | |
| >>> ipaddress.ip_address("2001:db8::1").reverse_pointer | |
| '1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa' | |
| This is the name that could be used for performing a PTR lookup, not the | |
| resolved hostname itself. | |
| .. versionadded:: 3.5 | |
| .. attribute:: is_multicast | |
| ``True`` if the address is reserved for multicast use. See | |
| :RFC:`3171` (for IPv4) or :RFC:`2373` (for IPv6). | |
| .. attribute:: is_private | |
| ``True`` if the address is defined as not globally reachable by | |
| iana-ipv4-special-registry_ (for IPv4) or iana-ipv6-special-registry_ | |
| (for IPv6) with the following exceptions: | |
| * ``is_private`` is ``False`` for the shared address space (``100.64.0.0/10``) | |
| * For IPv4-mapped IPv6-addresses the ``is_private`` value is determined by the | |
| semantics of the underlying IPv4 addresses and the following condition holds | |
| (see :attr:`IPv6Address.ipv4_mapped`):: | |
| address.is_private == address.ipv4_mapped.is_private | |
| ``is_private`` has value opposite to :attr:`is_global`, except for the shared address space | |
| (``100.64.0.0/10`` range) where they are both ``False``. | |
| .. versionchanged:: 3.13 | |
| Fixed some false positives and false negatives. | |
| * ``192.0.0.0/24`` is considered private with the exception of ``192.0.0.9/32`` and | |
| ``192.0.0.10/32`` (previously: only the ``192.0.0.0/29`` sub-range was considered private). | |
| * ``64:ff9b:1::/48`` is considered private. | |
| * ``2002::/16`` is considered private. | |
| * There are exceptions within ``2001::/23`` (otherwise considered private): ``2001:1::1/128``, | |
| ``2001:1::2/128``, ``2001:3::/32``, ``2001:4:112::/48``, ``2001:20::/28``, ``2001:30::/28``. | |
| The exceptions are not considered private. | |
| .. attribute:: is_global | |
| ``True`` if the address is defined as globally reachable by | |
| iana-ipv4-special-registry_ (for IPv4) or iana-ipv6-special-registry_ | |
| (for IPv6) with the following exception: | |
| For IPv4-mapped IPv6-addresses the ``is_private`` value is determined by the | |
| semantics of the underlying IPv4 addresses and the following condition holds | |
| (see :attr:`IPv6Address.ipv4_mapped`):: | |
| address.is_global == address.ipv4_mapped.is_global | |
| ``is_global`` has value opposite to :attr:`is_private`, except for the shared address space | |
| (``100.64.0.0/10`` range) where they are both ``False``. | |
| .. versionadded:: 3.4 | |
| .. versionchanged:: 3.13 | |
| Fixed some false positives and false negatives, see :attr:`is_private` for details. | |
| .. attribute:: is_unspecified | |
| ``True`` if the address is unspecified. See :RFC:`5735` (for IPv4) | |
| or :RFC:`2373` (for IPv6). | |
| .. attribute:: is_reserved | |
| ``True`` if the address is noted as reserved by the IETF. | |
| For IPv4, this is only ``240.0.0.0/4``, the ``Reserved`` address block. | |
| For IPv6, this is all addresses `allocated <iana-ipv6-address-space_>`__ as | |
| ``Reserved by IETF`` for future use. | |
| .. note:: For IPv4, ``is_reserved`` is not related to the address block value of the | |
| ``Reserved-by-Protocol`` column in iana-ipv4-special-registry_. | |
| .. caution:: For IPv6, ``fec0::/10`` a former Site-Local scoped address prefix is | |
| currently excluded from that list (see :attr:`~IPv6Address.is_site_local` & :rfc:`3879`). | |
| .. attribute:: is_loopback | |
| ``True`` if this is a loopback address. See :RFC:`3330` (for IPv4) | |
| or :RFC:`2373` (for IPv6). | |
| .. attribute:: is_link_local | |
| ``True`` if the address is reserved for link-local usage. See | |
| :RFC:`3927`. | |
| .. attribute:: ipv6_mapped | |
| :class:`IPv6Address` object representing the IPv4-mapped IPv6 address. See :RFC:`4291`. | |
| .. versionadded:: 3.13 | |
| .. _iana-ipv4-special-registry: https://www.iana.org/assignments/iana-ipv4-special-registry/iana-ipv4-special-registry.xhtml | |
| .. _iana-ipv6-special-registry: https://www.iana.org/assignments/iana-ipv6-special-registry/iana-ipv6-special-registry.xhtml | |
| .. _iana-ipv6-address-space: https://www.iana.org/assignments/ipv6-address-space/ipv6-address-space.xhtml | |
| .. method:: IPv4Address.__format__(fmt) | |
| Returns a string representation of the IP address, controlled by | |
| an explicit format string. | |
| *fmt* can be one of the following: ``'s'``, the default option, | |
| equivalent to :func:`str`, ``'b'`` for a zero-padded binary string, | |
| ``'X'`` or ``'x'`` for an uppercase or lowercase hexadecimal | |
| representation, or ``'n'``, which is equivalent to ``'b'`` for IPv4 | |
| addresses and ``'x'`` for IPv6. For binary and hexadecimal | |
| representations, the form specifier ``'#'`` and the grouping option | |
| ``'_'`` are available. ``__format__`` is used by ``format``, ``str.format`` | |
| and f-strings. | |
| >>> format(ipaddress.IPv4Address('192.168.0.1')) | |
| '192.168.0.1' | |
| >>> '{:#b}'.format(ipaddress.IPv4Address('192.168.0.1')) | |
| '0b11000000101010000000000000000001' | |
| >>> f'{ipaddress.IPv6Address("2001:db8::1000"):s}' | |
| '2001:db8::1000' | |
| >>> format(ipaddress.IPv6Address('2001:db8::1000'), '_X') | |
| '2001_0DB8_0000_0000_0000_0000_0000_1000' | |
| >>> '{:#_n}'.format(ipaddress.IPv6Address('2001:db8::1000')) | |
| '0x2001_0db8_0000_0000_0000_0000_0000_1000' | |
| .. versionadded:: 3.9 | |
| .. class:: IPv6Address(address) | |
| Construct an IPv6 address. An :exc:`AddressValueError` is raised if | |
| *address* is not a valid IPv6 address. | |
| The following constitutes a valid IPv6 address: | |
| 1. A string consisting of eight groups of four hexadecimal digits, each | |
| group representing 16 bits. The groups are separated by colons. | |
| This describes an *exploded* (longhand) notation. The string can | |
| also be *compressed* (shorthand notation) by various means. See | |
| :RFC:`4291` for details. For example, | |
| ``"0000:0000:0000:0000:0000:0abc:0007:0def"`` can be compressed to | |
| ``"::abc:7:def"``. | |
| Optionally, the string may also have a scope zone ID, expressed | |
| with a suffix ``%scope_id``. If present, the scope ID must be non-empty, | |
| and may not contain ``%``. | |
| See :RFC:`4007` for details. | |
| For example, ``fe80::1234%1`` might identify address ``fe80::1234`` on the first link of the node. | |
| 2. An integer that fits into 128 bits. | |
| 3. An integer packed into a :class:`bytes` object of length 16, big-endian. | |
| >>> ipaddress.IPv6Address('2001:db8::1000') | |
| IPv6Address('2001:db8::1000') | |
| >>> ipaddress.IPv6Address('ff02::5678%1') | |
| IPv6Address('ff02::5678%1') | |
| .. attribute:: compressed | |
| The short form of the address representation, with leading zeroes in | |
| groups omitted and the longest sequence of groups consisting entirely of | |
| zeroes collapsed to a single empty group. | |
| This is also the value returned by ``str(addr)`` for IPv6 addresses. | |
| .. attribute:: exploded | |
| The long form of the address representation, with all leading zeroes and | |
| groups consisting entirely of zeroes included. | |
| For the following attributes and methods, see the corresponding | |
| documentation of the :class:`IPv4Address` class: | |
| .. attribute:: packed | |
| .. attribute:: reverse_pointer | |
| .. attribute:: version | |
| .. attribute:: max_prefixlen | |
| .. attribute:: is_multicast | |
| .. attribute:: is_private | |
| .. attribute:: is_global | |
| .. versionadded:: 3.4 | |
| .. attribute:: is_unspecified | |
| .. attribute:: is_reserved | |
| .. attribute:: is_loopback | |
| .. attribute:: is_link_local | |
| .. attribute:: is_site_local | |
| ``True`` if the address is reserved for site-local usage. Note that | |
| the site-local address space has been deprecated by :RFC:`3879`. Use | |
| :attr:`~IPv4Address.is_private` to test if this address is in the | |
| space of unique local addresses as defined by :RFC:`4193`. | |
| .. attribute:: ipv4_mapped | |
| For addresses that appear to be IPv4 mapped addresses in the range | |
| ``::FFFF:0:0/96`` as defined by :RFC:`4291`, this property reports the | |
| embedded IPv4 address. For any other address, this property will be ``None``. | |
| .. attribute:: scope_id | |
| For scoped addresses as defined by :RFC:`4007`, this property identifies | |
| the particular zone of the address's scope that the address belongs to, | |
| as a string. When no scope zone is specified, this property will be ``None``. | |
| .. attribute:: sixtofour | |
| For addresses that appear to be 6to4 addresses (starting with | |
| ``2002::/16``) as defined by :RFC:`3056`, this property will report | |
| the embedded IPv4 address. For any other address, this property will | |
| be ``None``. | |
| .. attribute:: teredo | |
| For addresses that appear to be Teredo addresses (starting with | |
| ``2001::/32``) as defined by :RFC:`4380`, this property will report | |
| the embedded ``(server, client)`` IP address pair. For any other | |
| address, this property will be ``None``. | |
| .. method:: IPv6Address.__format__(fmt) | |
| Refer to the corresponding method documentation in | |
| :class:`IPv4Address`. | |
| .. versionadded:: 3.9 | |
| Conversion to Strings and Integers | |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| To interoperate with networking interfaces such as the socket module, | |
| addresses must be converted to strings or integers. This is handled using | |
| the :func:`str` and :func:`int` builtin functions:: | |
| >>> str(ipaddress.IPv4Address('192.168.0.1')) | |
| '192.168.0.1' | |
| >>> int(ipaddress.IPv4Address('192.168.0.1')) | |
| 3232235521 | |
| >>> str(ipaddress.IPv6Address('::1')) | |
| '::1' | |
| >>> int(ipaddress.IPv6Address('::1')) | |
| 1 | |
| Note that IPv6 scoped addresses are converted to integers without scope zone ID. | |
| Operators | |
| ^^^^^^^^^ | |
| Address objects support some operators. Unless stated otherwise, operators can | |
| only be applied between compatible objects (i.e. IPv4 with IPv4, IPv6 with | |
| IPv6). | |
| Comparison operators | |
| """""""""""""""""""" | |
| Address objects can be compared with the usual set of comparison operators. | |
| Same IPv6 addresses with different scope zone IDs are not equal. | |
| Some examples:: | |
| >>> IPv4Address('127.0.0.2') > IPv4Address('127.0.0.1') | |
| True | |
| >>> IPv4Address('127.0.0.2') == IPv4Address('127.0.0.1') | |
| False | |
| >>> IPv4Address('127.0.0.2') != IPv4Address('127.0.0.1') | |
| True | |
| >>> IPv6Address('fe80::1234') == IPv6Address('fe80::1234%1') | |
| False | |
| >>> IPv6Address('fe80::1234%1') != IPv6Address('fe80::1234%2') | |
| True | |
| Arithmetic operators | |
| """""""""""""""""""" | |
| Integers can be added to or subtracted from address objects. Some examples:: | |
| >>> IPv4Address('127.0.0.2') + 3 | |
| IPv4Address('127.0.0.5') | |
| >>> IPv4Address('127.0.0.2') - 3 | |
| IPv4Address('126.255.255.255') | |
| >>> IPv4Address('255.255.255.255') + 1 | |
| Traceback (most recent call last): | |
| File "<stdin>", line 1, in <module> | |
| ipaddress.AddressValueError: 4294967296 (>= 2**32) is not permitted as an IPv4 address | |
| IP Network definitions | |
| ---------------------- | |
| The :class:`IPv4Network` and :class:`IPv6Network` objects provide a mechanism | |
| for defining and inspecting IP network definitions. A network definition | |
| consists of a *mask* and a *network address*, and as such defines a range of | |
| IP addresses that equal the network address when masked (binary AND) with the | |
| mask. For example, a network definition with the mask ``255.255.255.0`` and | |
| the network address ``192.168.1.0`` consists of IP addresses in the inclusive | |
| range ``192.168.1.0`` to ``192.168.1.255``. | |
| Prefix, net mask and host mask | |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| There are several equivalent ways to specify IP network masks. A *prefix* | |
| ``/<nbits>`` is a notation that denotes how many high-order bits are set in | |
| the network mask. A *net mask* is an IP address with some number of | |
| high-order bits set. Thus the prefix ``/24`` is equivalent to the net mask | |
| ``255.255.255.0`` in IPv4, or ``ffff:ff00::`` in IPv6. In addition, a | |
| *host mask* is the logical inverse of a *net mask*, and is sometimes used | |
| (for example in Cisco access control lists) to denote a network mask. The | |
| host mask equivalent to ``/24`` in IPv4 is ``0.0.0.255``. | |
| Network objects | |
| ^^^^^^^^^^^^^^^ | |
| All attributes implemented by address objects are implemented by network | |
| objects as well. In addition, network objects implement additional attributes. | |
| All of these are common between :class:`IPv4Network` and :class:`IPv6Network`, | |
| so to avoid duplication they are only documented for :class:`IPv4Network`. | |
| Network objects are :term:`hashable`, so they can be used as keys in | |
| dictionaries. | |
| .. class:: IPv4Network(address, strict=True) | |
| Construct an IPv4 network definition. *address* can be one of the following: | |
| 1. A string consisting of an IP address and an optional mask, separated by | |
| a slash (``/``). The IP address is the network address, and the mask | |
| can be either a single number, which means it's a *prefix*, or a string | |
| representation of an IPv4 address. If it's the latter, the mask is | |
| interpreted as a *net mask* if it starts with a non-zero field, or as a | |
| *host mask* if it starts with a zero field, with the single exception of | |
| an all-zero mask which is treated as a *net mask*. If no mask is provided, | |
| it's considered to be ``/32``. | |
| For example, the following *address* specifications are equivalent: | |
| ``192.168.1.0/24``, ``192.168.1.0/255.255.255.0`` and | |
| ``192.168.1.0/0.0.0.255``. | |
| 2. An integer that fits into 32 bits. This is equivalent to a | |
| single-address network, with the network address being *address* and | |
| the mask being ``/32``. | |
| 3. An integer packed into a :class:`bytes` object of length 4, big-endian. | |
| The interpretation is similar to an integer *address*. | |
| 4. A two-tuple of an address description and a netmask, where the address | |
| description is either a string, a 32-bit integer, a 4-byte packed | |
| integer, or an existing :class:`IPv4Address` object; and the netmask is | |
| either an integer representing the prefix length (e.g. ``24``) or a | |
| string representing the prefix mask (e.g. ``255.255.255.0``). | |
| An :exc:`AddressValueError` is raised if *address* is not a valid IPv4 | |
| address. A :exc:`NetmaskValueError` is raised if the mask is not valid for | |
| an IPv4 address. | |
| If *strict* is ``True`` and host bits are set in the supplied address, | |
| then :exc:`ValueError` is raised. Otherwise, the host bits are masked out | |
| to determine the appropriate network address. | |
| Unless stated otherwise, all network methods accepting other network/address | |
| objects will raise :exc:`TypeError` if the argument's IP version is | |
| incompatible to ``self``. | |
| .. versionchanged:: 3.5 | |
| Added the two-tuple form for the *address* constructor parameter. | |
| .. attribute:: version | |
| .. attribute:: max_prefixlen | |
| Refer to the corresponding attribute documentation in | |
| :class:`IPv4Address`. | |
| .. attribute:: is_multicast | |
| .. attribute:: is_private | |
| .. attribute:: is_unspecified | |
| .. attribute:: is_reserved | |
| .. attribute:: is_loopback | |
| .. attribute:: is_link_local | |
| These attributes are true for the network as a whole if they are true | |
| for both the network address and the broadcast address. | |
| .. attribute:: network_address | |
| The network address for the network. The network address and the | |
| prefix length together uniquely define a network. | |
| .. attribute:: broadcast_address | |
| The broadcast address for the network. Packets sent to the broadcast | |
| address should be received by every host on the network. | |
| .. attribute:: hostmask | |
| The host mask, as an :class:`IPv4Address` object. | |
| .. attribute:: netmask | |
| The net mask, as an :class:`IPv4Address` object. | |
| .. attribute:: with_prefixlen | |
| .. attribute:: compressed | |
| .. attribute:: exploded | |
| A string representation of the network, with the mask in prefix | |
| notation. | |
| ``with_prefixlen`` and ``compressed`` are always the same as | |
| ``str(network)``. | |
| ``exploded`` uses the exploded form the network address. | |
| .. attribute:: with_netmask | |
| A string representation of the network, with the mask in net mask | |
| notation. | |
| .. attribute:: with_hostmask | |
| A string representation of the network, with the mask in host mask | |
| notation. | |
| .. attribute:: num_addresses | |
| The total number of addresses in the network. | |
| .. attribute:: prefixlen | |
| Length of the network prefix, in bits. | |
| .. method:: hosts() | |
| Returns an iterator over the usable hosts in the network. The usable | |
| hosts are all the IP addresses that belong to the network, except the | |
| network address itself and the network broadcast address. For networks | |
| with a mask length of 31, the network address and network broadcast | |
| address are also included in the result. Networks with a mask of 32 | |
| will return a list containing the single host address. | |
| >>> list(ip_network('192.0.2.0/29').hosts()) #doctest: +NORMALIZE_WHITESPACE | |
| [IPv4Address('192.0.2.1'), IPv4Address('192.0.2.2'), | |
| IPv4Address('192.0.2.3'), IPv4Address('192.0.2.4'), | |
| IPv4Address('192.0.2.5'), IPv4Address('192.0.2.6')] | |
| >>> list(ip_network('192.0.2.0/31').hosts()) | |
| [IPv4Address('192.0.2.0'), IPv4Address('192.0.2.1')] | |
| >>> list(ip_network('192.0.2.1/32').hosts()) | |
| [IPv4Address('192.0.2.1')] | |
| .. method:: overlaps(other) | |
| ``True`` if this network is partly or wholly contained in *other* or | |
| *other* is wholly contained in this network. | |
| .. method:: address_exclude(network) | |
| Computes the network definitions resulting from removing the given | |
| *network* from this one. Returns an iterator of network objects. | |
| Raises :exc:`ValueError` if *network* is not completely contained in | |
| this network. | |
| >>> n1 = ip_network('192.0.2.0/28') | |
| >>> n2 = ip_network('192.0.2.1/32') | |
| >>> list(n1.address_exclude(n2)) #doctest: +NORMALIZE_WHITESPACE | |
| [IPv4Network('192.0.2.8/29'), IPv4Network('192.0.2.4/30'), | |
| IPv4Network('192.0.2.2/31'), IPv4Network('192.0.2.0/32')] | |
| .. method:: subnets(prefixlen_diff=1, new_prefix=None) | |
| The subnets that join to make the current network definition, depending | |
| on the argument values. *prefixlen_diff* is the amount our prefix | |
| length should be increased by. *new_prefix* is the desired new | |
| prefix of the subnets; it must be larger than our prefix. One and | |
| only one of *prefixlen_diff* and *new_prefix* must be set. Returns an | |
| iterator of network objects. | |
| >>> list(ip_network('192.0.2.0/24').subnets()) | |
| [IPv4Network('192.0.2.0/25'), IPv4Network('192.0.2.128/25')] | |
| >>> list(ip_network('192.0.2.0/24').subnets(prefixlen_diff=2)) #doctest: +NORMALIZE_WHITESPACE | |
| [IPv4Network('192.0.2.0/26'), IPv4Network('192.0.2.64/26'), | |
| IPv4Network('192.0.2.128/26'), IPv4Network('192.0.2.192/26')] | |
| >>> list(ip_network('192.0.2.0/24').subnets(new_prefix=26)) #doctest: +NORMALIZE_WHITESPACE | |
| [IPv4Network('192.0.2.0/26'), IPv4Network('192.0.2.64/26'), | |
| IPv4Network('192.0.2.128/26'), IPv4Network('192.0.2.192/26')] | |
| >>> list(ip_network('192.0.2.0/24').subnets(new_prefix=23)) | |
| Traceback (most recent call last): | |
| File "<stdin>", line 1, in <module> | |
| raise ValueError('new prefix must be longer') | |
| ValueError: new prefix must be longer | |
| >>> list(ip_network('192.0.2.0/24').subnets(new_prefix=25)) | |
| [IPv4Network('192.0.2.0/25'), IPv4Network('192.0.2.128/25')] | |
| .. method:: supernet(prefixlen_diff=1, new_prefix=None) | |
| The supernet containing this network definition, depending on the | |
| argument values. *prefixlen_diff* is the amount our prefix length | |
| should be decreased by. *new_prefix* is the desired new prefix of | |
| the supernet; it must be smaller than our prefix. One and only one | |
| of *prefixlen_diff* and *new_prefix* must be set. Returns a single | |
| network object. | |
| >>> ip_network('192.0.2.0/24').supernet() | |
| IPv4Network('192.0.2.0/23') | |
| >>> ip_network('192.0.2.0/24').supernet(prefixlen_diff=2) | |
| IPv4Network('192.0.0.0/22') | |
| >>> ip_network('192.0.2.0/24').supernet(new_prefix=20) | |
| IPv4Network('192.0.0.0/20') | |
| .. method:: subnet_of(other) | |
| Return ``True`` if this network is a subnet of *other*. | |
| >>> a = ip_network('192.168.1.0/24') | |
| >>> b = ip_network('192.168.1.128/30') | |
| >>> b.subnet_of(a) | |
| True | |
| .. versionadded:: 3.7 | |
| .. method:: supernet_of(other) | |
| Return ``True`` if this network is a supernet of *other*. | |
| >>> a = ip_network('192.168.1.0/24') | |
| >>> b = ip_network('192.168.1.128/30') | |
| >>> a.supernet_of(b) | |
| True | |
| .. versionadded:: 3.7 | |
| .. method:: compare_networks(other) | |
| Compare this network to *other*. In this comparison only the network | |
| addresses are considered; host bits aren't. Returns either ``-1``, | |
| ``0`` or ``1``. | |
| >>> ip_network('192.0.2.1/32').compare_networks(ip_network('192.0.2.2/32')) | |
| -1 | |
| >>> ip_network('192.0.2.1/32').compare_networks(ip_network('192.0.2.0/32')) | |
| 1 | |
| >>> ip_network('192.0.2.1/32').compare_networks(ip_network('192.0.2.1/32')) | |
| 0 | |
| .. deprecated:: 3.7 | |
| It uses the same ordering and comparison algorithm as "<", "==", and ">" | |
| .. method:: next_network(next_prefix=None) | |
| Finds the next closest network of prefix size *next_prefix*. If | |
| *next_prefix=None*, then the current network prefix will be used. | |
| Returns a single network object. | |
| Raises :exc:`ValueError` if *next_prefix* is out of range or no further | |
| network of the requested size exists. | |
| >>> IPv4Network('192.0.2.0/24').next_network() | |
| IPv4Network('192.0.3.0/24') | |
| >>> IPv4Network('192.0.2.0/24').next_network(next_prefix=25) | |
| IPv4Network('192.0.3.0/25') | |
| >>> IPv4Network('192.0.2.0/24').next_network(next_prefix=23) | |
| IPv4Network('192.0.4.0/23') | |
| >>> IPv4Network('192.0.80.0/22').next_network(next_prefix=18) | |
| IPv4Network('192.0.128.0/18') | |
| >>> IPv4Network('192.0.80.0/22').next_network(next_prefix=50) | |
| Traceback (most recent call last): | |
| File "<stdin>", line 1, in <module> | |
| raise ValueError( | |
| ValueError: next prefix must be between 1 and 32 | |
| >>> IPv4Network('255.255.255.0/24').next_network() | |
| Traceback (most recent call last): | |
| File "<stdin>", line 1, in <module> | |
| raise ValueError( | |
| ValueError: out of address space, cannot make another /24 network | |
| .. versionadded:: 3.16 | |
| .. class:: IPv6Network(address, strict=True) | |
| Construct an IPv6 network definition. *address* can be one of the following: | |
| 1. A string consisting of an IP address and an optional prefix length, | |
| separated by a slash (``/``). The IP address is the network address, | |
| and the prefix length must be a single number, the *prefix*. If no | |
| prefix length is provided, it's considered to be ``/128``. | |
| Note that currently expanded netmasks are not supported. That means | |
| ``2001:db00::0/24`` is a valid argument while ``2001:db00::0/ffff:ff00::`` | |
| is not. | |
| 2. An integer that fits into 128 bits. This is equivalent to a | |
| single-address network, with the network address being *address* and | |
| the mask being ``/128``. | |
| 3. An integer packed into a :class:`bytes` object of length 16, big-endian. | |
| The interpretation is similar to an integer *address*. | |
| 4. A two-tuple of an address description and a netmask, where the address | |
| description is either a string, a 128-bit integer, a 16-byte packed | |
| integer, or an existing :class:`IPv6Address` object; and the netmask is | |
| an integer representing the prefix length. | |
| An :exc:`AddressValueError` is raised if *address* is not a valid IPv6 | |
| address. A :exc:`NetmaskValueError` is raised if the mask is not valid for | |
| an IPv6 address. | |
| If *strict* is ``True`` and host bits are set in the supplied address, | |
| then :exc:`ValueError` is raised. Otherwise, the host bits are masked out | |
| to determine the appropriate network address. | |
| .. versionchanged:: 3.5 | |
| Added the two-tuple form for the *address* constructor parameter. | |
| .. attribute:: version | |
| .. attribute:: max_prefixlen | |
| .. attribute:: is_multicast | |
| .. attribute:: is_private | |
| .. attribute:: is_unspecified | |
| .. attribute:: is_reserved | |
| .. attribute:: is_loopback | |
| .. attribute:: is_link_local | |
| .. attribute:: network_address | |
| .. attribute:: broadcast_address | |
| .. attribute:: hostmask | |
| .. attribute:: netmask | |
| .. attribute:: with_prefixlen | |
| .. attribute:: compressed | |
| .. attribute:: exploded | |
| .. attribute:: with_netmask | |
| .. attribute:: with_hostmask | |
| .. attribute:: num_addresses | |
| .. attribute:: prefixlen | |
| .. method:: hosts() | |
| Returns an iterator over the usable hosts in the network. The usable | |
| hosts are all the IP addresses that belong to the network, except the | |
| Subnet-Router anycast address. For networks with a mask length of 127, | |
| the Subnet-Router anycast address is also included in the result. | |
| Networks with a mask of 128 will return a list containing the | |
| single host address. | |
| .. method:: overlaps(other) | |
| .. method:: address_exclude(network) | |
| .. method:: subnets(prefixlen_diff=1, new_prefix=None) | |
| .. method:: supernet(prefixlen_diff=1, new_prefix=None) | |
| .. method:: subnet_of(other) | |
| .. method:: supernet_of(other) | |
| .. method:: next_network(next_prefix=None) | |
| .. method:: compare_networks(other) | |
| Refer to the corresponding attribute documentation in | |
| :class:`IPv4Network`. | |
| .. attribute:: is_site_local | |
| This attribute is true for the network as a whole if it is true | |
| for both the network address and the broadcast address. | |
| Operators | |
| ^^^^^^^^^ | |
| Network objects support some operators. Unless stated otherwise, operators can | |
| only be applied between compatible objects (i.e. IPv4 with IPv4, IPv6 with | |
| IPv6). | |
| Logical operators | |
| """"""""""""""""" | |
| Network objects can be compared with the usual set of logical operators. | |
| Network objects are ordered first by network address, then by net mask. | |
| Iteration | |
| """"""""" | |
| Network objects can be iterated to list all the addresses belonging to the | |
| network. For iteration, *all* hosts are returned, including unusable hosts | |
| (for usable hosts, use the :meth:`~IPv4Network.hosts` method). An | |
| example:: | |
| >>> for addr in IPv4Network('192.0.2.0/28'): | |
| ... addr | |
| ... | |
| IPv4Address('192.0.2.0') | |
| IPv4Address('192.0.2.1') | |
| IPv4Address('192.0.2.2') | |
| IPv4Address('192.0.2.3') | |
| IPv4Address('192.0.2.4') | |
| IPv4Address('192.0.2.5') | |
| IPv4Address('192.0.2.6') | |
| IPv4Address('192.0.2.7') | |
| IPv4Address('192.0.2.8') | |
| IPv4Address('192.0.2.9') | |
| IPv4Address('192.0.2.10') | |
| IPv4Address('192.0.2.11') | |
| IPv4Address('192.0.2.12') | |
| IPv4Address('192.0.2.13') | |
| IPv4Address('192.0.2.14') | |
| IPv4Address('192.0.2.15') | |
| Networks as containers of addresses | |
| """"""""""""""""""""""""""""""""""" | |
| Network objects can act as containers of addresses. Some examples:: | |
| >>> IPv4Network('192.0.2.0/28')[0] | |
| IPv4Address('192.0.2.0') | |
| >>> IPv4Network('192.0.2.0/28')[15] | |
| IPv4Address('192.0.2.15') | |
| >>> IPv4Address('192.0.2.6') in IPv4Network('192.0.2.0/28') | |
| True | |
| >>> IPv4Address('192.0.3.6') in IPv4Network('192.0.2.0/28') | |
| False | |
| Interface objects | |
| ----------------- | |
| Interface objects are :term:`hashable`, so they can be used as keys in | |
| dictionaries. | |
| .. class:: IPv4Interface(address) | |
| Construct an IPv4 interface. The meaning of *address* is as in the | |
| constructor of :class:`IPv4Network`, except that arbitrary host addresses | |
| are always accepted. | |
| :class:`IPv4Interface` is a subclass of :class:`IPv4Address`, so it inherits | |
| all the attributes from that class. In addition, the following attributes | |
| are available: | |
| .. attribute:: ip | |
| The address (:class:`IPv4Address`) without network information. | |
| >>> interface = IPv4Interface('192.0.2.5/24') | |
| >>> interface.ip | |
| IPv4Address('192.0.2.5') | |
| .. attribute:: network | |
| The network (:class:`IPv4Network`) this interface belongs to. | |
| >>> interface = IPv4Interface('192.0.2.5/24') | |
| >>> interface.network | |
| IPv4Network('192.0.2.0/24') | |
| .. attribute:: with_prefixlen | |
| A string representation of the interface with the mask in prefix notation. | |
| >>> interface = IPv4Interface('192.0.2.5/24') | |
| >>> interface.with_prefixlen | |
| '192.0.2.5/24' | |
| .. attribute:: with_netmask | |
| A string representation of the interface with the network as a net mask. | |
| >>> interface = IPv4Interface('192.0.2.5/24') | |
| >>> interface.with_netmask | |
| '192.0.2.5/255.255.255.0' | |
| .. attribute:: with_hostmask | |
| A string representation of the interface with the network as a host mask. | |
| >>> interface = IPv4Interface('192.0.2.5/24') | |
| >>> interface.with_hostmask | |
| '192.0.2.5/0.0.0.255' | |
| .. class:: IPv6Interface(address) | |
| Construct an IPv6 interface. The meaning of *address* is as in the | |
| constructor of :class:`IPv6Network`, except that arbitrary host addresses | |
| are always accepted. | |
| :class:`IPv6Interface` is a subclass of :class:`IPv6Address`, so it inherits | |
| all the attributes from that class. In addition, the following attributes | |
| are available: | |
| .. attribute:: ip | |
| .. attribute:: network | |
| .. attribute:: with_prefixlen | |
| .. attribute:: with_netmask | |
| .. attribute:: with_hostmask | |
| Refer to the corresponding attribute documentation in | |
| :class:`IPv4Interface`. | |
| Operators | |
| ^^^^^^^^^ | |
| Interface objects support some operators. Unless stated otherwise, operators | |
| can only be applied between compatible objects (i.e. IPv4 with IPv4, IPv6 with | |
| IPv6). | |
| Logical operators | |
| """"""""""""""""" | |
| Interface objects can be compared with the usual set of logical operators. | |
| For equality comparison (``==`` and ``!=``), both the IP address and network | |
| must be the same for the objects to be equal. An interface will not compare | |
| equal to any address or network object. | |
| For ordering (``<``, ``>``, etc) the rules are different. Interface and | |
| address objects with the same IP version can be compared, and the address | |
| objects will always sort before the interface objects. Two interface objects | |
| are first compared by their networks and, if those are the same, then by their | |
| IP addresses. | |
| Other Module Level Functions | |
| ---------------------------- | |
| The module also provides the following module level functions: | |
| .. function:: v4_int_to_packed(address) | |
| Represent an address as 4 packed bytes in network (big-endian) order. | |
| *address* is an integer representation of an IPv4 IP address. A | |
| :exc:`ValueError` is raised if the integer is negative or too large to be an | |
| IPv4 IP address. | |
| >>> ipaddress.ip_address(3221225985) | |
| IPv4Address('192.0.2.1') | |
| >>> ipaddress.v4_int_to_packed(3221225985) | |
| b'\xc0\x00\x02\x01' | |
| .. function:: v6_int_to_packed(address) | |
| Represent an address as 16 packed bytes in network (big-endian) order. | |
| *address* is an integer representation of an IPv6 IP address. A | |
| :exc:`ValueError` is raised if the integer is negative or too large to be an | |
| IPv6 IP address. | |
| .. function:: summarize_address_range(first, last) | |
| Return an iterator of the summarized network range given the first and last | |
| IP addresses. *first* is the first :class:`IPv4Address` or | |
| :class:`IPv6Address` in the range and *last* is the last :class:`IPv4Address` | |
| or :class:`IPv6Address` in the range. A :exc:`TypeError` is raised if | |
| *first* or *last* are not IP addresses or are not of the same version. A | |
| :exc:`ValueError` is raised if *last* is not greater than *first* or if | |
| *first* address version is not 4 or 6. | |
| >>> [ipaddr for ipaddr in ipaddress.summarize_address_range( | |
| ... ipaddress.IPv4Address('192.0.2.0'), | |
| ... ipaddress.IPv4Address('192.0.2.130'))] | |
| [IPv4Network('192.0.2.0/25'), IPv4Network('192.0.2.128/31'), IPv4Network('192.0.2.130/32')] | |
| .. function:: collapse_addresses(addresses) | |
| Return an iterator of the collapsed :class:`IPv4Network` or | |
| :class:`IPv6Network` objects. *addresses* is an :term:`iterable` of | |
| :class:`IPv4Network` or :class:`IPv6Network` objects. A :exc:`TypeError` is | |
| raised if *addresses* contains mixed version objects. | |
| >>> [ipaddr for ipaddr in | |
| ... ipaddress.collapse_addresses([ipaddress.IPv4Network('192.0.2.0/25'), | |
| ... ipaddress.IPv4Network('192.0.2.128/25')])] | |
| [IPv4Network('192.0.2.0/24')] | |
| .. function:: get_mixed_type_key(obj) | |
| Return a key suitable for sorting between networks and addresses. Address | |
| and Network objects are not sortable by default; they're fundamentally | |
| different, so the expression:: | |
| IPv4Address('192.0.2.0') <= IPv4Network('192.0.2.0/24') | |
| doesn't make sense. There are some times however, where you may wish to | |
| have :mod:`!ipaddress` sort these anyway. If you need to do this, you can use | |
| this function as the *key* argument to :func:`sorted`. | |
| *obj* is either a network or address object. | |
| Custom Exceptions | |
| ----------------- | |
| To support more specific error reporting from class constructors, the | |
| module defines the following exceptions: | |
| .. exception:: AddressValueError(ValueError) | |
| Any value error related to the address. | |
| .. exception:: NetmaskValueError(ValueError) | |
| Any value error related to the net mask. |