| 
									
										
										
										
											2012-06-17 17:24:10 +10:00
										 |  |  | :mod:`ipaddress` --- IPv4/IPv6 manipulation library
 | 
					
						
							|  |  |  | ===================================================
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. module:: ipaddress
 | 
					
						
							|  |  |  |    :synopsis: IPv4/IPv6 manipulation library.
 | 
					
						
							| 
									
										
										
										
											2016-06-11 15:02:54 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-17 17:24:10 +10:00
										 |  |  | .. moduleauthor:: Peter Moody
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | **Source code:** :source:`Lib/ipaddress.py`
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | --------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  | :mod:`ipaddress` provides the capabilities to create, manipulate and
 | 
					
						
							|  |  |  | operate on IPv4 and IPv6 addresses and networks.
 | 
					
						
							| 
									
										
										
										
											2012-06-17 17:24:10 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  | 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
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  | subnet, checking whether or not a string represents a valid IP address or
 | 
					
						
							|  |  |  | network definition, and so on.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-28 22:14:15 -06:00
										 |  |  | This is the full module API reference—for an overview and introduction, see
 | 
					
						
							|  |  |  | :ref:`ipaddress-howto`.
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  | .. versionadded:: 3.3
 | 
					
						
							| 
									
										
										
										
											2012-06-17 17:24:10 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-04 17:21:46 +03:00
										 |  |  | .. testsetup::
 | 
					
						
							| 
									
										
										
										
											2017-04-27 14:23:34 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |    import ipaddress
 | 
					
						
							|  |  |  |    from ipaddress import (
 | 
					
						
							|  |  |  |        ip_network, IPv4Address, IPv4Interface, IPv4Network,
 | 
					
						
							|  |  |  |    )
 | 
					
						
							| 
									
										
										
										
											2012-06-17 17:24:10 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-31 17:23:11 +03:00
										 |  |  | Convenience factory functions
 | 
					
						
							|  |  |  | -----------------------------
 | 
					
						
							| 
									
										
										
										
											2012-06-17 17:24:10 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-31 17:23:11 +03:00
										 |  |  | The :mod:`ipaddress` module provides factory functions to conveniently create
 | 
					
						
							|  |  |  | IP addresses, networks and interfaces:
 | 
					
						
							| 
									
										
										
										
											2012-06-17 17:24:10 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  | .. function:: ip_address(address)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Return an :class:`IPv4Address` or :class:`IPv6Address` object depending on
 | 
					
						
							| 
									
										
										
										
											2012-07-31 17:23:11 +03:00
										 |  |  |    the IP address passed as argument.  Either IPv4 or IPv6 addresses may be
 | 
					
						
							| 
									
										
										
										
											2021-09-28 23:40:57 +03:00
										 |  |  |    supplied; integers less than ``2**32`` will be considered to be IPv4 by default.
 | 
					
						
							| 
									
										
										
										
											2012-10-07 07:23:50 -07:00
										 |  |  |    A :exc:`ValueError` is raised if *address* does not represent a valid IPv4
 | 
					
						
							|  |  |  |    or IPv6 address.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-17 17:24:10 +10:00
										 |  |  |    >>> 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;
 | 
					
						
							| 
									
										
										
										
											2021-09-28 23:40:57 +03:00
										 |  |  |    integers less than ``2**32`` will be considered to be IPv4 by default.  *strict*
 | 
					
						
							| 
									
										
										
										
											2012-06-17 17:24:10 +10:00
										 |  |  |    is passed to :class:`IPv4Network` or :class:`IPv6Network` constructor.  A
 | 
					
						
							| 
									
										
										
										
											2012-07-31 17:23:11 +03:00
										 |  |  |    :exc:`ValueError` is raised if *address* does not represent a valid IPv4 or
 | 
					
						
							|  |  |  |    IPv6 address, or if the network has host bits set.
 | 
					
						
							| 
									
										
										
										
											2012-06-17 17:24:10 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  |    >>> 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;
 | 
					
						
							| 
									
										
										
										
											2021-09-28 23:40:57 +03:00
										 |  |  |    integers less than ``2**32`` will be considered to be IPv4 by default.  A
 | 
					
						
							| 
									
										
										
										
											2012-07-31 17:23:11 +03:00
										 |  |  |    :exc:`ValueError` is raised if *address* does not represent a valid IPv4 or
 | 
					
						
							| 
									
										
										
										
											2012-06-17 17:24:10 +10:00
										 |  |  |    IPv6 address.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  | 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
 | 
					
						
							|  |  |  | ------------
 | 
					
						
							| 
									
										
										
										
											2012-06-17 17:24:10 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-31 17:23:11 +03:00
										 |  |  | Address objects
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  | ^^^^^^^^^^^^^^^
 | 
					
						
							| 
									
										
										
										
											2012-06-17 17:24:10 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-31 17:23:11 +03:00
										 |  |  | 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
 | 
					
						
							| 
									
										
										
										
											2018-03-20 20:09:15 -04:00
										 |  |  | write code that handles both IP versions correctly.  Address objects are
 | 
					
						
							|  |  |  | :term:`hashable`, so they can be used as keys in dictionaries.
 | 
					
						
							| 
									
										
										
										
											2012-06-17 17:24:10 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  | .. class:: IPv4Address(address)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-31 17:23:11 +03:00
										 |  |  |    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
 | 
					
						
							| 
									
										
										
										
											2016-11-26 13:43:28 +02:00
										 |  |  |       the inclusive range 0--255, separated by dots (e.g. ``192.168.0.1``). Each
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  |       integer represents an octet (byte) in the address. Leading zeroes are
 | 
					
						
							| 
									
										
										
										
											2021-05-02 14:00:35 +02:00
										 |  |  |       not tolerated to prevent confusion with octal notation.
 | 
					
						
							| 
									
										
										
										
											2012-07-31 17:23:11 +03:00
										 |  |  |    2. An integer that fits into 32 bits.
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  |    3. An integer packed into a :class:`bytes` object of length 4 (most
 | 
					
						
							|  |  |  |       significant octet first).
 | 
					
						
							| 
									
										
										
										
											2012-06-17 17:24:10 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  |    >>> ipaddress.IPv4Address('192.168.0.1')
 | 
					
						
							|  |  |  |    IPv4Address('192.168.0.1')
 | 
					
						
							| 
									
										
										
										
											2012-10-07 07:23:50 -07:00
										 |  |  |    >>> ipaddress.IPv4Address(3232235521)
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  |    IPv4Address('192.168.0.1')
 | 
					
						
							|  |  |  |    >>> ipaddress.IPv4Address(b'\xC0\xA8\x00\x01')
 | 
					
						
							|  |  |  |    IPv4Address('192.168.0.1')
 | 
					
						
							| 
									
										
										
										
											2012-06-17 17:24:10 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-02 14:00:35 +02:00
										 |  |  |    .. versionchanged:: 3.8
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Leading zeros are tolerated, even in ambiguous cases that look like
 | 
					
						
							|  |  |  |       octal notation.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. versionchanged:: 3.10
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       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`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. versionchanged:: 3.9.5
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       The above change was also included in Python 3.9 starting with
 | 
					
						
							|  |  |  |       version 3.9.5.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-19 10:55:49 +02:00
										 |  |  |    .. versionchanged:: 3.8.12
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       The above change was also included in Python 3.8 starting with
 | 
					
						
							|  |  |  |       version 3.8.12.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  |    .. attribute:: version
 | 
					
						
							| 
									
										
										
										
											2012-06-17 17:24:10 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  |       The appropriate version number: ``4`` for IPv4, ``6`` for IPv6.
 | 
					
						
							| 
									
										
										
										
											2012-06-17 17:24:10 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  |    .. attribute:: max_prefixlen
 | 
					
						
							| 
									
										
										
										
											2012-06-17 17:24:10 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  |       The total number of bits in the address representation for this
 | 
					
						
							|  |  |  |       version: ``32`` for IPv4, ``128`` for IPv6.
 | 
					
						
							| 
									
										
										
										
											2012-06-17 17:24:10 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  |       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.
 | 
					
						
							| 
									
										
										
										
											2012-07-31 17:23:11 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  |    .. attribute:: compressed
 | 
					
						
							|  |  |  |    .. attribute:: exploded
 | 
					
						
							| 
									
										
										
										
											2012-07-31 17:23:11 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  |       The string representation in dotted decimal notation. Leading zeroes
 | 
					
						
							|  |  |  |       are never included in the representation.
 | 
					
						
							| 
									
										
										
										
											2012-07-31 17:23:11 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  |       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.
 | 
					
						
							| 
									
										
										
										
											2012-07-31 17:23:11 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  |    .. attribute:: packed
 | 
					
						
							| 
									
										
										
										
											2012-07-31 17:23:11 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  |       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.
 | 
					
						
							| 
									
										
										
										
											2012-07-31 17:23:11 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-14 12:58:07 -04:00
										 |  |  |    .. 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.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-04 17:25:40 +03:00
										 |  |  |       .. versionadded:: 3.5
 | 
					
						
							| 
									
										
										
										
											2014-04-14 12:58:07 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-31 17:23:11 +03:00
										 |  |  |    .. attribute:: is_multicast
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  |       ``True`` if the address is reserved for multicast use.  See
 | 
					
						
							|  |  |  |       :RFC:`3171` (for IPv4) or :RFC:`2373` (for IPv6).
 | 
					
						
							| 
									
										
										
										
											2012-07-31 17:23:11 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-24 09:47:10 -07:00
										 |  |  |    .. attribute:: is_private
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       ``True`` if the address is allocated for private networks.  See
 | 
					
						
							| 
									
										
										
										
											2014-03-06 11:51:37 -05:00
										 |  |  |       iana-ipv4-special-registry_ (for IPv4) or iana-ipv6-special-registry_
 | 
					
						
							| 
									
										
										
										
											2013-10-24 09:47:10 -07:00
										 |  |  |       (for IPv6).
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-21 16:16:51 -07:00
										 |  |  |    .. attribute:: is_global
 | 
					
						
							| 
									
										
										
										
											2012-07-31 17:23:11 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-22 12:36:21 -07:00
										 |  |  |       ``True`` if the address is allocated for public networks.  See
 | 
					
						
							| 
									
										
										
										
											2014-03-06 11:51:37 -05:00
										 |  |  |       iana-ipv4-special-registry_ (for IPv4) or iana-ipv6-special-registry_
 | 
					
						
							| 
									
										
										
										
											2013-10-21 16:16:51 -07:00
										 |  |  |       (for IPv6).
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-06 11:51:37 -05:00
										 |  |  |       .. versionadded:: 3.4
 | 
					
						
							| 
									
										
										
										
											2012-07-31 17:23:11 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |    .. attribute:: is_unspecified
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-15 17:11:06 -05:00
										 |  |  |       ``True`` if the address is unspecified.  See :RFC:`5735` (for IPv4)
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  |       or :RFC:`2373` (for IPv6).
 | 
					
						
							| 
									
										
										
										
											2012-07-31 17:23:11 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |    .. attribute:: is_reserved
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  |       ``True`` if the address is otherwise IETF reserved.
 | 
					
						
							| 
									
										
										
										
											2012-07-31 17:23:11 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |    .. attribute:: is_loopback
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  |       ``True`` if this is a loopback address.  See :RFC:`3330` (for IPv4)
 | 
					
						
							|  |  |  |       or :RFC:`2373` (for IPv6).
 | 
					
						
							| 
									
										
										
										
											2012-07-31 17:23:11 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |    .. attribute:: is_link_local
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  |       ``True`` if the address is reserved for link-local usage.  See
 | 
					
						
							|  |  |  |       :RFC:`3927`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-07 10:49:07 +03:00
										 |  |  | .. _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
 | 
					
						
							| 
									
										
										
										
											2014-03-06 11:51:37 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-30 00:17:59 +02:00
										 |  |  | .. 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
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-31 17:23:11 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | .. 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"``.
 | 
					
						
							| 
									
										
										
										
											2020-02-26 16:33:57 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |       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.
 | 
					
						
							| 
									
										
										
										
											2012-07-31 17:23:11 +03:00
										 |  |  |    2. An integer that fits into 128 bits.
 | 
					
						
							|  |  |  |    3. An integer packed into a :class:`bytes` object of length 16, big-endian.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-26 16:33:57 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-31 17:23:11 +03:00
										 |  |  |    >>> ipaddress.IPv6Address('2001:db8::1000')
 | 
					
						
							|  |  |  |    IPv6Address('2001:db8::1000')
 | 
					
						
							| 
									
										
										
										
											2020-02-26 16:33:57 +02:00
										 |  |  |    >>> ipaddress.IPv6Address('ff02::5678%1')
 | 
					
						
							|  |  |  |    IPv6Address('ff02::5678%1')
 | 
					
						
							| 
									
										
										
										
											2012-07-31 17:23:11 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  |    .. 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.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-06 11:51:37 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-30 00:17:59 +02:00
										 |  |  |    For the following attributes and methods, see the corresponding
 | 
					
						
							|  |  |  |    documentation of the :class:`IPv4Address` class:
 | 
					
						
							| 
									
										
										
										
											2014-03-06 11:51:37 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  |    .. attribute:: packed
 | 
					
						
							| 
									
										
										
										
											2014-04-14 12:58:07 -04:00
										 |  |  |    .. attribute:: reverse_pointer
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  |    .. attribute:: version
 | 
					
						
							|  |  |  |    .. attribute:: max_prefixlen
 | 
					
						
							|  |  |  |    .. attribute:: is_multicast
 | 
					
						
							|  |  |  |    .. attribute:: is_private
 | 
					
						
							| 
									
										
										
										
											2014-03-06 11:51:37 -05:00
										 |  |  |    .. attribute:: is_global
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  |    .. attribute:: is_unspecified
 | 
					
						
							|  |  |  |    .. attribute:: is_reserved
 | 
					
						
							|  |  |  |    .. attribute:: is_loopback
 | 
					
						
							|  |  |  |    .. attribute:: is_link_local
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-06 11:51:37 -05:00
										 |  |  |       .. versionadded:: 3.4
 | 
					
						
							|  |  |  |          is_global
 | 
					
						
							| 
									
										
										
										
											2012-07-31 17:23:11 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |    .. attribute:: is_site_local
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  |       ``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`.
 | 
					
						
							| 
									
										
										
										
											2012-07-31 17:23:11 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |    .. attribute:: ipv4_mapped
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  |       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``.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-26 16:33:57 +02:00
										 |  |  |    .. 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``.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  |    .. 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``.
 | 
					
						
							| 
									
										
										
										
											2012-07-31 17:23:11 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |    .. attribute:: teredo
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  |       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``.
 | 
					
						
							| 
									
										
										
										
											2012-07-31 17:23:11 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-30 00:17:59 +02:00
										 |  |  | .. method:: IPv6Address.__format__(fmt)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Refer to the corresponding method documentation in
 | 
					
						
							|  |  |  |    :class:`IPv4Address`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. versionadded:: 3.9
 | 
					
						
							| 
									
										
										
										
											2012-07-31 17:23:11 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  | 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
 | 
					
						
							| 
									
										
										
										
											2012-07-31 17:23:11 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-26 16:33:57 +02:00
										 |  |  | Note that IPv6 scoped addresses are converted to integers without scope zone ID.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-31 17:23:11 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 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).
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-06 19:23:57 +02:00
										 |  |  | Comparison operators
 | 
					
						
							|  |  |  | """"""""""""""""""""
 | 
					
						
							| 
									
										
										
										
											2012-07-31 17:23:11 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-26 16:33:57 +02:00
										 |  |  | 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::
 | 
					
						
							| 
									
										
										
										
											2012-07-31 17:23:11 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |    >>> 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
 | 
					
						
							| 
									
										
										
										
											2020-02-26 16:33:57 +02:00
										 |  |  |    >>> IPv6Address('fe80::1234') == IPv6Address('fe80::1234%1')
 | 
					
						
							|  |  |  |    False
 | 
					
						
							|  |  |  |    >>> IPv6Address('fe80::1234%1') != IPv6Address('fe80::1234%2')
 | 
					
						
							|  |  |  |    True
 | 
					
						
							| 
									
										
										
										
											2012-07-31 17:23:11 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-31 17:23:11 +03:00
										 |  |  | 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
 | 
					
						
							| 
									
										
										
										
											2012-06-17 17:24:10 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  | 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``.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-31 17:23:11 +03:00
										 |  |  | Network objects
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  | ^^^^^^^^^^^^^^^
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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`.
 | 
					
						
							| 
									
										
										
										
											2018-03-20 20:09:15 -04:00
										 |  |  | Network objects are :term:`hashable`, so they can be used as keys in
 | 
					
						
							|  |  |  | dictionaries.
 | 
					
						
							| 
									
										
										
										
											2012-07-31 17:23:11 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-17 17:24:10 +10:00
										 |  |  | .. class:: IPv4Network(address, strict=True)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  |    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
 | 
					
						
							| 
									
										
										
										
											2018-03-20 20:09:15 -04:00
										 |  |  |       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,
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  |       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*.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-12 20:36:46 +02:00
										 |  |  |    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``).
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  |    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.
 | 
					
						
							| 
									
										
										
										
											2012-06-17 17:24:10 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  |    If *strict* is ``True`` and host bits are set in the supplied address,
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  |    then :exc:`ValueError` is raised.  Otherwise, the host bits are masked out
 | 
					
						
							| 
									
										
										
										
											2012-06-17 17:24:10 +10:00
										 |  |  |    to determine the appropriate network address.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:32:37 +10:00
										 |  |  |    Unless stated otherwise, all network methods accepting other network/address
 | 
					
						
							|  |  |  |    objects will raise :exc:`TypeError` if the argument's IP version is
 | 
					
						
							| 
									
										
										
										
											2018-03-20 20:09:15 -04:00
										 |  |  |    incompatible to ``self``.
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:32:37 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-12 20:36:46 +02:00
										 |  |  |    .. versionchanged:: 3.5
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Added the two-tuple form for the *address* constructor parameter.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:32:37 +10:00
										 |  |  |    .. attribute:: version
 | 
					
						
							|  |  |  |    .. attribute:: max_prefixlen
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Refer to the corresponding attribute documentation in
 | 
					
						
							| 
									
										
										
										
											2018-03-20 20:09:15 -04:00
										 |  |  |       :class:`IPv4Address`.
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:32:37 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  |    .. 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
 | 
					
						
							| 
									
										
										
										
											2018-03-20 20:09:15 -04:00
										 |  |  |       for both the network address and the broadcast address.
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:32:37 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  |    .. attribute:: network_address
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:52:38 +10:00
										 |  |  |       The network address for the network. The network address and the
 | 
					
						
							|  |  |  |       prefix length together uniquely define a network.
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  |    .. attribute:: broadcast_address
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:52:38 +10:00
										 |  |  |       The broadcast address for the network. Packets sent to the broadcast
 | 
					
						
							|  |  |  |       address should be received by every host on the network.
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-14 09:09:48 -06:00
										 |  |  |    .. attribute:: hostmask
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-08 12:24:36 +08:00
										 |  |  |       The host mask, as an :class:`IPv4Address` object.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. attribute:: netmask
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       The net mask, as an :class:`IPv4Address` object.
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  |    .. attribute:: with_prefixlen
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:32:37 +10:00
										 |  |  |    .. attribute:: compressed
 | 
					
						
							|  |  |  |    .. attribute:: exploded
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       A string representation of the network, with the mask in prefix
 | 
					
						
							|  |  |  |       notation.
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:32:37 +10:00
										 |  |  |       ``with_prefixlen`` and ``compressed`` are always the same as
 | 
					
						
							|  |  |  |       ``str(network)``.
 | 
					
						
							|  |  |  |       ``exploded`` uses the exploded form the network address.
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  |    .. attribute:: with_netmask
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:32:37 +10:00
										 |  |  |       A string representation of the network, with the mask in net mask
 | 
					
						
							|  |  |  |       notation.
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  |    .. attribute:: with_hostmask
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:32:37 +10:00
										 |  |  |       A string representation of the network, with the mask in host mask
 | 
					
						
							|  |  |  |       notation.
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  |    .. attribute:: num_addresses
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:32:37 +10:00
										 |  |  |       The total number of addresses in the network.
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  |    .. attribute:: prefixlen
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:32:37 +10:00
										 |  |  |       Length of the network prefix, in bits.
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  |    .. method:: hosts()
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:32:37 +10:00
										 |  |  |       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
 | 
					
						
							| 
									
										
										
										
											2018-03-21 08:25:13 +08:00
										 |  |  |       network address itself and the network broadcast address.  For networks
 | 
					
						
							|  |  |  |       with a mask length of 31, the network address and network broadcast
 | 
					
						
							| 
									
										
										
										
											2020-03-09 22:33:45 +00:00
										 |  |  |       address are also included in the result. Networks with a mask of 32
 | 
					
						
							|  |  |  |       will return a list containing the single host address.
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-10-07 07:23:50 -07:00
										 |  |  |          >>> list(ip_network('192.0.2.0/29').hosts())  #doctest: +NORMALIZE_WHITESPACE
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:32:37 +10:00
										 |  |  |          [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')]
 | 
					
						
							| 
									
										
										
										
											2018-03-21 08:25:13 +08:00
										 |  |  |          >>> list(ip_network('192.0.2.0/31').hosts())
 | 
					
						
							|  |  |  |          [IPv4Address('192.0.2.0'), IPv4Address('192.0.2.1')]
 | 
					
						
							| 
									
										
										
										
											2020-03-09 22:33:45 +00:00
										 |  |  |          >>> list(ip_network('192.0.2.1/32').hosts())
 | 
					
						
							|  |  |  |          [IPv4Address('192.0.2.1')]
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  |    .. method:: overlaps(other)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:32:37 +10:00
										 |  |  |       ``True`` if this network is partly or wholly contained in *other* or
 | 
					
						
							| 
									
										
										
										
											2013-03-11 18:34:00 -04:00
										 |  |  |       *other* is wholly contained in this network.
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  |    .. method:: address_exclude(network)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:32:37 +10:00
										 |  |  |       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.
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:32:37 +10:00
										 |  |  |          >>> n1 = ip_network('192.0.2.0/28')
 | 
					
						
							|  |  |  |          >>> n2 = ip_network('192.0.2.1/32')
 | 
					
						
							| 
									
										
										
										
											2012-10-07 07:23:50 -07:00
										 |  |  |          >>> list(n1.address_exclude(n2))  #doctest: +NORMALIZE_WHITESPACE
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:32:37 +10:00
										 |  |  |          [IPv4Network('192.0.2.8/29'), IPv4Network('192.0.2.4/30'),
 | 
					
						
							|  |  |  |           IPv4Network('192.0.2.2/31'), IPv4Network('192.0.2.0/32')]
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  |    .. method:: subnets(prefixlen_diff=1, new_prefix=None)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:32:37 +10:00
										 |  |  |       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')]
 | 
					
						
							| 
									
										
										
										
											2012-10-07 07:23:50 -07:00
										 |  |  |          >>> list(ip_network('192.0.2.0/24').subnets(prefixlen_diff=2))  #doctest: +NORMALIZE_WHITESPACE
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:32:37 +10:00
										 |  |  |          [IPv4Network('192.0.2.0/26'), IPv4Network('192.0.2.64/26'),
 | 
					
						
							|  |  |  |           IPv4Network('192.0.2.128/26'), IPv4Network('192.0.2.192/26')]
 | 
					
						
							| 
									
										
										
										
											2012-10-07 07:23:50 -07:00
										 |  |  |          >>> list(ip_network('192.0.2.0/24').subnets(new_prefix=26))  #doctest: +NORMALIZE_WHITESPACE
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:32:37 +10:00
										 |  |  |          [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')]
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  |    .. method:: supernet(prefixlen_diff=1, new_prefix=None)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:32:37 +10:00
										 |  |  |       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.
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:32:37 +10:00
										 |  |  |          >>> 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')
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-22 17:39:49 -04:00
										 |  |  |    .. method:: subnet_of(other)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-12 16:57:03 +02:00
										 |  |  |       Return ``True`` if this network is a subnet of *other*.
 | 
					
						
							| 
									
										
										
										
											2017-10-22 17:39:49 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |         >>> 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)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-12 16:57:03 +02:00
										 |  |  |       Return ``True`` if this network is a supernet of *other*.
 | 
					
						
							| 
									
										
										
										
											2017-10-22 17:39:49 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |         >>> a = ip_network('192.168.1.0/24')
 | 
					
						
							|  |  |  |         >>> b = ip_network('192.168.1.128/30')
 | 
					
						
							|  |  |  |         >>> a.supernet_of(b)
 | 
					
						
							|  |  |  |         True
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       .. versionadded:: 3.7
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  |    .. method:: compare_networks(other)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:32:37 +10:00
										 |  |  |       Compare this network to *other*.  In this comparison only the network
 | 
					
						
							|  |  |  |       addresses are considered; host bits aren't.  Returns either ``-1``,
 | 
					
						
							|  |  |  |       ``0`` or ``1``.
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:32:37 +10:00
										 |  |  |          >>> 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
 | 
					
						
							| 
									
										
										
										
											2012-06-17 17:24:10 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-30 00:44:29 -07:00
										 |  |  |       .. deprecated:: 3.7
 | 
					
						
							|  |  |  |          It uses the same ordering and comparison algorithm as "<", "==", and ">"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-17 17:24:10 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  | .. class:: IPv6Network(address, strict=True)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  |    Construct an IPv6 network definition.  *address* can be one of the following:
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-20 20:09:15 -04:00
										 |  |  |    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``.
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-08 12:24:36 +08:00
										 |  |  |       Note that currently expanded netmasks are not supported.  That means
 | 
					
						
							|  |  |  |       ``2001:db00::0/24`` is a valid argument while ``2001:db00::0/ffff:ff00::``
 | 
					
						
							| 
									
										
										
										
											2021-10-12 05:29:29 -04:00
										 |  |  |       is not.
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  |    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``.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-30 14:42:38 -07:00
										 |  |  |    3. An integer packed into a :class:`bytes` object of length 16, big-endian.
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  |       The interpretation is similar to an integer *address*.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-12 20:36:46 +02:00
										 |  |  |    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
 | 
					
						
							| 
									
										
										
										
											2016-06-10 14:26:07 +03:00
										 |  |  |       integer, or an existing IPv6Address object; and the netmask is an
 | 
					
						
							| 
									
										
										
										
											2014-05-12 20:36:46 +02:00
										 |  |  |       integer representing the prefix length.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  |    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.
 | 
					
						
							| 
									
										
										
										
											2012-06-17 17:24:10 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  |    If *strict* is ``True`` and host bits are set in the supplied address,
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  |    then :exc:`ValueError` is raised.  Otherwise, the host bits are masked out
 | 
					
						
							| 
									
										
										
										
											2012-06-17 17:24:10 +10:00
										 |  |  |    to determine the appropriate network address.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-12 20:36:46 +02:00
										 |  |  |    .. versionchanged:: 3.5
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Added the two-tuple form for the *address* constructor parameter.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:32:37 +10:00
										 |  |  |    .. 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
 | 
					
						
							| 
									
										
										
										
											2014-01-14 09:09:48 -06:00
										 |  |  |    .. attribute:: hostmask
 | 
					
						
							| 
									
										
										
										
											2018-03-08 12:24:36 +08:00
										 |  |  |    .. attribute:: netmask
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:32:37 +10:00
										 |  |  |    .. attribute:: with_prefixlen
 | 
					
						
							|  |  |  |    .. attribute:: compressed
 | 
					
						
							|  |  |  |    .. attribute:: exploded
 | 
					
						
							|  |  |  |    .. attribute:: with_netmask
 | 
					
						
							|  |  |  |    .. attribute:: with_hostmask
 | 
					
						
							|  |  |  |    .. attribute:: num_addresses
 | 
					
						
							|  |  |  |    .. attribute:: prefixlen
 | 
					
						
							|  |  |  |    .. method:: hosts()
 | 
					
						
							| 
									
										
										
										
											2018-03-21 08:25:13 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |       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.
 | 
					
						
							| 
									
										
										
										
											2020-03-09 22:33:45 +00:00
										 |  |  |       Networks with a mask of 128 will return a list containing the
 | 
					
						
							|  |  |  |       single host address.
 | 
					
						
							| 
									
										
										
										
											2018-03-21 08:25:13 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:32:37 +10:00
										 |  |  |    .. method:: overlaps(other)
 | 
					
						
							|  |  |  |    .. method:: address_exclude(network)
 | 
					
						
							|  |  |  |    .. method:: subnets(prefixlen_diff=1, new_prefix=None)
 | 
					
						
							|  |  |  |    .. method:: supernet(prefixlen_diff=1, new_prefix=None)
 | 
					
						
							| 
									
										
										
										
											2017-10-22 17:39:49 -04:00
										 |  |  |    .. method:: subnet_of(other)
 | 
					
						
							|  |  |  |    .. method:: supernet_of(other)
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:32:37 +10:00
										 |  |  |    .. method:: compare_networks(other)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Refer to the corresponding attribute documentation in
 | 
					
						
							| 
									
										
										
										
											2018-03-20 20:09:15 -04:00
										 |  |  |       :class:`IPv4Network`.
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:32:37 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  |    .. attribute:: is_site_local
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:32:37 +10:00
										 |  |  |       These attribute is true for the network as a whole if it is true
 | 
					
						
							| 
									
										
										
										
											2018-03-20 20:09:15 -04:00
										 |  |  |       for both the network address and the broadcast address.
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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).
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:32:37 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  | Logical operators
 | 
					
						
							|  |  |  | """""""""""""""""
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-20 20:09:15 -04:00
										 |  |  | Network objects can be compared with the usual set of logical operators.
 | 
					
						
							|  |  |  | Network objects are ordered first by network address, then by net mask.
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:32:37 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  | 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'):
 | 
					
						
							| 
									
										
										
										
											2016-05-10 12:01:23 +03:00
										 |  |  |    ...     addr
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  |    ...
 | 
					
						
							|  |  |  |    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')
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:32:37 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-05 22:02:18 +10:00
										 |  |  | 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
 | 
					
						
							| 
									
										
										
										
											2012-06-17 17:24:10 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-31 17:23:11 +03:00
										 |  |  | Interface objects
 | 
					
						
							|  |  |  | -----------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-20 20:09:15 -04:00
										 |  |  | Interface objects are :term:`hashable`, so they can be used as keys in
 | 
					
						
							|  |  |  | dictionaries.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-31 17:23:11 +03:00
										 |  |  | .. class:: IPv4Interface(address)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-20 10:04:26 +10:00
										 |  |  |    Construct an IPv4 interface.  The meaning of *address* is as in the
 | 
					
						
							|  |  |  |    constructor of :class:`IPv4Network`, except that arbitrary host addresses
 | 
					
						
							|  |  |  |    are always accepted.
 | 
					
						
							| 
									
										
										
										
											2012-07-31 17:23:11 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-20 10:04:26 +10:00
										 |  |  |    :class:`IPv4Interface` is a subclass of :class:`IPv4Address`, so it inherits
 | 
					
						
							|  |  |  |    all the attributes from that class.  In addition, the following attributes
 | 
					
						
							|  |  |  |    are available:
 | 
					
						
							| 
									
										
										
										
											2012-07-31 17:23:11 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-20 10:04:26 +10:00
										 |  |  |    .. 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'
 | 
					
						
							| 
									
										
										
										
											2012-07-31 17:23:11 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. class:: IPv6Interface(address)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-20 10:04:26 +10:00
										 |  |  |    Construct an IPv6 interface.  The meaning of *address* is as in the
 | 
					
						
							|  |  |  |    constructor of :class:`IPv6Network`, except that arbitrary host addresses
 | 
					
						
							|  |  |  |    are always accepted.
 | 
					
						
							| 
									
										
										
										
											2012-07-31 17:23:11 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-20 10:04:26 +10:00
										 |  |  |    :class:`IPv6Interface` is a subclass of :class:`IPv6Address`, so it inherits
 | 
					
						
							|  |  |  |    all the attributes from that class.  In addition, the following attributes
 | 
					
						
							|  |  |  |    are available:
 | 
					
						
							| 
									
										
										
										
											2012-07-31 17:23:11 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-20 10:04:26 +10:00
										 |  |  |    .. attribute:: ip
 | 
					
						
							|  |  |  |    .. attribute:: network
 | 
					
						
							|  |  |  |    .. attribute:: with_prefixlen
 | 
					
						
							|  |  |  |    .. attribute:: with_netmask
 | 
					
						
							|  |  |  |    .. attribute:: with_hostmask
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Refer to the corresponding attribute documentation in
 | 
					
						
							|  |  |  |       :class:`IPv4Interface`.
 | 
					
						
							| 
									
										
										
										
											2012-07-31 17:23:11 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-20 20:09:15 -04:00
										 |  |  | 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.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-17 17:24:10 +10:00
										 |  |  | 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
 | 
					
						
							| 
									
										
										
										
											2018-03-20 20:09:15 -04:00
										 |  |  |    this function as the *key* argument to :func:`sorted()`.
 | 
					
						
							| 
									
										
										
										
											2012-06-17 17:24:10 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  |    *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)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-20 20:09:15 -04:00
										 |  |  |    Any value error related to the net mask.
 |