| :mod:`ipaddress` --- IPv4/IPv6 manipulation library |
| =================================================== |
| |
| .. module:: ipaddress |
| :synopsis: IPv4/IPv6 manipulation library. |
| |
| .. moduleauthor:: Peter Moody |
| |
| **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 |
| tolerated only for values less than 8 (as there is no ambiguity |
| between the decimal and octal interpretations of such strings). |
| 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') |
| |
| .. attribute:: version |
| |
| The appropriate version number: ``4`` for IPv4, ``6`` for IPv6. |
| |
| .. 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. |
| |
| .. 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 allocated for private networks. See |
| iana-ipv4-special-registry_ (for IPv4) or iana-ipv6-special-registry_ |
| (for IPv6). |
| |
| .. attribute:: is_global |
| |
| ``True`` if the address is allocated for public networks. See |
| iana-ipv4-special-registry_ (for IPv4) or iana-ipv6-special-registry_ |
| (for IPv6). |
| |
| .. versionadded:: 3.4 |
| |
| .. 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 otherwise IETF reserved. |
| |
| .. 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`. |
| |
| .. _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 |
| |
| |
| .. 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"``. |
| 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') |
| |
| .. 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, 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 |
| .. attribute:: is_unspecified |
| .. attribute:: is_reserved |
| .. attribute:: is_loopback |
| .. attribute:: is_link_local |
| |
| .. versionadded:: 3.4 |
| is_global |
| |
| .. 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 (starting with |
| ``::FFFF/96``), this property will report the embedded IPv4 address. |
| For any other address, 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``. |
| |
| |
| 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 |
| |
| |
| 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. 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 |
| |
| |
| 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-bits integer, a 4-bytes packed |
| integer, or an existing 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. |
| |
| >>> 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')] |
| |
| .. 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) |
| |
| Returns *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) |
| |
| Returns *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 ">" |
| |
| |
| .. 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::`` |
| 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-bits integer, a 16-bytes packed |
| integer, or an existing 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. |
| |
| .. 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:: compare_networks(other) |
| |
| Refer to the corresponding attribute documentation in |
| :class:`IPv4Network`. |
| |
| .. attribute:: is_site_local |
| |
| These 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 iterator 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. |