diff options
Diffstat (limited to '')
-rw-r--r-- | netaddr/ip/__init__.py | 2206 | ||||
-rw-r--r-- | netaddr/ip/glob.py | 312 | ||||
-rwxr-xr-x | netaddr/ip/iana.py | 448 | ||||
-rw-r--r-- | netaddr/ip/ipv4-address-space.xml | 2647 | ||||
-rw-r--r-- | netaddr/ip/ipv6-address-space.xml | 198 | ||||
-rw-r--r-- | netaddr/ip/ipv6-unicast-address-assignments.xml | 435 | ||||
-rw-r--r-- | netaddr/ip/multicast-addresses.xml | 4914 | ||||
-rw-r--r-- | netaddr/ip/nmap.py | 117 | ||||
-rw-r--r-- | netaddr/ip/rfc1924.py | 61 | ||||
-rw-r--r-- | netaddr/ip/sets.py | 748 |
10 files changed, 12086 insertions, 0 deletions
diff --git a/netaddr/ip/__init__.py b/netaddr/ip/__init__.py new file mode 100644 index 0000000..0669224 --- /dev/null +++ b/netaddr/ip/__init__.py @@ -0,0 +1,2206 @@ +#----------------------------------------------------------------------------- +# Copyright (c) 2008 by David P. D. Moss. All rights reserved. +# +# Released under the BSD license. See the LICENSE file for details. +#----------------------------------------------------------------------------- +"""Routines for IPv4 and IPv6 addresses, subnets and ranges.""" + +import sys as _sys + +from netaddr.core import AddrFormatError, AddrConversionError, num_bits, \ + DictDotLookup, NOHOST, N, INET_ATON, INET_PTON, P, ZEROFILL, Z + +from netaddr.strategy import ipv4 as _ipv4, ipv6 as _ipv6 + +from netaddr.compat import _sys_maxint, _iter_next, _iter_range, _is_str, _int_type, \ + _str_type + + +class BaseIP(object): + """ + An abstract base class for common operations shared between various IP + related subclasses. + + """ + __slots__ = ('_value', '_module', '__weakref__') + + def __init__(self): + """Constructor.""" + self._value = None + self._module = None + + def _set_value(self, value): + if not isinstance(value, _int_type): + raise TypeError('int argument expected, not %s' % type(value)) + if not 0 <= value <= self._module.max_int: + raise AddrFormatError('value out of bounds for an %s address!' \ + % self._module.family_name) + self._value = value + + value = property(lambda self: self._value, _set_value, + doc='a positive integer representing the value of IP address/subnet.') + + def key(self): + """ + :return: a key tuple that uniquely identifies this IP address. + """ + return NotImplemented + + def sort_key(self): + """ + :return: A key tuple used to compare and sort this `IPAddress` + correctly. + """ + return NotImplemented + + def __hash__(self): + """ + :return: A hash value uniquely identifying this IP object. + """ + return hash(self.key()) + + def __eq__(self, other): + """ + :param other: an `IPAddress` or `IPNetwork` object. + + :return: ``True`` if this `IPAddress` or `IPNetwork` object is + equivalent to ``other``, ``False`` otherwise. + """ + try: + return self.key() == other.key() + except (AttributeError, TypeError): + return NotImplemented + + def __ne__(self, other): + """ + :param other: an `IPAddress` or `IPNetwork` object. + + :return: ``True`` if this `IPAddress` or `IPNetwork` object is + not equivalent to ``other``, ``False`` otherwise. + """ + try: + return self.key() != other.key() + except (AttributeError, TypeError): + return NotImplemented + + def __lt__(self, other): + """ + :param other: an `IPAddress` or `IPNetwork` object. + + :return: ``True`` if this `IPAddress` or `IPNetwork` object is + less than ``other``, ``False`` otherwise. + """ + try: + return self.sort_key() < other.sort_key() + except (AttributeError, TypeError): + return NotImplemented + + def __le__(self, other): + """ + :param other: an `IPAddress` or `IPNetwork` object. + + :return: ``True`` if this `IPAddress` or `IPNetwork` object is + less than or equal to ``other``, ``False`` otherwise. + """ + try: + return self.sort_key() <= other.sort_key() + except (AttributeError, TypeError): + return NotImplemented + + def __gt__(self, other): + """ + :param other: an `IPAddress` or `IPNetwork` object. + + :return: ``True`` if this `IPAddress` or `IPNetwork` object is + greater than ``other``, ``False`` otherwise. + """ + try: + return self.sort_key() > other.sort_key() + except (AttributeError, TypeError): + return NotImplemented + + def __ge__(self, other): + """ + :param other: an `IPAddress` or `IPNetwork` object. + + :return: ``True`` if this `IPAddress` or `IPNetwork` object is + greater than or equal to ``other``, ``False`` otherwise. + """ + try: + return self.sort_key() >= other.sort_key() + except (AttributeError, TypeError): + return NotImplemented + + def is_unicast(self): + """:return: ``True`` if this IP is unicast, ``False`` otherwise""" + return not self.is_multicast() + + def is_multicast(self): + """:return: ``True`` if this IP is multicast, ``False`` otherwise""" + if self._module == _ipv4: + return self in IPV4_MULTICAST + elif self._module == _ipv6: + return self in IPV6_MULTICAST + + def is_loopback(self): + """ + :return: ``True`` if this IP is loopback address (not for network + transmission), ``False`` otherwise. + References: RFC 3330 and 4291. + + .. note:: |ipv4_in_ipv6_handling| + """ + if self._module.version == 4: + return self in IPV4_LOOPBACK + elif self._module.version == 6: + return self in IPV6_LOOPBACK + + def is_private(self): + """ + :return: ``True`` if this IP is for internal/private use only + (i.e. non-public), ``False`` otherwise. Reference: RFCs 1918, + 3330, 4193, 3879 and 2365. + + .. note:: |ipv4_in_ipv6_handling| + + .. deprecated:: 0.10.0 + The ``is_private`` method has been mixing several different address types together + which could lead to unexpected results. There are more precise + replacements for subset of the addresses handled by ``is_private`` today: + + * :meth:`is_link_local` + * :meth:`is_ipv4_private_use` + * :meth:`is_ipv6_unique_local` + + There is also the :meth:`is_global` method that lets you handle all globally + reachable (or not) addresses. + + The following address blocks currently handled by ``is_private`` have no + convenience methods and you'll have to handle them manually or request a method + addition: + + * ``100.64.0.0/10`` – Shared Address Space + * ``192.0.0.0/24`` – IETF Protocol Assignments + * ``198.18.0.0/15`` – Benchmarking + * ``239.0.0.0``-``239.255.255.255`` + """ + if self._module.version == 4: + for cidr in IPV4_PRIVATEISH: + if self in cidr: + return True + elif self._module.version == 6: + for cidr in IPV6_PRIVATEISH: + if self in cidr: + return True + + if self.is_link_local(): + return True + + return False + + def is_link_local(self): + """ + :return: ``True`` if this IP is link-local address ``False`` otherwise. + Reference: RFCs 3927 and 4291. + + .. note:: |ipv4_in_ipv6_handling| + """ + if self._module.version == 4: + return self in IPV4_LINK_LOCAL + elif self._module.version == 6: + return self in IPV6_LINK_LOCAL + + def is_reserved(self): + """ + :return: ``True`` if this IP is in IANA reserved range, ``False`` + otherwise. Reference: RFCs 3330 and 3171. + + .. note:: |ipv4_in_ipv6_handling| + """ + if self._module.version == 4: + for cidr in IPV4_RESERVED: + if self in cidr: + return True + elif self._module.version == 6: + for cidr in IPV6_RESERVED: + if self in cidr: + return True + return False + + def is_ipv4_mapped(self): + """ + :return: ``True`` if this IP is IPv4-compatible IPv6 address, ``False`` + otherwise. + """ + return self._module.version == 6 and (self._value >> 32) == 0xffff + + def is_ipv4_compat(self): + """ + :return: ``True`` if this IP is IPv4-mapped IPv6 address, ``False`` + otherwise. + """ + return self._module.version == 6 and (self._value >> 32) == 0 + + @property + def info(self): + """ + A record dict containing IANA registration details for this IP address + if available, None otherwise. + """ + # Lazy loading of IANA data structures. + from netaddr.ip.iana import query + return DictDotLookup(query(self)) + + @property + def version(self): + """the IP protocol version represented by this IP object.""" + return self._module.version + + +class IPAddress(BaseIP): + """ + An individual IPv4 or IPv6 address without a net mask or subnet prefix. + + To support these and other network based operations, see `IPNetwork`. + + """ + __slots__ = () + + def __init__(self, addr, version=None, flags=0): + """ + Constructor. + + :param addr: an IPv4 or IPv6 address which may be represented in an + accepted string format, as an unsigned integer or as another + IPAddress object (copy construction). + + :param version: (optional) optimizes version detection if specified + and distinguishes between IPv4 and IPv6 for addresses with an + equivalent integer value. + + :param flags: (optional) decides which rules are applied to the + interpretation of the addr value if passed as a string. + + Matters only in IPv4 context. + + Allowed flag values: + + * The default (``0``) or :data:`INET_ATON`. Follows `inet_aton semantics + <https://www.netmeister.org/blog/inet_aton.html>`_ and allows all kinds of + weird-looking addresses to be parsed. For example: + + >>> IPAddress('1') + IPAddress('0.0.0.1') + >>> IPAddress('1.0xf') + IPAddress('1.0.0.15') + >>> IPAddress('010.020.030.040') + IPAddress('8.16.24.32') + + * ``INET_ATON | ZEROFILL`` or :data:`ZEROFILL` – like the default, except leading zeros are discarded: + + >>> IPAddress('010', flags=INET_ATON | ZEROFILL) + IPAddress('0.0.0.10') + + * :data:`INET_PTON` – requires four decimal octets: + + >>> IPAddress('10.0.0.1', flags=INET_PTON) + IPAddress('10.0.0.1') + + Leading zeros may be ignored or rejected, depending on the platform. + + * ``INET_PTON | ZEROFILL`` – like :data:`INET_PTON`, except leading zeros are + discarded: + + >>> IPAddress('010.020.030.040', flags=INET_PTON | ZEROFILL) + IPAddress('10.20.30.40') + + .. versionchanged:: 0.10.0 + The default IPv4 parsing mode is scheduled to become :data:`INET_PTON` in the next + major release. + """ + super(IPAddress, self).__init__() + + if flags & ~(INET_PTON | ZEROFILL | INET_ATON): + raise ValueError('Unrecognized IPAddress flags value: %s' % (flags,)) + + if flags & INET_ATON and flags & INET_PTON: + raise ValueError('INET_ATON and INET_PTON are mutually exclusive') + + if isinstance(addr, BaseIP): + # Copy constructor. + if version is not None and version != addr._module.version: + raise ValueError('cannot switch IP versions using ' + 'copy constructor!') + self._value = addr._value + self._module = addr._module + else: + # Explicit IP address version. + if version is not None: + if version == 4: + self._module = _ipv4 + elif version == 6: + self._module = _ipv6 + else: + raise ValueError('%r is an invalid IP version!' % version) + + if _is_str(addr) and '/' in addr: + raise ValueError('%s() does not support netmasks or subnet' \ + ' prefixes! See documentation for details.' + % self.__class__.__name__) + + if self._module is None: + # IP version is implicit, detect it from addr. + if isinstance(addr, _int_type): + try: + if 0 <= int(addr) <= _ipv4.max_int: + self._value = int(addr) + self._module = _ipv4 + elif _ipv4.max_int < int(addr) <= _ipv6.max_int: + self._value = int(addr) + self._module = _ipv6 + except ValueError: + pass + else: + for module in _ipv4, _ipv6: + try: + self._value = module.str_to_int(addr, flags) + except: + continue + else: + self._module = module + break + + if self._module is None: + raise AddrFormatError('failed to detect a valid IP ' \ + 'address from %r' % addr) + else: + # IP version is explicit. + if _is_str(addr): + try: + self._value = self._module.str_to_int(addr, flags) + except AddrFormatError: + raise AddrFormatError('base address %r is not IPv%d' + % (addr, self._module.version)) + else: + if 0 <= int(addr) <= self._module.max_int: + self._value = int(addr) + else: + raise AddrFormatError('bad address format: %r' % (addr,)) + + def __getstate__(self): + """:returns: Pickled state of an `IPAddress` object.""" + return self._value, self._module.version + + def __setstate__(self, state): + """ + :param state: data used to unpickle a pickled `IPAddress` object. + + """ + value, version = state + + self._value = value + + if version == 4: + self._module = _ipv4 + elif version == 6: + self._module = _ipv6 + else: + raise ValueError('unpickling failed for object state: %s' \ + % str(state)) + + def netmask_bits(self): + """ + @return: If this IP is a valid netmask, the number of non-zero + bits are returned, otherwise it returns the width in bits for + the IP address version. + """ + if not self.is_netmask(): + return self._module.width + + # the '0' address (e.g. 0.0.0.0 or 0000::) is a valid netmask with + # no bits set. + if self._value == 0: + return 0 + + i_val = self._value + numbits = 0 + + while i_val > 0: + if i_val & 1 == 1: + break + numbits += 1 + i_val >>= 1 + + mask_length = self._module.width - numbits + + if not 0 <= mask_length <= self._module.width: + raise ValueError('Unexpected mask length %d for address type!' \ + % mask_length) + + return mask_length + + def is_hostmask(self): + """ + :return: ``True`` if this IP address host mask, ``False`` otherwise. + """ + int_val = self._value + 1 + return (int_val & (int_val - 1) == 0) + + def is_netmask(self): + """ + :return: ``True`` if this IP address network mask, ``False`` otherwise. + """ + int_val = (self._value ^ self._module.max_int) + 1 + return (int_val & (int_val - 1) == 0) + + def __iadd__(self, num): + """ + Increases the numerical value of this IPAddress by num. + + An IndexError is raised if result exceeds maximum IP address value or + is less than zero. + + :param num: size of IP address increment. + """ + new_value = int(self._value + num) + if 0 <= new_value <= self._module.max_int: + self._value = new_value + return self + raise IndexError('result outside valid IP address boundary!') + + def __isub__(self, num): + """ + Decreases the numerical value of this IPAddress by num. + + An IndexError is raised if result is less than zero or exceeds maximum + IP address value. + + :param num: size of IP address decrement. + """ + new_value = int(self._value - num) + if 0 <= new_value <= self._module.max_int: + self._value = new_value + return self + raise IndexError('result outside valid IP address boundary!') + + def __add__(self, num): + """ + Add the numerical value of this IP address to num and provide the + result as a new IPAddress object. + + :param num: size of IP address increase. + + :return: a new IPAddress object with its numerical value increased by num. + """ + new_value = int(self._value + num) + if 0 <= new_value <= self._module.max_int: + return self.__class__(new_value, self._module.version) + raise IndexError('result outside valid IP address boundary!') + + __radd__ = __add__ + + def __sub__(self, num): + """ + Subtract the numerical value of this IP address from num providing + the result as a new IPAddress object. + + :param num: size of IP address decrease. + + :return: a new IPAddress object with its numerical value decreased by num. + """ + new_value = int(self._value - num) + if 0 <= new_value <= self._module.max_int: + return self.__class__(new_value, self._module.version) + raise IndexError('result outside valid IP address boundary!') + + def __rsub__(self, num): + """ + Subtract num (lvalue) from the numerical value of this IP address + (rvalue) providing the result as a new IPAddress object. + + :param num: size of IP address decrease. + + :return: a new IPAddress object with its numerical value decreased by num. + """ + new_value = int(num - self._value) + if 0 <= new_value <= self._module.max_int: + return self.__class__(new_value, self._module.version) + raise IndexError('result outside valid IP address boundary!') + + def key(self): + """ + :return: a key tuple that uniquely identifies this IP address. + """ + # NB - we return the value here twice because this IP Address may + # be sorted with a list of networks and it should still end up + # in the expected order. + return self._module.version, self._value + + def sort_key(self): + """:return: A key tuple used to compare and sort this `IPAddress` correctly.""" + return self._module.version, self._value, self._module.width + + def __int__(self): + """:return: the value of this IP address as an unsigned integer""" + return self._value + + def __long__(self): + """:return: the value of this IP address as an unsigned integer""" + return self._value + + def __oct__(self): + """:return: an octal string representation of this IP address.""" + # Python 2.x + if self._value == 0: + return '0' + return '0%o' % self._value + + def __hex__(self): + """:return: a hexadecimal string representation of this IP address.""" + # Python 2.x + return '0x%x' % self._value + + def __index__(self): + """ + :return: return the integer value of this IP address when called by \ + hex(), oct() or bin(). + """ + # Python 3.x + return self._value + + def __bytes__(self): + """ + :return: a bytes object equivalent to this IP address. In network + byte order, big-endian. + """ + # Python 3.x + return self._value.to_bytes(self._module.width//8, 'big') + + def bits(self, word_sep=None): + """ + :param word_sep: (optional) the separator to insert between words. + Default: None - use default separator for address type. + + :return: the value of this IP address as a binary digit string.""" + return self._module.int_to_bits(self._value, word_sep) + + @property + def packed(self): + """The value of this IP address as a packed binary string.""" + return self._module.int_to_packed(self._value) + + @property + def words(self): + """ + A list of unsigned integer words (octets for IPv4, hextets for IPv6) + found in this IP address. + """ + return self._module.int_to_words(self._value) + + @property + def bin(self): + """ + The value of this IP address in standard Python binary + representational form (0bxxx). A back port of the format provided by + the builtin bin() function found in Python 2.6.x and higher. + """ + return self._module.int_to_bin(self._value) + + @property + def reverse_dns(self): + """The reverse DNS lookup record for this IP address""" + return self._module.int_to_arpa(self._value) + + def ipv4(self): + """ + Raises an `AddrConversionError` if IPv6 address cannot be converted + to IPv4. + + :return: A numerically equivalent version 4 `IPAddress` object. + """ + ip = None + klass = self.__class__ + + if self._module.version == 4: + ip = klass(self._value, 4) + elif self._module.version == 6: + if 0 <= self._value <= _ipv4.max_int: + ip = klass(self._value, 4) + elif _ipv4.max_int <= self._value <= 0xffffffffffff: + ip = klass(self._value - 0xffff00000000, 4) + else: + raise AddrConversionError('IPv6 address %s unsuitable for ' \ + 'conversion to IPv4!' % self) + return ip + + def ipv6(self, ipv4_compatible=False): + """ + .. note:: The IPv4-mapped IPv6 address format is now considered \ + deprecated. See RFC 4291 or later for details. + + :param ipv4_compatible: If ``True`` returns an IPv4-mapped address + (::ffff:x.x.x.x), an IPv4-compatible (::x.x.x.x) address + otherwise. Default: False (IPv4-mapped). + + :return: A numerically equivalent version 6 `IPAddress` object. + """ + ip = None + klass = self.__class__ + + if self._module.version == 6: + if ipv4_compatible and \ + (0xffff00000000 <= self._value <= 0xffffffffffff): + ip = klass(self._value - 0xffff00000000, 6) + else: + ip = klass(self._value, 6) + elif self._module.version == 4: + # IPv4-Compatible IPv6 address + ip = klass(self._value, 6) + if not ipv4_compatible: + # IPv4-Mapped IPv6 address + ip = klass(0xffff00000000 + self._value, 6) + + return ip + + def format(self, dialect=None): + """ + Only relevant for IPv6 addresses. Has no effect for IPv4. + + :param dialect: One of the :ref:`ipv6_formatting_dialects`. + + :return: an alternate string representation for this IP address. + """ + if dialect is not None: + if not hasattr(dialect, 'word_fmt'): + raise TypeError( + 'custom dialects should subclass ipv6_verbose!') + return self._module.int_to_str(self._value, dialect=dialect) + + def __or__(self, other): + """ + :param other: An `IPAddress` object (or other int-like object). + + :return: bitwise OR (x | y) between the integer value of this IP + address and ``other``. + """ + return self.__class__(self._value | int(other), self._module.version) + + def __and__(self, other): + """ + :param other: An `IPAddress` object (or other int-like object). + + :return: bitwise AND (x & y) between the integer value of this IP + address and ``other``. + """ + return self.__class__(self._value & int(other), self._module.version) + + def __xor__(self, other): + """ + :param other: An `IPAddress` object (or other int-like object). + + :return: bitwise exclusive OR (x ^ y) between the integer value of + this IP address and ``other``. + """ + return self.__class__(self._value ^ int(other), self._module.version) + + def __lshift__(self, numbits): + """ + :param numbits: size of bitwise shift. + + :return: an `IPAddress` object based on this one with its integer + value left shifted by ``numbits``. + """ + return self.__class__(self._value << numbits, self._module.version) + + def __rshift__(self, numbits): + """ + :param numbits: size of bitwise shift. + + :return: an `IPAddress` object based on this one with its integer + value right shifted by ``numbits``. + """ + return self.__class__(self._value >> numbits, self._module.version) + + def __nonzero__(self): + """:return: ``True`` if the numerical value of this IP address is not \ + zero, ``False`` otherwise.""" + # Python 2.x. + return bool(self._value) + + __bool__ = __nonzero__ # Python 3.x. + + def __str__(self): + """:return: IP address in presentational format""" + return self._module.int_to_str(self._value) + + def __repr__(self): + """:return: Python statement to create an equivalent object""" + return "%s('%s')" % (self.__class__.__name__, self) + + def to_canonical(self): + """ + Converts the address to IPv4 if it is an IPv4-mapped IPv6 address (`RFC 4291 + Section 2.5.5.2 <https://datatracker.ietf.org/doc/html/rfc4291.html#section-2.5.5.2>`_), + otherwise returns the address as-is. + + >>> # IPv4-mapped IPv6 + >>> IPAddress('::ffff:10.0.0.1').to_canonical() + IPAddress('10.0.0.1') + >>> + >>> # Everything else + >>> IPAddress('::1').to_canonical() + IPAddress('::1') + >>> IPAddress('10.0.0.1').to_canonical() + IPAddress('10.0.0.1') + + .. versionadded:: 0.10.0 + """ + if not self.is_ipv4_mapped(): + return self + return self.ipv4() + + def is_global(self): + """ + Returns ``True`` if this address is considered globally reachable, ``False`` otherwise. + + An address is considered globally reachable if it's not a special-purpose address + or it's a special-purpose address listed as globally reachable in the relevant + registries: + + * |iana_special_ipv4| + * |iana_special_ipv6| + + Addresses for which the ``Globally Reachable`` value is ``N/A`` are not considered + globally reachable. + + Address blocks with set termination date are not taken into consideration. + + Whether or not an address can actually be reached in any local or global context will + depend on the network configuration and may differ from what this method returns. + + Currently there can be addresses that are neither ``is_global()`` nor :meth:`is_private`. + There are also addresses that are both. All things being equal ``is_global()`` should + be considered more trustworthy. + + Examples: + + >>> IPAddress('1.1.1.1').is_global() + True + >>> IPAddress('::1').is_global() + False + + .. note:: |ipv4_in_ipv6_handling| + """ + if self._module.version == 4: + not_reachable = IPV4_NOT_GLOBALLY_REACHABLE + exceptions = IPV4_NOT_GLOBALLY_REACHABLE_EXCEPTIONS + else: + not_reachable = IPV6_NOT_GLOBALLY_REACHABLE + exceptions = IPV6_NOT_GLOBALLY_REACHABLE_EXCEPTIONS + + return ( + not any(self in net for net in not_reachable) + or any(self in net for net in exceptions) + ) + + def is_ipv4_private_use(self): + """ + Returns ``True`` if this address is an IPv4 private-use address as defined in + :rfc:`1918`. + + The private-use address blocks: + + * ``10.0.0.0/8`` + * ``172.16.0.0/12`` + * ``192.168.0.0/16`` + + .. note:: |ipv4_in_ipv6_handling| + + .. versionadded:: 0.10.0 + """ + return self._module.version == 4 and any(self in cidr for cidr in IPV4_PRIVATE_USE) + + def is_ipv6_unique_local(self): + """ + Returns ``True`` if this address is an IPv6 unique local address as defined in + :rfc:`4193` and listed in |iana_special_ipv6|. + + The IPv6 unique local address block: ``fc00::/7``. + + .. versionadded:: 0.10.0 + """ + return self._module.version == 6 and self in IPV6_UNIQUE_LOCAL + + +class IPListMixin(object): + """ + A mixin class providing shared list-like functionality to classes + representing groups of IP addresses. + + """ + __slots__ = () + def __iter__(self): + """ + :return: An iterator providing access to all `IPAddress` objects + within range represented by this ranged IP object. + """ + start_ip = IPAddress(self.first, self._module.version) + end_ip = IPAddress(self.last, self._module.version) + return iter_iprange(start_ip, end_ip) + + @property + def size(self): + """ + The total number of IP addresses within this ranged IP object. + """ + return int(self.last - self.first + 1) + + def __len__(self): + """ + :return: the number of IP addresses in this ranged IP object. Raises + an `IndexError` if size > system max int (a Python 2.x + limitation). Use the .size property for subnets of any size. + """ + size = self.size + if size > _sys_maxint: + raise IndexError(("range contains more than %d (sys.maxint) " + "IP addresses! Use the .size property instead." % _sys_maxint)) + return size + + def __getitem__(self, index): + """ + :return: The IP address(es) in this `IPNetwork` object referenced by + index or slice. As slicing can produce large sequences of objects + an iterator is returned instead of the more usual `list`. + """ + item = None + + if hasattr(index, 'indices'): + if self._module.version == 6: + raise TypeError('IPv6 slices are not supported!') + + (start, stop, step) = index.indices(self.size) + + if (start + step < 0) or (step > stop): + # step value exceeds start and stop boundaries. + item = iter([IPAddress(self.first, self._module.version)]) + else: + start_ip = IPAddress(self.first + start, self._module.version) + end_ip = IPAddress(self.first + stop - step, self._module.version) + item = iter_iprange(start_ip, end_ip, step) + else: + try: + index = int(index) + if (- self.size) <= index < 0: + # negative index. + item = IPAddress(self.last + index + 1, self._module.version) + elif 0 <= index <= (self.size - 1): + # Positive index or zero index. + item = IPAddress(self.first + index, self._module.version) + else: + raise IndexError('index out range for address range size!') + except ValueError: + raise TypeError('unsupported index type %r!' % index) + + return item + + def __contains__(self, other): + """ + :param other: an `IPAddress` or ranged IP object. + + :return: ``True`` if other falls within the boundary of this one, + ``False`` otherwise. + """ + if isinstance(other, BaseIP): + if self._module.version != other._module.version: + return False + if isinstance(other, IPAddress): + return other._value >= self.first and other._value <= self.last + # Assume that we (and the other) provide .first and .last. + return other.first >= self.first and other.last <= self.last + + # Whatever it is, try to interpret it as IPAddress. + return IPAddress(other) in self + + def __nonzero__(self): + """ + Ranged IP objects always represent a sequence of at least one IP + address and are therefore always True in the boolean context. + """ + # Python 2.x. + return True + + __bool__ = __nonzero__ # Python 3.x. + + +def parse_ip_network(module, addr, implicit_prefix=False, flags=0): + if isinstance(addr, tuple): + # CIDR integer tuple + if len(addr) != 2: + raise AddrFormatError('invalid %s tuple!' % module.family_name) + value, prefixlen = addr + + if not(0 <= value <= module.max_int): + raise AddrFormatError('invalid address value for %s tuple!' + % module.family_name) + if not(0 <= prefixlen <= module.width): + raise AddrFormatError('invalid prefix for %s tuple!' \ + % module.family_name) + elif isinstance(addr, _str_type): + # CIDR-like string subnet + if implicit_prefix: + #TODO: deprecate this option in netaddr 0.8.x + addr = cidr_abbrev_to_verbose(addr) + + if '/' in addr: + val1, val2 = addr.split('/', 1) + else: + val1 = addr + val2 = None + + try: + ip = IPAddress(val1, module.version, flags=INET_PTON) + except AddrFormatError: + if module.version == 4: + # Try a partial IPv4 network address... + expanded_addr = _ipv4.expand_partial_address(val1) + ip = IPAddress(expanded_addr, module.version, flags=INET_PTON) + else: + raise AddrFormatError('invalid IPNetwork address %s!' % addr) + value = ip._value + + try: + # Integer CIDR prefix. + prefixlen = int(val2) + except TypeError: + if val2 is None: + # No prefix was specified. + prefixlen = module.width + except ValueError: + # Not an integer prefix, try a netmask/hostmask prefix. + mask = IPAddress(val2, module.version, flags=INET_PTON) + if mask.is_netmask(): + prefixlen = module.netmask_to_prefix[mask._value] + elif mask.is_hostmask(): + prefixlen = module.hostmask_to_prefix[mask._value] + else: + raise AddrFormatError('addr %r is not a valid IPNetwork!' \ + % addr) + + if not 0 <= prefixlen <= module.width: + raise AddrFormatError('invalid prefix for %s address!' \ + % module.family_name) + else: + raise TypeError('unexpected type %s for addr arg' % type(addr)) + + if flags & NOHOST: + # Remove host bits. + netmask = module.prefix_to_netmask[prefixlen] + value = value & netmask + + return value, prefixlen + + +class IPNetwork(BaseIP, IPListMixin): + """ + An IPv4 or IPv6 network or subnet. + + A combination of an IP address and a network mask. + + Accepts CIDR and several related variants : + + a) Standard CIDR:: + + x.x.x.x/y -> 192.0.2.0/24 + x::/y -> fe80::/10 + + b) Hybrid CIDR format (netmask address instead of prefix), where 'y' \ + address represent a valid netmask:: + + x.x.x.x/y.y.y.y -> 192.0.2.0/255.255.255.0 + x::/y:: -> fe80::/ffc0:: + + c) ACL hybrid CIDR format (hostmask address instead of prefix like \ + Cisco's ACL bitmasks), where 'y' address represent a valid netmask:: + + x.x.x.x/y.y.y.y -> 192.0.2.0/0.0.0.255 + x::/y:: -> fe80::/3f:ffff:ffff:ffff:ffff:ffff:ffff:ffff + + d) Abbreviated CIDR format (as of netaddr 0.7.x this requires the \ + optional constructor argument ``implicit_prefix=True``):: + + x -> 192 + x/y -> 10/8 + x.x/y -> 192.168/16 + x.x.x/y -> 192.168.0/24 + + which are equivalent to:: + + x.0.0.0/y -> 192.0.0.0/24 + x.0.0.0/y -> 10.0.0.0/8 + x.x.0.0/y -> 192.168.0.0/16 + x.x.x.0/y -> 192.168.0.0/24 + + .. deprecated:: 0.10.0 + + .. warning:: + + The next release (0.9.0) will contain a backwards incompatible change + connected to handling of RFC 6164 IPv6 addresses (/127 and /128 subnets). + When iterating ``IPNetwork`` and ``IPNetwork.iter_hosts()`` the first + addresses in the networks will no longer be excluded and ``broadcast`` + will be ``None``. + """ + __slots__ = ('_prefixlen',) + + def __init__(self, addr, implicit_prefix=False, version=None, flags=0): + """ + Constructor. + + :param addr: an IPv4 or IPv6 address with optional CIDR prefix, + netmask or hostmask. May be an IP address in presentation + (string) format, an tuple containing and integer address and a + network prefix, or another IPAddress/IPNetwork object (copy + construction). + + :param implicit_prefix: (optional) if True, the constructor uses + classful IPv4 rules to select a default prefix when one is not + provided. If False it uses the length of the IP address version. + (default: False) + + .. deprecated:: 0.10.0 + + :param version: (optional) optimizes version detection if specified + and distinguishes between IPv4 and IPv6 for addresses with an + equivalent integer value. + + :param flags: (optional) decides which rules are applied to the + interpretation of the addr value. Currently only supports the + :data:`NOHOST` option. + + >>> IPNetwork('1.2.3.4/24') + IPNetwork('1.2.3.4/24') + >>> IPNetwork('1.2.3.4/24', flags=NOHOST) + IPNetwork('1.2.3.0/24') + """ + super(IPNetwork, self).__init__() + + if flags & ~NOHOST: + raise ValueError('Unrecognized IPAddress flags value: %s' % (flags,)) + + value, prefixlen, module = None, None, None + + if hasattr(addr, '_prefixlen'): + # IPNetwork object copy constructor + value = addr._value + module = addr._module + prefixlen = addr._prefixlen + elif hasattr(addr, '_value'): + # IPAddress object copy constructor + value = addr._value + module = addr._module + prefixlen = module.width + elif version == 4: + value, prefixlen = parse_ip_network(_ipv4, addr, + implicit_prefix=implicit_prefix, flags=flags) + module = _ipv4 + elif version == 6: + value, prefixlen = parse_ip_network(_ipv6, addr, + implicit_prefix=implicit_prefix, flags=flags) + module = _ipv6 + else: + if version is not None: + raise ValueError('%r is an invalid IP version!' % version) + try: + module = _ipv4 + value, prefixlen = parse_ip_network(module, addr, + implicit_prefix, flags) + except AddrFormatError: + try: + module = _ipv6 + value, prefixlen = parse_ip_network(module, addr, + implicit_prefix, flags) + except AddrFormatError: + pass + + if value is None: + raise AddrFormatError('invalid IPNetwork %s' % (addr,)) + + self._value = value + self._prefixlen = prefixlen + self._module = module + + def __getstate__(self): + """:return: Pickled state of an `IPNetwork` object.""" + return self._value, self._prefixlen, self._module.version + + def __setstate__(self, state): + """ + :param state: data used to unpickle a pickled `IPNetwork` object. + + """ + value, prefixlen, version = state + + self._value = value + + if version == 4: + self._module = _ipv4 + elif version == 6: + self._module = _ipv6 + else: + raise ValueError('unpickling failed for object state %s' \ + % (state,)) + + if 0 <= prefixlen <= self._module.width: + self._prefixlen = prefixlen + else: + raise ValueError('unpickling failed for object state %s' \ + % (state,)) + + def _set_prefixlen(self, value): + if not isinstance(value, _int_type): + raise TypeError('int argument expected, not %s' % type(value)) + if not 0 <= value <= self._module.width: + raise AddrFormatError('invalid prefix for an %s address!' \ + % self._module.family_name) + self._prefixlen = value + + prefixlen = property(lambda self: self._prefixlen, _set_prefixlen, + doc='size of the bitmask used to separate the network from the host bits') + + @property + def ip(self): + """ + The IP address of this `IPNetwork` object. This is may or may not be + the same as the network IP address which varies according to the value + of the CIDR subnet prefix. + """ + return IPAddress(self._value, self._module.version) + + @property + def network(self): + """The network address of this `IPNetwork` object.""" + return IPAddress(self._value & self._netmask_int, self._module.version) + + @property + def broadcast(self): + """The broadcast address of this `IPNetwork` object. + + .. warning:: + + The next release (0.9.0) will contain a backwards incompatible change + connected to handling of RFC 6164 IPv6 addresses (/127 and /128 subnets). + ``broadcast`` will be ``None`` when dealing with those networks. + """ + if (self._module.width - self._prefixlen) <= 1: + return None + else: + return IPAddress(self._value | self._hostmask_int, self._module.version) + + @property + def first(self): + """ + The integer value of first IP address found within this `IPNetwork` + object. + """ + return self._value & (self._module.max_int ^ self._hostmask_int) + + @property + def last(self): + """ + The integer value of last IP address found within this `IPNetwork` + object. + """ + hostmask = (1 << (self._module.width - self._prefixlen)) - 1 + return self._value | hostmask + + @property + def netmask(self): + """The subnet mask of this `IPNetwork` object.""" + netmask = self._module.max_int ^ self._hostmask_int + return IPAddress(netmask, self._module.version) + + @netmask.setter + def netmask(self, value): + """Set the prefixlen using a subnet mask""" + ip = IPAddress(value) + + if ip.version != self.version: + raise ValueError("IP version mismatch: %s and %s" % (ip, self)) + + if not ip.is_netmask(): + raise ValueError("Invalid subnet mask specified: %s" % str(value)) + + self.prefixlen = ip.netmask_bits() + + @property + def _netmask_int(self): + """Same as self.netmask, but in integer format""" + return self._module.max_int ^ self._hostmask_int + + @property + def hostmask(self): + """The host mask of this `IPNetwork` object.""" + hostmask = (1 << (self._module.width - self._prefixlen)) - 1 + return IPAddress(hostmask, self._module.version) + + @property + def _hostmask_int(self): + """Same as self.hostmask, but in integer format""" + return (1 << (self._module.width - self._prefixlen)) - 1 + + @property + def cidr(self): + """ + The true CIDR address for this `IPNetwork` object which omits any + host bits to the right of the CIDR subnet prefix. + """ + return IPNetwork( + (self._value & self._netmask_int, self._prefixlen), + version=self._module.version) + + def __iadd__(self, num): + """ + Increases the value of this `IPNetwork` object by the current size + multiplied by ``num``. + + An `IndexError` is raised if result exceeds maximum IP address value + or is less than zero. + + :param num: (optional) number of `IPNetwork` blocks to increment \ + this IPNetwork's value by. + """ + new_value = int(self.network) + (self.size * num) + + if (new_value + (self.size - 1)) > self._module.max_int: + raise IndexError('increment exceeds address boundary!') + if new_value < 0: + raise IndexError('increment is less than zero!') + + self._value = new_value + return self + + def __isub__(self, num): + """ + Decreases the value of this `IPNetwork` object by the current size + multiplied by ``num``. + + An `IndexError` is raised if result is less than zero or exceeds + maximum IP address value. + + :param num: (optional) number of `IPNetwork` blocks to decrement \ + this IPNetwork's value by. + """ + new_value = int(self.network) - (self.size * num) + + if new_value < 0: + raise IndexError('decrement is less than zero!') + if (new_value + (self.size - 1)) > self._module.max_int: + raise IndexError('decrement exceeds address boundary!') + + self._value = new_value + return self + + def __contains__(self, other): + """ + :param other: an `IPAddress` or ranged IP object. + + :return: ``True`` if other falls within the boundary of this one, + ``False`` otherwise. + """ + if isinstance(other, BaseIP): + if self._module.version != other._module.version: + return False + + # self_net will contain only the network bits. + shiftwidth = self._module.width - self._prefixlen + self_net = self._value >> shiftwidth + if isinstance(other, IPRange): + # IPRange has no _value. + # (self_net+1)<<shiftwidth is not our last address, but the one + # after the last one. + return ((self_net << shiftwidth) <= other._start._value and + (((self_net + 1) << shiftwidth) > other._end._value)) + + other_net = other._value >> shiftwidth + if isinstance(other, IPAddress): + return other_net == self_net + if isinstance(other, IPNetwork): + return self_net == other_net and self._prefixlen <= other._prefixlen + + # Whatever it is, try to interpret it as IPNetwork + return IPNetwork(other) in self + + def key(self): + """ + :return: A key tuple used to uniquely identify this `IPNetwork`. + """ + return self._module.version, self.first, self.last + + def sort_key(self): + """ + :return: A key tuple used to compare and sort this `IPNetwork` correctly. + """ + net_size_bits = self._prefixlen - 1 + first = self._value & (self._module.max_int ^ self._hostmask_int) + host_bits = self._value - first + return self._module.version, first, net_size_bits, host_bits + + def ipv4(self): + """ + :return: A numerically equivalent version 4 `IPNetwork` object. \ + Raises an `AddrConversionError` if IPv6 address cannot be \ + converted to IPv4. + """ + ip = None + klass = self.__class__ + + if self._module.version == 4: + ip = klass('%s/%d' % (self.ip, self.prefixlen)) + elif self._module.version == 6: + if 0 <= self._value <= _ipv4.max_int: + addr = _ipv4.int_to_str(self._value) + ip = klass('%s/%d' % (addr, self.prefixlen - 96)) + elif _ipv4.max_int <= self._value <= 0xffffffffffff: + addr = _ipv4.int_to_str(self._value - 0xffff00000000) + ip = klass('%s/%d' % (addr, self.prefixlen - 96)) + else: + raise AddrConversionError('IPv6 address %s unsuitable for ' \ + 'conversion to IPv4!' % self) + return ip + + def ipv6(self, ipv4_compatible=False): + """ + .. note:: the IPv4-mapped IPv6 address format is now considered \ + deprecated. See RFC 4291 or later for details. + + :param ipv4_compatible: If ``True`` returns an IPv4-mapped address + (::ffff:x.x.x.x), an IPv4-compatible (::x.x.x.x) address + otherwise. Default: False (IPv4-mapped). + + :return: A numerically equivalent version 6 `IPNetwork` object. + """ + ip = None + klass = self.__class__ + + if self._module.version == 6: + if ipv4_compatible and \ + (0xffff00000000 <= self._value <= 0xffffffffffff): + ip = klass((self._value - 0xffff00000000, self._prefixlen), + version=6) + else: + ip = klass((self._value, self._prefixlen), version=6) + elif self._module.version == 4: + if ipv4_compatible: + # IPv4-Compatible IPv6 address + ip = klass((self._value, self._prefixlen + 96), version=6) + else: + # IPv4-Mapped IPv6 address + ip = klass((0xffff00000000 + self._value, + self._prefixlen + 96), version=6) + + return ip + + def previous(self, step=1): + """ + :param step: the number of IP subnets between this `IPNetwork` object + and the expected subnet. Default: 1 (the previous IP subnet). + + :return: The adjacent subnet preceding this `IPNetwork` object. + """ + ip_copy = self.__class__('%s/%d' % (self.network, self.prefixlen), + self._module.version) + ip_copy -= step + return ip_copy + + def next(self, step=1): + """ + :param step: the number of IP subnets between this `IPNetwork` object + and the expected subnet. Default: 1 (the next IP subnet). + + :return: The adjacent subnet succeeding this `IPNetwork` object. + """ + ip_copy = self.__class__('%s/%d' % (self.network, self.prefixlen), + self._module.version) + ip_copy += step + return ip_copy + + def supernet(self, prefixlen=0): + """ + Provides a list of supernets for this `IPNetwork` object between the + size of the current prefix and (if specified) an endpoint prefix. + + :param prefixlen: (optional) a CIDR prefix for the maximum supernet. + Default: 0 - returns all possible supernets. + + :return: a tuple of supernet `IPNetwork` objects. + """ + if not 0 <= prefixlen <= self._module.width: + raise ValueError('CIDR prefix /%d invalid for IPv%d!' \ + % (prefixlen, self._module.version)) + + supernets = [] + # Use a copy of self as we'll be editing it. + supernet = self.cidr + supernet._prefixlen = prefixlen + while supernet._prefixlen != self._prefixlen: + supernets.append(supernet.cidr) + supernet._prefixlen += 1 + return supernets + + def subnet(self, prefixlen, count=None, fmt=None): + """ + A generator that divides up this IPNetwork's subnet into smaller + subnets based on a specified CIDR prefix. + + :param prefixlen: a CIDR prefix indicating size of subnets to be + returned. + + :param count: (optional) number of consecutive IP subnets to be + returned. + + :return: an iterator containing IPNetwork subnet objects. + """ + if not 0 <= self.prefixlen <= self._module.width: + raise ValueError('CIDR prefix /%d invalid for IPv%d!' \ + % (prefixlen, self._module.version)) + + if not self.prefixlen <= prefixlen: + # Don't return anything. + return + + # Calculate number of subnets to be returned. + width = self._module.width + max_subnets = 2 ** (width - self.prefixlen) // 2 ** (width - prefixlen) + + if count is None: + count = max_subnets + + if not 1 <= count <= max_subnets: + raise ValueError('count outside of current IP subnet boundary!') + + base_subnet = self._module.int_to_str(self.first) + i = 0 + while(i < count): + subnet = self.__class__('%s/%d' % (base_subnet, prefixlen), + self._module.version) + subnet.value += (subnet.size * i) + subnet.prefixlen = prefixlen + i += 1 + yield subnet + + def iter_hosts(self): + """ + A generator that provides all the IP addresses that can be assigned + to hosts within the range of this IP object's subnet. + + - for IPv4, the network and broadcast addresses are excluded, excepted \ + when using /31 or /32 subnets as per RFC 3021. + + - for IPv6, only Subnet-Router anycast address (first address in the \ + network) is excluded as per RFC 4291 section 2.6.1, excepted when using \ + /127 or /128 subnets as per RFC 6164. + + .. warning:: + + The next release (0.9.0) will contain a backwards incompatible change + connected to handling of RFC 6164 IPv6 addresses (/127 and /128 subnets). + When iterating ``IPNetwork`` and ``IPNetwork.iter_hosts()`` the first + addresses in the networks will no longer be excluded. + + :return: an IPAddress iterator + """ + it_hosts = iter([]) + + # Common logic, first IP is always reserved. + first_usable_address = self.first + 1 + if self._module.version == 4: + # IPv4 logic, last address is reserved for broadcast. + last_usable_address = self.last - 1 + else: + # IPv6 logic, no broadcast address reserved. + last_usable_address = self.last + + # If subnet has a size of less than 4, then it is a /31, /32, /127 or /128. + # Handle them as per RFC 3021 (IPv4) or RFC 6164 (IPv6), and don't reserve + # first or last IP address. + if self.size >= 4: + it_hosts = iter_iprange( + IPAddress(first_usable_address, self._module.version), + IPAddress(last_usable_address, self._module.version)) + else: + it_hosts = iter_iprange( + IPAddress(self.first, self._module.version), + IPAddress(self.last, self._module.version)) + + return it_hosts + + def __str__(self): + """:return: this IPNetwork in CIDR format""" + addr = self._module.int_to_str(self._value) + return "%s/%s" % (addr, self.prefixlen) + + def __repr__(self): + """:return: Python statement to create an equivalent object""" + return "%s('%s')" % (self.__class__.__name__, self) + + +class IPRange(BaseIP, IPListMixin): + """ + An arbitrary IPv4 or IPv6 address range. + + Formed from a lower and upper bound IP address. The upper bound IP cannot + be numerically smaller than the lower bound and the IP version of both + must match. + + """ + __slots__ = ('_start', '_end') + + def __init__(self, start, end, flags=0): + """ + Constructor. + + :param start: an IPv4 or IPv6 address that forms the lower + boundary of this IP range. + + :param end: an IPv4 or IPv6 address that forms the upper + boundary of this IP range. + + :param flags: (optional) decides which rules are applied to the + interpretation of the start and end values. Refer to the :meth:`IPAddress.__init__` + documentation for details. + + """ + self._start = IPAddress(start, flags=flags) + self._module = self._start._module + self._end = IPAddress(end, self._module.version, flags=flags) + if int(self._start) > int(self._end): + raise AddrFormatError('lower bound IP greater than upper bound!') + + def __getstate__(self): + """:return: Pickled state of an `IPRange` object.""" + return self._start.value, self._end.value, self._module.version + + def __setstate__(self, state): + """ + :param state: data used to unpickle a pickled `IPRange` object. + """ + start, end, version = state + + self._start = IPAddress(start, version) + self._module = self._start._module + self._end = IPAddress(end, version) + + def __contains__(self, other): + if isinstance(other, BaseIP): + if self._module.version != other._module.version: + return False + if isinstance(other, IPAddress): + return (self._start._value <= other._value and + self._end._value >= other._value) + if isinstance(other, IPRange): + return (self._start._value <= other._start._value and + self._end._value >= other._end._value) + if isinstance(other, IPNetwork): + shiftwidth = other._module.width - other._prefixlen + other_start = (other._value >> shiftwidth) << shiftwidth + # Start of the next network after other + other_next_start = other_start + (1 << shiftwidth) + + return (self._start._value <= other_start and + self._end._value > other_next_start) + + # Whatever it is, try to interpret it as IPAddress. + return IPAddress(other) in self + + @property + def first(self): + """The integer value of first IP address in this `IPRange` object.""" + return int(self._start) + + @property + def last(self): + """The integer value of last IP address in this `IPRange` object.""" + return int(self._end) + + def key(self): + """ + :return: A key tuple used to uniquely identify this `IPRange`. + """ + return self._module.version, self.first, self.last + + def sort_key(self): + """ + :return: A key tuple used to compare and sort this `IPRange` correctly. + """ + skey = self._module.width - num_bits(self.size) + return self._module.version, self._start._value, skey + + def cidrs(self): + """ + The list of CIDR addresses found within the lower and upper bound + addresses of this `IPRange`. + """ + return iprange_to_cidrs(self._start, self._end) + + def __str__(self): + """:return: this `IPRange` in a common representational format.""" + return "%s-%s" % (self._start, self._end) + + def __repr__(self): + """:return: Python statement to create an equivalent object""" + return "%s('%s', '%s')" % (self.__class__.__name__, + self._start, self._end) + + +def iter_unique_ips(*args): + """ + :param args: A list of IP addresses and subnets passed in as arguments. + + :return: A generator that flattens out IP subnets, yielding unique + individual IP addresses (no duplicates). + """ + for cidr in cidr_merge(args): + for ip in cidr: + yield ip + + +def cidr_abbrev_to_verbose(abbrev_cidr): + """ + A function that converts abbreviated IPv4 CIDRs to their more verbose + equivalent. + + :param abbrev_cidr: an abbreviated CIDR. + + Uses the old-style classful IP address rules to decide on a default + subnet prefix if one is not explicitly provided. + + Only supports IPv4 addresses. + + Examples :: + + 10 - 10.0.0.0/8 + 10/16 - 10.0.0.0/16 + 128 - 128.0.0.0/16 + 128/8 - 128.0.0.0/8 + 192.168 - 192.168.0.0/16 + + :return: A verbose CIDR from an abbreviated CIDR or old-style classful \ + network address. The original value if it was not recognised as a \ + supported abbreviation. + """ + # Internal function that returns a prefix value based on the old IPv4 + # classful network scheme that has been superseded (almost) by CIDR. + def classful_prefix(octet): + octet = int(octet) + if not 0 <= octet <= 255: + raise IndexError('Invalid octet: %r!' % octet) + if 0 <= octet <= 127: # Legacy class 'A' classification. + return 8 + elif 128 <= octet <= 191: # Legacy class 'B' classification. + return 16 + elif 192 <= octet <= 223: # Legacy class 'C' classification. + return 24 + elif 224 <= octet <= 239: # Multicast address range. + return 4 + return 32 # Default. + + if _is_str(abbrev_cidr): + if ':' in abbrev_cidr or abbrev_cidr == '': + return abbrev_cidr + + try: + # Single octet partial integer or string address. + i = int(abbrev_cidr) + return "%s.0.0.0/%s" % (i, classful_prefix(i)) + except ValueError: + # Multi octet partial string address with optional prefix. + if '/' in abbrev_cidr: + part_addr, prefix = abbrev_cidr.split('/', 1) + + # Check prefix for validity. + try: + if not 0 <= int(prefix) <= 32: + raise ValueError('prefixlen in address %r out of range' \ + ' for IPv4!' % (abbrev_cidr,)) + except ValueError: + return abbrev_cidr + else: + part_addr = abbrev_cidr + prefix = None + + tokens = part_addr.split('.') + if len(tokens) > 4: + # Not a recognisable format. + return abbrev_cidr + for i in range(4 - len(tokens)): + tokens.append('0') + + if prefix is None: + try: + prefix = classful_prefix(tokens[0]) + except ValueError: + return abbrev_cidr + + return "%s/%s" % ('.'.join(tokens), prefix) + except (TypeError, IndexError): + # Not a recognisable format. + return abbrev_cidr + + + +def cidr_merge(ip_addrs): + """ + A function that accepts an iterable sequence of IP addresses and subnets + merging them into the smallest possible list of CIDRs. It merges adjacent + subnets where possible, those contained within others and also removes + any duplicates. + + :param ip_addrs: an iterable sequence of IP addresses, subnets or ranges. + + :return: a summarized list of `IPNetwork` objects. + """ + # The algorithm is quite simple: For each CIDR we create an IP range. + # Sort them and merge when possible. Afterwars split them again + # optimally. + if not hasattr(ip_addrs, '__iter__'): + raise ValueError('A sequence or iterator is expected!') + + ranges = [] + + for ip in ip_addrs: + if isinstance(ip, (IPNetwork, IPRange)): + net = ip + else: + net = IPNetwork(ip) + # Since non-overlapping ranges are the common case, remember the original + ranges.append( (net.version, net.last, net.first, net) ) + + ranges.sort() + i = len(ranges) - 1 + while i > 0: + if ranges[i][0] == ranges[i - 1][0] and ranges[i][2] - 1 <= ranges[i - 1][1]: + ranges[i - 1] = (ranges[i][0], ranges[i][1], min(ranges[i - 1][2], ranges[i][2])) + del ranges[i] + i -= 1 + merged = [] + for range_tuple in ranges: + # If this range wasn't merged we can simply use the old cidr. + if len(range_tuple) == 4: + original = range_tuple[3] + if isinstance(original, IPRange): + merged.extend(original.cidrs()) + else: + merged.append(original) + else: + version = range_tuple[0] + range_start = IPAddress(range_tuple[2], version=version) + range_stop = IPAddress(range_tuple[1], version=version) + merged.extend(iprange_to_cidrs(range_start, range_stop)) + return merged + + +def cidr_exclude(target, exclude): + """ + Removes an exclude IP address or subnet from target IP subnet. + + :param target: the target IP address or subnet to be divided up. + + :param exclude: the IP address or subnet to be removed from target. + + :return: list of `IPNetwork` objects remaining after exclusion. + """ + left, _, right = cidr_partition(target, exclude) + + return left + right + +def cidr_partition(target, exclude): + """ + Partitions a target IP subnet on an exclude IP address. + + :param target: the target IP address or subnet to be divided up. + + :param exclude: the IP address or subnet to partition on + + :return: list of `IPNetwork` objects before, the partition and after, sorted. + + Adding the three lists returns the equivalent of the original subnet. + """ + + target = IPNetwork(target) + exclude = IPNetwork(exclude) + + if exclude.last < target.first: + # Exclude subnet's upper bound address less than target + # subnet's lower bound. + return [], [], [target.cidr] + elif target.last < exclude.first: + # Exclude subnet's lower bound address greater than target + # subnet's upper bound. + return [target.cidr], [], [] + + if target.prefixlen >= exclude.prefixlen: + # Exclude contains the target + return [], [target], [] + + left = [] + right = [] + + new_prefixlen = target.prefixlen + 1 + # Some @properties that are expensive to get and don't change below. + target_module_width = target._module.width + + target_first = target.first + version = exclude.version + i_lower = target_first + i_upper = target_first + (2 ** (target_module_width - new_prefixlen)) + + while exclude.prefixlen >= new_prefixlen: + if exclude.first >= i_upper: + left.append(IPNetwork((i_lower, new_prefixlen), version=version)) + matched = i_upper + else: + right.append(IPNetwork((i_upper, new_prefixlen), version=version)) + matched = i_lower + + new_prefixlen += 1 + + if new_prefixlen > target_module_width: + break + + i_lower = matched + i_upper = matched + (2 ** (target_module_width - new_prefixlen)) + + return left, [exclude], right[::-1] + + +def spanning_cidr(ip_addrs): + """ + Function that accepts a sequence of IP addresses and subnets returning + a single `IPNetwork` subnet that is large enough to span the lower and + upper bound IP addresses with a possible overlap on either end. + + :param ip_addrs: sequence of IP addresses and subnets. + + :return: a single spanning `IPNetwork` subnet. + """ + ip_addrs_iter = iter(ip_addrs) + try: + network_a = IPNetwork(_iter_next(ip_addrs_iter)) + network_b = IPNetwork(_iter_next(ip_addrs_iter)) + except StopIteration: + raise ValueError('IP sequence must contain at least 2 elements!') + + if network_a < network_b: + min_network = network_a + max_network = network_b + else: + min_network = network_b + max_network = network_a + + for ip in ip_addrs_iter: + network = IPNetwork(ip) + if network < min_network: + min_network = network + if network > max_network: + max_network = network + + if min_network.version != max_network.version: + raise TypeError('IP sequence cannot contain both IPv4 and IPv6!') + + ipnum = max_network.last + prefixlen = max_network.prefixlen + lowest_ipnum = min_network.first + width = max_network._module.width + + while prefixlen > 0 and ipnum > lowest_ipnum: + prefixlen -= 1 + ipnum &= -(1<<(width-prefixlen)) + + return IPNetwork( (ipnum, prefixlen), version=min_network.version ) + + +def iter_iprange(start, end, step=1): + """ + A generator that produces IPAddress objects between an arbitrary start + and stop IP address with intervals of step between them. Sequences + produce are inclusive of boundary IPs. + + :param start: start IP address. + + :param end: end IP address. + + :param step: (optional) size of step between IP addresses. Default: 1 + + :return: an iterator of one or more `IPAddress` objects. + """ + start = IPAddress(start) + end = IPAddress(end) + + if start.version != end.version: + raise TypeError('start and stop IP versions do not match!') + version = start.version + + step = int(step) + if step == 0: + raise ValueError('step argument cannot be zero') + + # We don't need objects from here, just integers. + start = int(start) + stop = int(end) + + negative_step = False + + if step < 0: + negative_step = True + + index = start - step + while True: + index += step + if negative_step: + if not index >= stop: + break + else: + if not index <= stop: + break + yield IPAddress(index, version) + + + +def iprange_to_cidrs(start, end): + """ + A function that accepts an arbitrary start and end IP address or subnet + and returns a list of CIDR subnets that fit exactly between the boundaries + of the two with no overlap. + + :param start: the start IP address or subnet. + + :param end: the end IP address or subnet. + + :return: a list of one or more IP addresses and subnets. + """ + cidr_list = [] + + start = IPNetwork(start) + end = IPNetwork(end) + + iprange = [start.first, end.last] + + # Get spanning CIDR covering both addresses. + cidr_span = spanning_cidr([start, end]) + width = start._module.width + + if cidr_span.first < iprange[0]: + exclude = IPNetwork((iprange[0]-1, width), version=start.version) + cidr_list = cidr_partition(cidr_span, exclude)[2] + cidr_span = cidr_list.pop() + if cidr_span.last > iprange[1]: + exclude = IPNetwork((iprange[1]+1, width), version=start.version) + cidr_list += cidr_partition(cidr_span, exclude)[0] + else: + cidr_list.append(cidr_span) + + return cidr_list + + +def smallest_matching_cidr(ip, cidrs): + """ + Matches an IP address or subnet against a given sequence of IP addresses + and subnets. + + :param ip: a single IP address or subnet. + + :param cidrs: a sequence of IP addresses and/or subnets. + + :return: the smallest (most specific) matching IPAddress or IPNetwork + object from the provided sequence, None if there was no match. + """ + match = None + + if not hasattr(cidrs, '__iter__'): + raise TypeError('IP address/subnet sequence expected, not %r!' + % (cidrs,)) + + ip = IPAddress(ip) + for cidr in sorted([IPNetwork(cidr) for cidr in cidrs]): + if ip in cidr: + match = cidr + else: + if match is not None and cidr.network not in match: + break + + return match + + +def largest_matching_cidr(ip, cidrs): + """ + Matches an IP address or subnet against a given sequence of IP addresses + and subnets. + + :param ip: a single IP address or subnet. + + :param cidrs: a sequence of IP addresses and/or subnets. + + :return: the largest (least specific) matching IPAddress or IPNetwork + object from the provided sequence, None if there was no match. + """ + match = None + + if not hasattr(cidrs, '__iter__'): + raise TypeError('IP address/subnet sequence expected, not %r!' + % (cidrs,)) + + ip = IPAddress(ip) + for cidr in sorted([IPNetwork(cidr) for cidr in cidrs]): + if ip in cidr: + match = cidr + break + + return match + + +def all_matching_cidrs(ip, cidrs): + """ + Matches an IP address or subnet against a given sequence of IP addresses + and subnets. + + :param ip: a single IP address. + + :param cidrs: a sequence of IP addresses and/or subnets. + + :return: all matching IPAddress and/or IPNetwork objects from the provided + sequence, an empty list if there was no match. + """ + matches = [] + + if not hasattr(cidrs, '__iter__'): + raise TypeError('IP address/subnet sequence expected, not %r!' + % (cidrs,)) + + ip = IPAddress(ip) + for cidr in sorted([IPNetwork(cidr) for cidr in cidrs]): + if ip in cidr: + matches.append(cidr) + else: + if matches and cidr.network not in matches[-1]: + break + + return matches + +#----------------------------------------------------------------------------- +# Cached IPv4 address range lookups. +#----------------------------------------------------------------------------- +IPV4_LOOPBACK = IPNetwork('127.0.0.0/8') # Loopback addresses (RFC 990) + +IPV4_PRIVATE_USE = [ + IPNetwork('10.0.0.0/8'), # Class A private network local communication (RFC 1918) + IPNetwork('172.16.0.0/12'), # Private network - local communication (RFC 1918) + IPNetwork('192.168.0.0/16'), # Class B private network local communication (RFC 1918) +] + +IPV4_PRIVATEISH = tuple(IPV4_PRIVATE_USE) + ( + IPNetwork('100.64.0.0/10'), # Carrier grade NAT (RFC 6598) + IPNetwork('192.0.0.0/24'), # IANA IPv4 Special Purpose Address Registry (RFC 5736) + # protocol assignments + + # benchmarking + IPNetwork('198.18.0.0/15'), # Testing of inter-network communications between subnets (RFC 2544) + IPRange('239.0.0.0', '239.255.255.255'), # Administrative Multicast +) + +IPV4_LINK_LOCAL = IPNetwork('169.254.0.0/16') + +IPV4_MULTICAST = IPNetwork('224.0.0.0/4') + +IPV4_6TO4 = IPNetwork('192.88.99.0/24') # 6to4 anycast relays (RFC 3068) + +IPV4_RESERVED = ( + IPNetwork('0.0.0.0/8'), # Broadcast message (RFC 1700) + IPNetwork('192.0.2.0/24'), # TEST-NET examples and documentation (RFC 5737) + IPNetwork('240.0.0.0/4'), # Reserved for multicast assignments (RFC 5771) + IPNetwork('198.51.100.0/24'), # TEST-NET-2 examples and documentation (RFC 5737) + IPNetwork('203.0.113.0/24'), # TEST-NET-3 examples and documentation (RFC 5737) + + # Reserved multicast + IPNetwork('233.252.0.0/24'), # Multicast test network + IPRange('234.0.0.0', '238.255.255.255'), + IPRange('225.0.0.0', '231.255.255.255'), +) + (IPV4_LOOPBACK, IPV4_6TO4) + +IPV4_NOT_GLOBALLY_REACHABLE = [ + IPNetwork(net) for net in [ + '0.0.0.0/8', + '10.0.0.0/8', + '100.64.0.0/10', + '127.0.0.0/8', + '169.254.0.0/16', + '172.16.0.0/12', + '192.0.0.0/24', + '192.0.0.170/31', + '192.0.2.0/24', + '192.168.0.0/16', + '198.18.0.0/15', + '198.51.100.0/24', + '203.0.113.0/24', + '240.0.0.0/4', + '255.255.255.255/32', + ] +] + +IPV4_NOT_GLOBALLY_REACHABLE_EXCEPTIONS = [ + IPNetwork(net) for net in ['192.0.0.9/32', '192.0.0.10/32'] +] + +#----------------------------------------------------------------------------- +# Cached IPv6 address range lookups. +#----------------------------------------------------------------------------- +IPV6_LOOPBACK = IPNetwork('::1/128') + +IPV6_UNIQUE_LOCAL = IPNetwork('fc00::/7') + +IPV6_PRIVATEISH = ( + IPV6_UNIQUE_LOCAL, + IPNetwork('fec0::/10'), # Site Local Addresses (deprecated - RFC 3879) +) + +IPV6_LINK_LOCAL = IPNetwork('fe80::/10') + +IPV6_MULTICAST = IPNetwork('ff00::/8') + +IPV6_RESERVED = ( + IPNetwork('ff00::/12'), IPNetwork('::/8'), + IPNetwork('0100::/8'), IPNetwork('0200::/7'), + IPNetwork('0400::/6'), IPNetwork('0800::/5'), + IPNetwork('1000::/4'), IPNetwork('4000::/3'), + IPNetwork('6000::/3'), IPNetwork('8000::/3'), + IPNetwork('A000::/3'), IPNetwork('C000::/3'), + IPNetwork('E000::/4'), IPNetwork('F000::/5'), + IPNetwork('F800::/6'), IPNetwork('FE00::/9'), +) + +IPV6_NOT_GLOBALLY_REACHABLE = [ + IPNetwork(net) + for net in [ + '::1/128', + '::/128', + '::ffff:0:0/96', + '64:ff9b:1::/48', + '100::/64', + '2001::/23', + '2001:db8::/32', + '2002::/16', + 'fc00::/7', + 'fe80::/10', + ] +] + +IPV6_NOT_GLOBALLY_REACHABLE_EXCEPTIONS = [ + IPNetwork(net) + for net in [ + '2001:1::1/128', + '2001:1::2/128', + '2001:3::/32', + '2001:4:112::/48', + '2001:20::/28', + '2001:30::/28', +] ] diff --git a/netaddr/ip/glob.py b/netaddr/ip/glob.py new file mode 100644 index 0000000..ed43b1b --- /dev/null +++ b/netaddr/ip/glob.py @@ -0,0 +1,312 @@ +#----------------------------------------------------------------------------- +# Copyright (c) 2008 by David P. D. Moss. All rights reserved. +# +# Released under the BSD license. See the LICENSE file for details. +#----------------------------------------------------------------------------- +""" +Routines and classes for supporting and expressing IP address ranges using a +glob style syntax. + +""" +from netaddr.core import AddrFormatError, AddrConversionError +from netaddr.ip import IPRange, IPAddress, IPNetwork, iprange_to_cidrs +from netaddr.compat import _is_str + + +def valid_glob(ipglob): + """ + :param ipglob: An IP address range in a glob-style format. + + :return: ``True`` if IP range glob is valid, ``False`` otherwise. + """ + #TODO: Add support for abbreviated ipglobs. + #TODO: e.g. 192.0.*.* == 192.0.* + #TODO: *.*.*.* == * + #TODO: Add strict flag to enable verbose ipglob checking. + if not _is_str(ipglob): + return False + + seen_hyphen = False + seen_asterisk = False + + octets = ipglob.split('.') + + if len(octets) != 4: + return False + + for octet in octets: + if '-' in octet: + if seen_hyphen: + return False + seen_hyphen = True + if seen_asterisk: + # Asterisks cannot precede hyphenated octets. + return False + try: + (octet1, octet2) = [int(i) for i in octet.split('-')] + except ValueError: + return False + if octet1 >= octet2: + return False + if not 0 <= octet1 <= 254: + return False + if not 1 <= octet2 <= 255: + return False + elif octet == '*': + seen_asterisk = True + else: + if seen_hyphen is True: + return False + if seen_asterisk is True: + return False + try: + if not 0 <= int(octet) <= 255: + return False + except ValueError: + return False + return True + + +def glob_to_iptuple(ipglob): + """ + A function that accepts a glob-style IP range and returns the component + lower and upper bound IP address. + + :param ipglob: an IP address range in a glob-style format. + + :return: a tuple contain lower and upper bound IP objects. + """ + if not valid_glob(ipglob): + raise AddrFormatError('not a recognised IP glob range: %r!' % (ipglob,)) + + start_tokens = [] + end_tokens = [] + + for octet in ipglob.split('.'): + if '-' in octet: + tokens = octet.split('-') + start_tokens.append(tokens[0]) + end_tokens.append(tokens[1]) + elif octet == '*': + start_tokens.append('0') + end_tokens.append('255') + else: + start_tokens.append(octet) + end_tokens.append(octet) + + return IPAddress('.'.join(start_tokens)), IPAddress('.'.join(end_tokens)) + + +def glob_to_iprange(ipglob): + """ + A function that accepts a glob-style IP range and returns the equivalent + IP range. + + :param ipglob: an IP address range in a glob-style format. + + :return: an IPRange object. + """ + if not valid_glob(ipglob): + raise AddrFormatError('not a recognised IP glob range: %r!' % (ipglob,)) + + start_tokens = [] + end_tokens = [] + + for octet in ipglob.split('.'): + if '-' in octet: + tokens = octet.split('-') + start_tokens.append(tokens[0]) + end_tokens.append(tokens[1]) + elif octet == '*': + start_tokens.append('0') + end_tokens.append('255') + else: + start_tokens.append(octet) + end_tokens.append(octet) + + return IPRange('.'.join(start_tokens), '.'.join(end_tokens)) + + +def iprange_to_globs(start, end): + """ + A function that accepts an arbitrary start and end IP address or subnet + and returns one or more glob-style IP ranges. + + :param start: the start IP address or subnet. + + :param end: the end IP address or subnet. + + :return: a list containing one or more IP globs. + """ + start = IPAddress(start) + end = IPAddress(end) + + if start.version != 4 and end.version != 4: + raise AddrConversionError('IP glob ranges only support IPv4!') + + def _iprange_to_glob(lb, ub): + # Internal function to process individual IP globs. + t1 = [int(_) for _ in str(lb).split('.')] + t2 = [int(_) for _ in str(ub).split('.')] + + tokens = [] + + seen_hyphen = False + seen_asterisk = False + + for i in range(4): + if t1[i] == t2[i]: + # A normal octet. + tokens.append(str(t1[i])) + elif (t1[i] == 0) and (t2[i] == 255): + # An asterisk octet. + tokens.append('*') + seen_asterisk = True + else: + # Create a hyphenated octet - only one allowed per IP glob. + if not seen_asterisk: + if not seen_hyphen: + tokens.append('%s-%s' % (t1[i], t2[i])) + seen_hyphen = True + else: + raise AddrConversionError( + 'only 1 hyphenated octet per IP glob allowed!') + else: + raise AddrConversionError( + "asterisks are not allowed before hyphenated octets!") + + return '.'.join(tokens) + + globs = [] + + try: + # IP range can be represented by a single glob. + ipglob = _iprange_to_glob(start, end) + if not valid_glob(ipglob): + #TODO: this is a workaround, it is produces non-optimal but valid + #TODO: glob conversions. Fix inner function so that is always + #TODO: produces a valid glob. + raise AddrConversionError('invalid ip glob created') + globs.append(ipglob) + except AddrConversionError: + # Break IP range up into CIDRs before conversion to globs. + # + #TODO: this is still not completely optimised but is good enough + #TODO: for the moment. + # + for cidr in iprange_to_cidrs(start, end): + ipglob = _iprange_to_glob(cidr[0], cidr[-1]) + globs.append(ipglob) + + return globs + + +def glob_to_cidrs(ipglob): + """ + A function that accepts a glob-style IP range and returns a list of one + or more IP CIDRs that exactly matches it. + + :param ipglob: an IP address range in a glob-style format. + + :return: a list of one or more IP objects. + """ + return iprange_to_cidrs(*glob_to_iptuple(ipglob)) + + +def cidr_to_glob(cidr): + """ + A function that accepts an IP subnet in a glob-style format and returns + a list of CIDR subnets that exactly matches the specified glob. + + :param cidr: an IP object CIDR subnet. + + :return: a list of one or more IP addresses and subnets. + """ + ip = IPNetwork(cidr) + globs = iprange_to_globs(ip[0], ip[-1]) + if len(globs) != 1: + # There should only ever be a one to one mapping between a CIDR and + # an IP glob range. + raise AddrConversionError('bad CIDR to IP glob conversion!') + return globs[0] + + +class IPGlob(IPRange): + """ + Represents an IP address range using a glob-style syntax ``x.x.x-y.*`` + + Individual octets can be represented using the following shortcuts : + + 1. ``*`` - the asterisk octet (represents values ``0`` through ``255``) + 2. ``x-y`` - the hyphenated octet (represents values ``x`` through ``y``) + + A few basic rules also apply : + + 1. ``x`` must always be less than ``y``, therefore : + + - ``x`` can only be ``0`` through ``254`` + - ``y`` can only be ``1`` through ``255`` + + 2. only one hyphenated octet per IP glob is allowed + 3. only asterisks are permitted after a hyphenated octet + + Examples: + + +------------------+------------------------------+ + | IP glob | Description | + +==================+==============================+ + | ``192.0.2.1`` | a single address | + +------------------+------------------------------+ + | ``192.0.2.0-31`` | 32 addresses | + +------------------+------------------------------+ + | ``192.0.2.*`` | 256 addresses | + +------------------+------------------------------+ + | ``192.0.2-3.*`` | 512 addresses | + +------------------+------------------------------+ + | ``192.0-1.*.*`` | 131,072 addresses | + +------------------+------------------------------+ + | ``*.*.*.*`` | the whole IPv4 address space | + +------------------+------------------------------+ + + .. note :: \ + IP glob ranges are not directly equivalent to CIDR blocks. \ + They can represent address ranges that do not fall on strict bit mask \ + boundaries. They are suitable for use in configuration files, being \ + more obvious and readable than their CIDR counterparts, especially for \ + admins and end users with little or no networking knowledge or \ + experience. All CIDR addresses can always be represented as IP globs \ + but the reverse is not always true. + """ + __slots__ = ('_glob',) + + def __init__(self, ipglob): + (start, end) = glob_to_iptuple(ipglob) + super(IPGlob, self).__init__(start, end) + self.glob = iprange_to_globs(self._start, self._end)[0] + + def __getstate__(self): + """:return: Pickled state of an `IPGlob` object.""" + return super(IPGlob, self).__getstate__() + + def __setstate__(self, state): + """:param state: data used to unpickle a pickled `IPGlob` object.""" + super(IPGlob, self).__setstate__(state) + self.glob = iprange_to_globs(self._start, self._end)[0] + + def _get_glob(self): + return self._glob + + def _set_glob(self, ipglob): + (self._start, self._end) = glob_to_iptuple(ipglob) + self._glob = iprange_to_globs(self._start, self._end)[0] + + glob = property(_get_glob, _set_glob, None, + 'an arbitrary IP address range in glob format.') + + def __str__(self): + """:return: IP glob in common representational format.""" + return "%s" % self.glob + + def __repr__(self): + """:return: Python statement to create an equivalent object""" + return "%s('%s')" % (self.__class__.__name__, self.glob) diff --git a/netaddr/ip/iana.py b/netaddr/ip/iana.py new file mode 100755 index 0000000..c2c0185 --- /dev/null +++ b/netaddr/ip/iana.py @@ -0,0 +1,448 @@ +#!/usr/bin/env python +#----------------------------------------------------------------------------- +# Copyright (c) 2008 by David P. D. Moss. All rights reserved. +# +# Released under the BSD license. See the LICENSE file for details. +#----------------------------------------------------------------------------- +# +# DISCLAIMER +# +# netaddr is not sponsored nor endorsed by IANA. +# +# Use of data from IANA (Internet Assigned Numbers Authority) is subject to +# copyright and is provided with prior written permission. +# +# IANA data files included with netaddr are not modified in any way but are +# parsed and made available to end users through an API. +# +# See README file and source code for URLs to latest copies of the relevant +# files. +# +#----------------------------------------------------------------------------- +""" +Routines for accessing data published by IANA (Internet Assigned Numbers +Authority). + +More details can be found at the following URLs :- + + - IANA Home Page - http://www.iana.org/ + - IEEE Protocols Information Home Page - http://www.iana.org/protocols/ +""" + +import sys as _sys +from xml.sax import make_parser, handler + +from netaddr.core import Publisher, Subscriber +from netaddr.ip import IPAddress, IPNetwork, IPRange, cidr_abbrev_to_verbose +from netaddr.compat import _dict_items, _callable, _open_binary + + + +#: Topic based lookup dictionary for IANA information. +IANA_INFO = { + 'IPv4': {}, + 'IPv6': {}, + 'IPv6_unicast': {}, + 'multicast': {}, +} + + +class SaxRecordParser(handler.ContentHandler): + def __init__(self, callback=None): + self._level = 0 + self._is_active = False + self._record = None + self._tag_level = None + self._tag_payload = None + self._tag_feeding = None + self._callback = callback + + def startElement(self, name, attrs): + self._level += 1 + + if self._is_active is False: + if name == 'record': + self._is_active = True + self._tag_level = self._level + self._record = {} + if 'date' in attrs: + self._record['date'] = attrs['date'] + elif self._level == self._tag_level + 1: + if name == 'xref': + if 'type' in attrs and 'data' in attrs: + l = self._record.setdefault(attrs['type'], []) + l.append(attrs['data']) + else: + self._tag_payload = [] + self._tag_feeding = True + else: + self._tag_feeding = False + + def endElement(self, name): + if self._is_active is True: + if name == 'record' and self._tag_level == self._level: + self._is_active = False + self._tag_level = None + if _callable(self._callback): + self._callback(self._record) + self._record = None + elif self._level == self._tag_level + 1: + if name != 'xref': + self._record[name] = ''.join(self._tag_payload) + self._tag_payload = None + self._tag_feeding = False + + self._level -= 1 + + def characters(self, content): + if self._tag_feeding is True: + self._tag_payload.append(content) + + +class XMLRecordParser(Publisher): + """ + A configurable Parser that understands how to parse XML based records. + """ + + def __init__(self, fh, **kwargs): + """ + Constructor. + + fh - a valid, open file handle to XML based record data. + """ + super(XMLRecordParser, self).__init__() + + self.xmlparser = make_parser() + self.xmlparser.setContentHandler(SaxRecordParser(self.consume_record)) + + self.fh = fh + + self.__dict__.update(kwargs) + + def process_record(self, rec): + """ + This is the callback method invoked for every record. It is usually + over-ridden by base classes to provide specific record-based logic. + + Any record can be vetoed (not passed to registered Subscriber objects) + by simply returning None. + """ + return rec + + def consume_record(self, rec): + record = self.process_record(rec) + if record is not None: + self.notify(record) + + def parse(self): + """ + Parse and normalises records, notifying registered subscribers with + record data as it is encountered. + """ + self.xmlparser.parse(self.fh) + + +class IPv4Parser(XMLRecordParser): + """ + A XMLRecordParser that understands how to parse and retrieve data records + from the IANA IPv4 address space file. + + It can be found online here :- + + - http://www.iana.org/assignments/ipv4-address-space/ipv4-address-space.xml + """ + + def __init__(self, fh, **kwargs): + """ + Constructor. + + fh - a valid, open file handle to an IANA IPv4 address space file. + + kwargs - additional parser options. + """ + super(IPv4Parser, self).__init__(fh) + + def process_record(self, rec): + """ + Callback method invoked for every record. + + See base class method for more details. + """ + + record = {} + for key in ('prefix', 'designation', 'date', 'whois', 'status'): + record[key] = str(rec.get(key, '')).strip() + + # Strip leading zeros from octet. + if '/' in record['prefix']: + (octet, prefix) = record['prefix'].split('/') + record['prefix'] = '%d/%d' % (int(octet), int(prefix)) + + record['status'] = record['status'].capitalize() + + return record + + +class IPv6Parser(XMLRecordParser): + """ + A XMLRecordParser that understands how to parse and retrieve data records + from the IANA IPv6 address space file. + + It can be found online here :- + + - http://www.iana.org/assignments/ipv6-address-space/ipv6-address-space.xml + """ + + def __init__(self, fh, **kwargs): + """ + Constructor. + + fh - a valid, open file handle to an IANA IPv6 address space file. + + kwargs - additional parser options. + """ + super(IPv6Parser, self).__init__(fh) + + def process_record(self, rec): + """ + Callback method invoked for every record. + + See base class method for more details. + """ + + record = { + 'prefix': str(rec.get('prefix', '')).strip(), + 'allocation': str(rec.get('description', '')).strip(), + # HACK: -1 instead of 0 is a hacky hack to get 4291 instead of 3513 from + # + # <xref type="rfc" data="rfc3513"/> was later obsoleted by <xref type="rfc" data="rfc4291"/> + # + # I imagine there's no way to solve this in a general way, maybe we should start returning a list + # of RFC-s here? + 'reference': str(rec.get('rfc', [''])[-1]).strip(), + } + + return record + + +class IPv6UnicastParser(XMLRecordParser): + """ + A XMLRecordParser that understands how to parse and retrieve data records + from the IANA IPv6 unicast address assignments file. + + It can be found online here :- + + - http://www.iana.org/assignments/ipv6-unicast-address-assignments/ipv6-unicast-address-assignments.xml + """ + def __init__(self, fh, **kwargs): + """ + Constructor. + + fh - a valid, open file handle to an IANA IPv6 address space file. + + kwargs - additional parser options. + """ + super(IPv6UnicastParser, self).__init__(fh) + + def process_record(self, rec): + """ + Callback method invoked for every record. + + See base class method for more details. + """ + record = { + 'status': str(rec.get('status', '')).strip(), + 'description': str(rec.get('description', '')).strip(), + 'prefix': str(rec.get('prefix', '')).strip(), + 'date': str(rec.get('date', '')).strip(), + 'whois': str(rec.get('whois', '')).strip(), + } + + return record + + +class MulticastParser(XMLRecordParser): + """ + A XMLRecordParser that knows how to process the IANA IPv4 multicast address + allocation file. + + It can be found online here :- + + - http://www.iana.org/assignments/multicast-addresses/multicast-addresses.xml + """ + + def __init__(self, fh, **kwargs): + """ + Constructor. + + fh - a valid, open file handle to an IANA IPv4 multicast address + allocation file. + + kwargs - additional parser options. + """ + super(MulticastParser, self).__init__(fh) + + def normalise_addr(self, addr): + """ + Removes variations from address entries found in this particular file. + """ + if '-' in addr: + (a1, a2) = addr.split('-') + o1 = a1.strip().split('.') + o2 = a2.strip().split('.') + return '%s-%s' % ('.'.join([str(int(i)) for i in o1]), + '.'.join([str(int(i)) for i in o2])) + else: + o1 = addr.strip().split('.') + return '.'.join([str(int(i)) for i in o1]) + + def process_record(self, rec): + """ + Callback method invoked for every record. + + See base class method for more details. + """ + + if 'addr' in rec: + record = { + 'address': self.normalise_addr(str(rec['addr'])), + 'descr': str(rec.get('description', '')), + } + return record + + +class DictUpdater(Subscriber): + """ + Concrete Subscriber that inserts records received from a Publisher into a + dictionary. + """ + + def __init__(self, dct, topic, unique_key): + """ + Constructor. + + dct - lookup dict or dict like object to insert records into. + + topic - high-level category name of data to be processed. + + unique_key - key name in data dict that uniquely identifies it. + """ + self.dct = dct + self.topic = topic + self.unique_key = unique_key + + def update(self, data): + """ + Callback function used by Publisher to notify this Subscriber about + an update. Stores topic based information into dictionary passed to + constructor. + """ + data_id = data[self.unique_key] + + if self.topic == 'IPv4': + cidr = IPNetwork(cidr_abbrev_to_verbose(data_id)) + self.dct[cidr] = data + elif self.topic == 'IPv6': + cidr = IPNetwork(cidr_abbrev_to_verbose(data_id)) + self.dct[cidr] = data + elif self.topic == 'IPv6_unicast': + cidr = IPNetwork(data_id) + self.dct[cidr] = data + elif self.topic == 'multicast': + iprange = None + if '-' in data_id: + # See if we can manage a single CIDR. + (first, last) = data_id.split('-') + iprange = IPRange(first, last) + cidrs = iprange.cidrs() + if len(cidrs) == 1: + iprange = cidrs[0] + else: + iprange = IPAddress(data_id) + self.dct[iprange] = data + + +def load_info(): + """ + Parse and load internal IANA data lookups with the latest information from + data files. + """ + ipv4 = IPv4Parser(_open_binary(__package__, 'ipv4-address-space.xml')) + ipv4.attach(DictUpdater(IANA_INFO['IPv4'], 'IPv4', 'prefix')) + ipv4.parse() + + ipv6 = IPv6Parser(_open_binary(__package__, 'ipv6-address-space.xml')) + ipv6.attach(DictUpdater(IANA_INFO['IPv6'], 'IPv6', 'prefix')) + ipv6.parse() + + ipv6ua = IPv6UnicastParser( + _open_binary(__package__, 'ipv6-unicast-address-assignments.xml'), + ) + ipv6ua.attach(DictUpdater(IANA_INFO['IPv6_unicast'], 'IPv6_unicast', 'prefix')) + ipv6ua.parse() + + mcast = MulticastParser(_open_binary(__package__, 'multicast-addresses.xml')) + mcast.attach(DictUpdater(IANA_INFO['multicast'], 'multicast', 'address')) + mcast.parse() + + +def pprint_info(fh=None): + """ + Pretty prints IANA information to filehandle. + """ + if fh is None: + fh = _sys.stdout + + for category in sorted(IANA_INFO): + fh.write('-' * len(category) + "\n") + fh.write(category + "\n") + fh.write('-' * len(category) + "\n") + ipranges = IANA_INFO[category] + for iprange in sorted(ipranges): + details = ipranges[iprange] + fh.write('%-45r' % (iprange) + details + "\n") + + +def _within_bounds(ip, ip_range): + # Boundary checking for multiple IP classes. + if hasattr(ip_range, 'first'): + # IP network or IP range. + return ip in ip_range + elif hasattr(ip_range, 'value'): + # IP address. + return ip == ip_range + + raise Exception('Unsupported IP range or address: %r!' % (ip_range,)) + + +def query(ip_addr): + """Returns informational data specific to this IP address.""" + info = {} + + if ip_addr.version == 4: + for cidr, record in _dict_items(IANA_INFO['IPv4']): + if _within_bounds(ip_addr, cidr): + info.setdefault('IPv4', []) + info['IPv4'].append(record) + + if ip_addr.is_multicast(): + for iprange, record in _dict_items(IANA_INFO['multicast']): + if _within_bounds(ip_addr, iprange): + info.setdefault('Multicast', []) + info['Multicast'].append(record) + + elif ip_addr.version == 6: + for cidr, record in _dict_items(IANA_INFO['IPv6']): + if _within_bounds(ip_addr, cidr): + info.setdefault('IPv6', []) + info['IPv6'].append(record) + + for cidr, record in _dict_items(IANA_INFO['IPv6_unicast']): + if _within_bounds(ip_addr, cidr): + info.setdefault('IPv6_unicast', []) + info['IPv6_unicast'].append(record) + + return info + +# On module import, read IANA data files and populate lookups dict. +load_info() diff --git a/netaddr/ip/ipv4-address-space.xml b/netaddr/ip/ipv4-address-space.xml new file mode 100644 index 0000000..6918abe --- /dev/null +++ b/netaddr/ip/ipv4-address-space.xml @@ -0,0 +1,2647 @@ +<?xml version='1.0' encoding='UTF-8'?> +<?xml-stylesheet type="text/xsl" href="ipv4-address-space.xsl"?> +<?xml-model href="ipv4-address-space.rng" schematypens="http://relaxng.org/ns/structure/1.0" ?> +<registry xmlns="http://www.iana.org/assignments" id="ipv4-address-space"> + <title>IANA IPv4 Address Space Registry</title> + <category>Internet Protocol version 4 (IPv4) Address Space</category> + <updated>2023-12-18</updated> + <xref type="rfc" data="rfc7249"/> + <registration_rule>Allocations to RIRs are made in line with the Global Policy published at <xref type="uri" data="http://www.icann.org/en/resources/policy/global-addressing"/>. +All other assignments require IETF Review.</registration_rule> + <description>The allocation of Internet Protocol version 4 (IPv4) address space to various registries is listed +here. Originally, all the IPv4 address spaces was managed directly by the IANA. Later parts of the +address space were allocated to various other registries to manage for particular purposes or +regional areas of the world. RFC 1466 <xref type="rfc" data="rfc1466"/> documents most of these allocations.</description> + <record> + <prefix>000/8</prefix> + <designation>IANA - Local Identification</designation> + <date>1981-09</date> + <status>RESERVED</status> + <xref type="note" data="2"/> + <xref type="note" data="3"/> + </record> + <record> + <prefix>001/8</prefix> + <designation>APNIC</designation> + <date>2010-01</date> + <whois>whois.apnic.net</whois> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>002/8</prefix> + <designation>RIPE NCC</designation> + <date>2009-09</date> + <whois>whois.ripe.net</whois> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>003/8</prefix> + <designation>Administered by ARIN</designation> + <date>1994-05</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>004/8</prefix> + <designation>Administered by ARIN</designation> + <date>1992-12</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>005/8</prefix> + <designation>RIPE NCC</designation> + <date>2010-11</date> + <whois>whois.ripe.net</whois> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>006/8</prefix> + <designation>Army Information Systems Center</designation> + <date>1994-02</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>007/8</prefix> + <designation>Administered by ARIN</designation> + <date>1995-04</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>008/8</prefix> + <designation>Administered by ARIN</designation> + <date>1992-12</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>009/8</prefix> + <designation>Administered by ARIN</designation> + <date>1992-08</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>010/8</prefix> + <designation>IANA - Private Use</designation> + <date>1995-06</date> + <status>RESERVED</status> + <xref type="note" data="4"/> + </record> + <record> + <prefix>011/8</prefix> + <designation>DoD Intel Information Systems</designation> + <date>1993-05</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>012/8</prefix> + <designation>AT&T Bell Laboratories</designation> + <date>1995-06</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>013/8</prefix> + <designation>Administered by ARIN</designation> + <date>1991-09</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>014/8</prefix> + <designation>APNIC</designation> + <date>2010-04</date> + <whois>whois.apnic.net</whois> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <status>ALLOCATED</status> + <xref type="note" data="5"/> + </record> + <record> + <prefix>015/8</prefix> + <designation>Administered by ARIN</designation> + <date>1994-07</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>016/8</prefix> + <designation>Administered by ARIN</designation> + <date>1994-11</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>017/8</prefix> + <designation>Apple Computer Inc.</designation> + <date>1992-07</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>018/8</prefix> + <designation>Administered by ARIN</designation> + <date>1994-01</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>019/8</prefix> + <designation>Ford Motor Company</designation> + <date>1995-05</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>020/8</prefix> + <designation>Administered by ARIN</designation> + <date>1994-10</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>021/8</prefix> + <designation>DDN-RVN</designation> + <date>1991-07</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>022/8</prefix> + <designation>Defense Information Systems Agency</designation> + <date>1993-05</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>023/8</prefix> + <designation>ARIN</designation> + <date>2010-11</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>024/8</prefix> + <designation>ARIN</designation> + <date>2001-05</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record updated="2018-09-18"> + <prefix>025/8</prefix> + <designation>Administered by RIPE NCC</designation> + <date>1995-01</date> + <whois>whois.ripe.net</whois> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>026/8</prefix> + <designation>Defense Information Systems Agency</designation> + <date>1995-05</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>027/8</prefix> + <designation>APNIC</designation> + <date>2010-01</date> + <whois>whois.apnic.net</whois> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>028/8</prefix> + <designation>DSI-North</designation> + <date>1992-07</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>029/8</prefix> + <designation>Defense Information Systems Agency</designation> + <date>1991-07</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>030/8</prefix> + <designation>Defense Information Systems Agency</designation> + <date>1991-07</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>031/8</prefix> + <designation>RIPE NCC</designation> + <date>2010-05</date> + <whois>whois.ripe.net</whois> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record updated="2015-05-01"> + <prefix>032/8</prefix> + <designation>Administered by ARIN</designation> + <date>1994-06</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>033/8</prefix> + <designation>DLA Systems Automation Center</designation> + <date>1991-01</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>034/8</prefix> + <designation>Administered by ARIN</designation> + <date>1993-03</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>035/8</prefix> + <designation>Administered by ARIN</designation> + <date>1994-04</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>036/8</prefix> + <designation>APNIC</designation> + <date>2010-10</date> + <whois>whois.apnic.net</whois> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>037/8</prefix> + <designation>RIPE NCC</designation> + <date>2010-11</date> + <whois>whois.ripe.net</whois> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>038/8</prefix> + <designation>PSINet, Inc.</designation> + <date>1994-09</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>039/8</prefix> + <designation>APNIC</designation> + <date>2011-01</date> + <whois>whois.apnic.net</whois> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>040/8</prefix> + <designation>Administered by ARIN</designation> + <date>1994-06</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>041/8</prefix> + <designation>AFRINIC</designation> + <date>2005-04</date> + <whois>whois.afrinic.net</whois> + <rdap> + <server>https://rdap.afrinic.net/rdap/</server> + <server>http://rdap.afrinic.net/rdap/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>042/8</prefix> + <designation>APNIC</designation> + <date>2010-10</date> + <whois>whois.apnic.net</whois> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>043/8</prefix> + <designation>Administered by APNIC</designation> + <date>1991-01</date> + <whois>whois.apnic.net</whois> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>044/8</prefix> + <designation>Administered by ARIN</designation> + <date>1992-07</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>045/8</prefix> + <designation>Administered by ARIN</designation> + <date>1995-01</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>046/8</prefix> + <designation>RIPE NCC</designation> + <date>2009-09</date> + <whois>whois.ripe.net</whois> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>047/8</prefix> + <designation>Administered by ARIN</designation> + <date>1991-01</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record updated="2023-12-18"> + <prefix>048/8</prefix> + <designation>Administered by ARIN</designation> + <date>1995-05</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>049/8</prefix> + <designation>APNIC</designation> + <date>2010-08</date> + <whois>whois.apnic.net</whois> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>050/8</prefix> + <designation>ARIN</designation> + <date>2010-02</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record updated="2015-05-11"> + <prefix>051/8</prefix> + <designation>Administered by RIPE NCC</designation> + <date>1994-08</date> + <whois>whois.ripe.net</whois> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <status>LEGACY</status> + </record> + <record updated="2015-05-01"> + <prefix>052/8</prefix> + <designation>Administered by ARIN</designation> + <date>1991-12</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record updated="2014-10-14"> + <prefix>053/8</prefix> + <designation>Daimler AG</designation> + <date>1993-10</date> + <whois>whois.ripe.net</whois> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>054/8</prefix> + <designation>Administered by ARIN</designation> + <date>1992-03</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>055/8</prefix> + <designation>DoD Network Information Center</designation> + <date>1995-04</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>056/8</prefix> + <designation>Administered by ARIN</designation> + <date>1994-06</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record updated="2019-12-27"> + <prefix>057/8</prefix> + <designation>Administered by RIPE NCC</designation> + <date>1995-05</date> + <whois>whois.ripe.net</whois> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>058/8</prefix> + <designation>APNIC</designation> + <date>2004-04</date> + <whois>whois.apnic.net</whois> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>059/8</prefix> + <designation>APNIC</designation> + <date>2004-04</date> + <whois>whois.apnic.net</whois> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>060/8</prefix> + <designation>APNIC</designation> + <date>2003-04</date> + <whois>whois.apnic.net</whois> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>061/8</prefix> + <designation>APNIC</designation> + <date>1997-04</date> + <whois>whois.apnic.net</whois> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>062/8</prefix> + <designation>RIPE NCC</designation> + <date>1997-04</date> + <whois>whois.ripe.net</whois> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>063/8</prefix> + <designation>ARIN</designation> + <date>1997-04</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>064/8</prefix> + <designation>ARIN</designation> + <date>1999-07</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>065/8</prefix> + <designation>ARIN</designation> + <date>2000-07</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>066/8</prefix> + <designation>ARIN</designation> + <date>2000-07</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>067/8</prefix> + <designation>ARIN</designation> + <date>2001-05</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>068/8</prefix> + <designation>ARIN</designation> + <date>2001-06</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>069/8</prefix> + <designation>ARIN</designation> + <date>2002-08</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>070/8</prefix> + <designation>ARIN</designation> + <date>2004-01</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>071/8</prefix> + <designation>ARIN</designation> + <date>2004-08</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>072/8</prefix> + <designation>ARIN</designation> + <date>2004-08</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>073/8</prefix> + <designation>ARIN</designation> + <date>2005-03</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>074/8</prefix> + <designation>ARIN</designation> + <date>2005-06</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>075/8</prefix> + <designation>ARIN</designation> + <date>2005-06</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>076/8</prefix> + <designation>ARIN</designation> + <date>2005-06</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>077/8</prefix> + <designation>RIPE NCC</designation> + <date>2006-08</date> + <whois>whois.ripe.net</whois> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>078/8</prefix> + <designation>RIPE NCC</designation> + <date>2006-08</date> + <whois>whois.ripe.net</whois> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>079/8</prefix> + <designation>RIPE NCC</designation> + <date>2006-08</date> + <whois>whois.ripe.net</whois> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>080/8</prefix> + <designation>RIPE NCC</designation> + <date>2001-04</date> + <whois>whois.ripe.net</whois> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>081/8</prefix> + <designation>RIPE NCC</designation> + <date>2001-04</date> + <whois>whois.ripe.net</whois> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>082/8</prefix> + <designation>RIPE NCC</designation> + <date>2002-11</date> + <whois>whois.ripe.net</whois> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>083/8</prefix> + <designation>RIPE NCC</designation> + <date>2003-11</date> + <whois>whois.ripe.net</whois> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>084/8</prefix> + <designation>RIPE NCC</designation> + <date>2003-11</date> + <whois>whois.ripe.net</whois> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>085/8</prefix> + <designation>RIPE NCC</designation> + <date>2004-04</date> + <whois>whois.ripe.net</whois> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>086/8</prefix> + <designation>RIPE NCC</designation> + <date>2004-04</date> + <whois>whois.ripe.net</whois> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>087/8</prefix> + <designation>RIPE NCC</designation> + <date>2004-04</date> + <whois>whois.ripe.net</whois> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>088/8</prefix> + <designation>RIPE NCC</designation> + <date>2004-04</date> + <whois>whois.ripe.net</whois> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>089/8</prefix> + <designation>RIPE NCC</designation> + <date>2005-06</date> + <whois>whois.ripe.net</whois> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>090/8</prefix> + <designation>RIPE NCC</designation> + <date>2005-06</date> + <whois>whois.ripe.net</whois> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>091/8</prefix> + <designation>RIPE NCC</designation> + <date>2005-06</date> + <whois>whois.ripe.net</whois> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>092/8</prefix> + <designation>RIPE NCC</designation> + <date>2007-03</date> + <whois>whois.ripe.net</whois> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>093/8</prefix> + <designation>RIPE NCC</designation> + <date>2007-03</date> + <whois>whois.ripe.net</whois> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>094/8</prefix> + <designation>RIPE NCC</designation> + <date>2007-07</date> + <whois>whois.ripe.net</whois> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>095/8</prefix> + <designation>RIPE NCC</designation> + <date>2007-07</date> + <whois>whois.ripe.net</whois> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>096/8</prefix> + <designation>ARIN</designation> + <date>2006-10</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>097/8</prefix> + <designation>ARIN</designation> + <date>2006-10</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>098/8</prefix> + <designation>ARIN</designation> + <date>2006-10</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>099/8</prefix> + <designation>ARIN</designation> + <date>2006-10</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>100/8</prefix> + <designation>ARIN</designation> + <date>2010-11</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>ALLOCATED</status> + <xref type="note" data="6"/> + </record> + <record> + <prefix>101/8</prefix> + <designation>APNIC</designation> + <date>2010-08</date> + <whois>whois.apnic.net</whois> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>102/8</prefix> + <designation>AFRINIC</designation> + <date>2011-02</date> + <whois>whois.afrinic.net</whois> + <rdap> + <server>https://rdap.afrinic.net/rdap/</server> + <server>http://rdap.afrinic.net/rdap/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>103/8</prefix> + <designation>APNIC</designation> + <date>2011-02</date> + <whois>whois.apnic.net</whois> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>104/8</prefix> + <designation>ARIN</designation> + <date>2011-02</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>105/8</prefix> + <designation>AFRINIC</designation> + <date>2010-11</date> + <whois>whois.afrinic.net</whois> + <rdap> + <server>https://rdap.afrinic.net/rdap/</server> + <server>http://rdap.afrinic.net/rdap/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>106/8</prefix> + <designation>APNIC</designation> + <date>2011-01</date> + <whois>whois.apnic.net</whois> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>107/8</prefix> + <designation>ARIN</designation> + <date>2010-02</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>108/8</prefix> + <designation>ARIN</designation> + <date>2008-12</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>109/8</prefix> + <designation>RIPE NCC</designation> + <date>2009-01</date> + <whois>whois.ripe.net</whois> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>110/8</prefix> + <designation>APNIC</designation> + <date>2008-11</date> + <whois>whois.apnic.net</whois> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>111/8</prefix> + <designation>APNIC</designation> + <date>2008-11</date> + <whois>whois.apnic.net</whois> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>112/8</prefix> + <designation>APNIC</designation> + <date>2008-05</date> + <whois>whois.apnic.net</whois> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>113/8</prefix> + <designation>APNIC</designation> + <date>2008-05</date> + <whois>whois.apnic.net</whois> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>114/8</prefix> + <designation>APNIC</designation> + <date>2007-10</date> + <whois>whois.apnic.net</whois> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>115/8</prefix> + <designation>APNIC</designation> + <date>2007-10</date> + <whois>whois.apnic.net</whois> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>116/8</prefix> + <designation>APNIC</designation> + <date>2007-01</date> + <whois>whois.apnic.net</whois> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>117/8</prefix> + <designation>APNIC</designation> + <date>2007-01</date> + <whois>whois.apnic.net</whois> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>118/8</prefix> + <designation>APNIC</designation> + <date>2007-01</date> + <whois>whois.apnic.net</whois> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>119/8</prefix> + <designation>APNIC</designation> + <date>2007-01</date> + <whois>whois.apnic.net</whois> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>120/8</prefix> + <designation>APNIC</designation> + <date>2007-01</date> + <whois>whois.apnic.net</whois> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>121/8</prefix> + <designation>APNIC</designation> + <date>2006-01</date> + <whois>whois.apnic.net</whois> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>122/8</prefix> + <designation>APNIC</designation> + <date>2006-01</date> + <whois>whois.apnic.net</whois> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>123/8</prefix> + <designation>APNIC</designation> + <date>2006-01</date> + <whois>whois.apnic.net</whois> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>124/8</prefix> + <designation>APNIC</designation> + <date>2005-01</date> + <whois>whois.apnic.net</whois> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>125/8</prefix> + <designation>APNIC</designation> + <date>2005-01</date> + <whois>whois.apnic.net</whois> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>126/8</prefix> + <designation>APNIC</designation> + <date>2005-01</date> + <whois>whois.apnic.net</whois> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>127/8</prefix> + <designation>IANA - Loopback</designation> + <date>1981-09</date> + <status>RESERVED</status> + <xref type="note" data="7"/> + </record> + <record> + <prefix>128/8</prefix> + <designation>Administered by ARIN</designation> + <date>1993-05</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>129/8</prefix> + <designation>Administered by ARIN</designation> + <date>1993-05</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>130/8</prefix> + <designation>Administered by ARIN</designation> + <date>1993-05</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>131/8</prefix> + <designation>Administered by ARIN</designation> + <date>1993-05</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>132/8</prefix> + <designation>Administered by ARIN</designation> + <date>1993-05</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>133/8</prefix> + <designation>Administered by APNIC</designation> + <date>1997-03</date> + <whois>whois.apnic.net</whois> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>134/8</prefix> + <designation>Administered by ARIN</designation> + <date>1993-05</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>135/8</prefix> + <designation>Administered by ARIN</designation> + <date>1993-05</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>136/8</prefix> + <designation>Administered by ARIN</designation> + <date>1993-05</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>137/8</prefix> + <designation>Administered by ARIN</designation> + <date>1993-05</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>138/8</prefix> + <designation>Administered by ARIN</designation> + <date>1993-05</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>139/8</prefix> + <designation>Administered by ARIN</designation> + <date>1993-05</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>140/8</prefix> + <designation>Administered by ARIN</designation> + <date>1993-05</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>141/8</prefix> + <designation>Administered by RIPE NCC</designation> + <date>1993-05</date> + <whois>whois.ripe.net</whois> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>142/8</prefix> + <designation>Administered by ARIN</designation> + <date>1993-05</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>143/8</prefix> + <designation>Administered by ARIN</designation> + <date>1993-05</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>144/8</prefix> + <designation>Administered by ARIN</designation> + <date>1993-05</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>145/8</prefix> + <designation>Administered by RIPE NCC</designation> + <date>1993-05</date> + <whois>whois.ripe.net</whois> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>146/8</prefix> + <designation>Administered by ARIN</designation> + <date>1993-05</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>147/8</prefix> + <designation>Administered by ARIN</designation> + <date>1993-05</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>148/8</prefix> + <designation>Administered by ARIN</designation> + <date>1993-05</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>149/8</prefix> + <designation>Administered by ARIN</designation> + <date>1993-05</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>150/8</prefix> + <designation>Administered by APNIC</designation> + <date>1993-05</date> + <whois>whois.apnic.net</whois> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>151/8</prefix> + <designation>Administered by RIPE NCC</designation> + <date>1993-05</date> + <whois>whois.ripe.net</whois> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>152/8</prefix> + <designation>Administered by ARIN</designation> + <date>1993-05</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>153/8</prefix> + <designation>Administered by APNIC</designation> + <date>1993-05</date> + <whois>whois.apnic.net</whois> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>154/8</prefix> + <designation>Administered by AFRINIC</designation> + <date>1993-05</date> + <whois>whois.afrinic.net</whois> + <rdap> + <server>https://rdap.afrinic.net/rdap/</server> + <server>http://rdap.afrinic.net/rdap/</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>155/8</prefix> + <designation>Administered by ARIN</designation> + <date>1993-05</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>156/8</prefix> + <designation>Administered by ARIN</designation> + <date>1993-05</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>157/8</prefix> + <designation>Administered by ARIN</designation> + <date>1993-05</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>158/8</prefix> + <designation>Administered by ARIN</designation> + <date>1993-05</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>159/8</prefix> + <designation>Administered by ARIN</designation> + <date>1993-05</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>160/8</prefix> + <designation>Administered by ARIN</designation> + <date>1993-05</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>161/8</prefix> + <designation>Administered by ARIN</designation> + <date>1993-05</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>162/8</prefix> + <designation>Administered by ARIN</designation> + <date>1993-05</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>163/8</prefix> + <designation>Administered by APNIC</designation> + <date>1993-05</date> + <whois>whois.apnic.net</whois> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>164/8</prefix> + <designation>Administered by ARIN</designation> + <date>1993-05</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>165/8</prefix> + <designation>Administered by ARIN</designation> + <date>1993-05</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>166/8</prefix> + <designation>Administered by ARIN</designation> + <date>1993-05</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>167/8</prefix> + <designation>Administered by ARIN</designation> + <date>1993-05</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>168/8</prefix> + <designation>Administered by ARIN</designation> + <date>1993-05</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>169/8</prefix> + <designation>Administered by ARIN</designation> + <date>1993-05</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + <xref type="note" data="8"/> + </record> + <record> + <prefix>170/8</prefix> + <designation>Administered by ARIN</designation> + <date>1993-05</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>171/8</prefix> + <designation>Administered by APNIC</designation> + <date>1993-05</date> + <whois>whois.apnic.net</whois> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>172/8</prefix> + <designation>Administered by ARIN</designation> + <date>1993-05</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + <xref type="note" data="9"/> + </record> + <record> + <prefix>173/8</prefix> + <designation>ARIN</designation> + <date>2008-02</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>174/8</prefix> + <designation>ARIN</designation> + <date>2008-02</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>175/8</prefix> + <designation>APNIC</designation> + <date>2009-08</date> + <whois>whois.apnic.net</whois> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>176/8</prefix> + <designation>RIPE NCC</designation> + <date>2010-05</date> + <whois>whois.ripe.net</whois> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>177/8</prefix> + <designation>LACNIC</designation> + <date>2010-06</date> + <whois>whois.lacnic.net</whois> + <rdap> + <server>https://rdap.lacnic.net/rdap/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>178/8</prefix> + <designation>RIPE NCC</designation> + <date>2009-01</date> + <whois>whois.ripe.net</whois> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>179/8</prefix> + <designation>LACNIC</designation> + <date>2011-02</date> + <whois>whois.lacnic.net</whois> + <rdap> + <server>https://rdap.lacnic.net/rdap/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>180/8</prefix> + <designation>APNIC</designation> + <date>2009-04</date> + <whois>whois.apnic.net</whois> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>181/8</prefix> + <designation>LACNIC</designation> + <date>2010-06</date> + <whois>whois.lacnic.net</whois> + <rdap> + <server>https://rdap.lacnic.net/rdap/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>182/8</prefix> + <designation>APNIC</designation> + <date>2009-08</date> + <whois>whois.apnic.net</whois> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>183/8</prefix> + <designation>APNIC</designation> + <date>2009-04</date> + <whois>whois.apnic.net</whois> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>184/8</prefix> + <designation>ARIN</designation> + <date>2008-12</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>185/8</prefix> + <designation>RIPE NCC</designation> + <date>2011-02</date> + <whois>whois.ripe.net</whois> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>186/8</prefix> + <designation>LACNIC</designation> + <date>2007-09</date> + <whois>whois.lacnic.net</whois> + <rdap> + <server>https://rdap.lacnic.net/rdap/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>187/8</prefix> + <designation>LACNIC</designation> + <date>2007-09</date> + <whois>whois.lacnic.net</whois> + <rdap> + <server>https://rdap.lacnic.net/rdap/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>188/8</prefix> + <designation>Administered by RIPE NCC</designation> + <date>1993-05</date> + <whois>whois.ripe.net</whois> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>189/8</prefix> + <designation>LACNIC</designation> + <date>1995-06</date> + <whois>whois.lacnic.net</whois> + <rdap> + <server>https://rdap.lacnic.net/rdap/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>190/8</prefix> + <designation>LACNIC</designation> + <date>1995-06</date> + <whois>whois.lacnic.net</whois> + <rdap> + <server>https://rdap.lacnic.net/rdap/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>191/8</prefix> + <designation>Administered by LACNIC</designation> + <date>1993-05</date> + <whois>whois.lacnic.net</whois> + <rdap> + <server>https://rdap.lacnic.net/rdap/</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>192/8</prefix> + <designation>Administered by ARIN</designation> + <date>1993-05</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + <xref type="note" data="10"/> + <xref type="note" data="11"/> + </record> + <record> + <prefix>193/8</prefix> + <designation>RIPE NCC</designation> + <date>1993-05</date> + <whois>whois.ripe.net</whois> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>194/8</prefix> + <designation>RIPE NCC</designation> + <date>1993-05</date> + <whois>whois.ripe.net</whois> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>195/8</prefix> + <designation>RIPE NCC</designation> + <date>1993-05</date> + <whois>whois.ripe.net</whois> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>196/8</prefix> + <designation>Administered by AFRINIC</designation> + <date>1993-05</date> + <whois>whois.afrinic.net</whois> + <rdap> + <server>https://rdap.afrinic.net/rdap/</server> + <server>http://rdap.afrinic.net/rdap/</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>197/8</prefix> + <designation>AFRINIC</designation> + <date>2008-10</date> + <whois>whois.afrinic.net</whois> + <rdap> + <server>https://rdap.afrinic.net/rdap/</server> + <server>http://rdap.afrinic.net/rdap/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>198/8</prefix> + <designation>Administered by ARIN</designation> + <date>1993-05</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + <xref type="note" data="12"/> + </record> + <record> + <prefix>199/8</prefix> + <designation>ARIN</designation> + <date>1993-05</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>200/8</prefix> + <designation>LACNIC</designation> + <date>2002-11</date> + <whois>whois.lacnic.net</whois> + <rdap> + <server>https://rdap.lacnic.net/rdap/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>201/8</prefix> + <designation>LACNIC</designation> + <date>2003-04</date> + <whois>whois.lacnic.net</whois> + <rdap> + <server>https://rdap.lacnic.net/rdap/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>202/8</prefix> + <designation>APNIC</designation> + <date>1993-05</date> + <whois>whois.apnic.net</whois> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>203/8</prefix> + <designation>APNIC</designation> + <date>1993-05</date> + <whois>whois.apnic.net</whois> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <status>ALLOCATED</status> + <xref type="note" data="13"/> + </record> + <record> + <prefix>204/8</prefix> + <designation>ARIN</designation> + <date>1994-03</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>205/8</prefix> + <designation>ARIN</designation> + <date>1994-03</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>206/8</prefix> + <designation>ARIN</designation> + <date>1995-04</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>207/8</prefix> + <designation>ARIN</designation> + <date>1995-11</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>208/8</prefix> + <designation>ARIN</designation> + <date>1996-04</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>209/8</prefix> + <designation>ARIN</designation> + <date>1996-06</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>210/8</prefix> + <designation>APNIC</designation> + <date>1996-06</date> + <whois>whois.apnic.net</whois> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>211/8</prefix> + <designation>APNIC</designation> + <date>1996-06</date> + <whois>whois.apnic.net</whois> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>212/8</prefix> + <designation>RIPE NCC</designation> + <date>1997-10</date> + <whois>whois.ripe.net</whois> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>213/8</prefix> + <designation>RIPE NCC</designation> + <date>1993-10</date> + <whois>whois.ripe.net</whois> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>214/8</prefix> + <designation>US-DOD</designation> + <date>1998-03</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>215/8</prefix> + <designation>US-DOD</designation> + <date>1998-03</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>LEGACY</status> + </record> + <record> + <prefix>216/8</prefix> + <designation>ARIN</designation> + <date>1998-04</date> + <whois>whois.arin.net</whois> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>217/8</prefix> + <designation>RIPE NCC</designation> + <date>2000-06</date> + <whois>whois.ripe.net</whois> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>218/8</prefix> + <designation>APNIC</designation> + <date>2000-12</date> + <whois>whois.apnic.net</whois> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>219/8</prefix> + <designation>APNIC</designation> + <date>2001-09</date> + <whois>whois.apnic.net</whois> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>220/8</prefix> + <designation>APNIC</designation> + <date>2001-12</date> + <whois>whois.apnic.net</whois> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>221/8</prefix> + <designation>APNIC</designation> + <date>2002-07</date> + <whois>whois.apnic.net</whois> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>222/8</prefix> + <designation>APNIC</designation> + <date>2003-02</date> + <whois>whois.apnic.net</whois> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>223/8</prefix> + <designation>APNIC</designation> + <date>2010-04</date> + <whois>whois.apnic.net</whois> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <status>ALLOCATED</status> + </record> + <record> + <prefix>224/8</prefix> + <designation>Multicast</designation> + <date>1981-09</date> + <status>RESERVED</status> + <xref type="note" data="14"/> + </record> + <record> + <prefix>225/8</prefix> + <designation>Multicast</designation> + <date>1981-09</date> + <status>RESERVED</status> + <xref type="note" data="14"/> + </record> + <record> + <prefix>226/8</prefix> + <designation>Multicast</designation> + <date>1981-09</date> + <status>RESERVED</status> + <xref type="note" data="14"/> + </record> + <record> + <prefix>227/8</prefix> + <designation>Multicast</designation> + <date>1981-09</date> + <status>RESERVED</status> + <xref type="note" data="14"/> + </record> + <record> + <prefix>228/8</prefix> + <designation>Multicast</designation> + <date>1981-09</date> + <status>RESERVED</status> + <xref type="note" data="14"/> + </record> + <record> + <prefix>229/8</prefix> + <designation>Multicast</designation> + <date>1981-09</date> + <status>RESERVED</status> + <xref type="note" data="14"/> + </record> + <record> + <prefix>230/8</prefix> + <designation>Multicast</designation> + <date>1981-09</date> + <status>RESERVED</status> + <xref type="note" data="14"/> + </record> + <record> + <prefix>231/8</prefix> + <designation>Multicast</designation> + <date>1981-09</date> + <status>RESERVED</status> + <xref type="note" data="14"/> + </record> + <record> + <prefix>232/8</prefix> + <designation>Multicast</designation> + <date>1981-09</date> + <status>RESERVED</status> + <xref type="note" data="14"/> + </record> + <record> + <prefix>233/8</prefix> + <designation>Multicast</designation> + <date>1981-09</date> + <status>RESERVED</status> + <xref type="note" data="14"/> + </record> + <record> + <prefix>234/8</prefix> + <designation>Multicast</designation> + <date>1981-09</date> + <status>RESERVED</status> + <xref type="note" data="14"/> + <xref type="note" data="15"/> + </record> + <record> + <prefix>235/8</prefix> + <designation>Multicast</designation> + <date>1981-09</date> + <status>RESERVED</status> + <xref type="note" data="14"/> + </record> + <record> + <prefix>236/8</prefix> + <designation>Multicast</designation> + <date>1981-09</date> + <status>RESERVED</status> + <xref type="note" data="14"/> + </record> + <record> + <prefix>237/8</prefix> + <designation>Multicast</designation> + <date>1981-09</date> + <status>RESERVED</status> + <xref type="note" data="14"/> + </record> + <record> + <prefix>238/8</prefix> + <designation>Multicast</designation> + <date>1981-09</date> + <status>RESERVED</status> + <xref type="note" data="14"/> + </record> + <record> + <prefix>239/8</prefix> + <designation>Multicast</designation> + <date>1981-09</date> + <status>RESERVED</status> + <xref type="note" data="14"/> + <xref type="note" data="16"/> + </record> + <record> + <prefix>240/8</prefix> + <designation>Future use</designation> + <date>1981-09</date> + <status>RESERVED</status> + <xref type="note" data="17"/> + </record> + <record> + <prefix>241/8</prefix> + <designation>Future use</designation> + <date>1981-09</date> + <status>RESERVED</status> + <xref type="note" data="17"/> + </record> + <record> + <prefix>242/8</prefix> + <designation>Future use</designation> + <date>1981-09</date> + <status>RESERVED</status> + <xref type="note" data="17"/> + </record> + <record> + <prefix>243/8</prefix> + <designation>Future use</designation> + <date>1981-09</date> + <status>RESERVED</status> + <xref type="note" data="17"/> + </record> + <record> + <prefix>244/8</prefix> + <designation>Future use</designation> + <date>1981-09</date> + <status>RESERVED</status> + <xref type="note" data="17"/> + </record> + <record> + <prefix>245/8</prefix> + <designation>Future use</designation> + <date>1981-09</date> + <status>RESERVED</status> + <xref type="note" data="17"/> + </record> + <record> + <prefix>246/8</prefix> + <designation>Future use</designation> + <date>1981-09</date> + <status>RESERVED</status> + <xref type="note" data="17"/> + </record> + <record> + <prefix>247/8</prefix> + <designation>Future use</designation> + <date>1981-09</date> + <status>RESERVED</status> + <xref type="note" data="17"/> + </record> + <record> + <prefix>248/8</prefix> + <designation>Future use</designation> + <date>1981-09</date> + <status>RESERVED</status> + <xref type="note" data="17"/> + </record> + <record> + <prefix>249/8</prefix> + <designation>Future use</designation> + <date>1981-09</date> + <status>RESERVED</status> + <xref type="note" data="17"/> + </record> + <record> + <prefix>250/8</prefix> + <designation>Future use</designation> + <date>1981-09</date> + <status>RESERVED</status> + <xref type="note" data="17"/> + </record> + <record> + <prefix>251/8</prefix> + <designation>Future use</designation> + <date>1981-09</date> + <status>RESERVED</status> + <xref type="note" data="17"/> + </record> + <record> + <prefix>252/8</prefix> + <designation>Future use</designation> + <date>1981-09</date> + <status>RESERVED</status> + <xref type="note" data="17"/> + </record> + <record> + <prefix>253/8</prefix> + <designation>Future use</designation> + <date>1981-09</date> + <status>RESERVED</status> + <xref type="note" data="17"/> + </record> + <record> + <prefix>254/8</prefix> + <designation>Future use</designation> + <date>1981-09</date> + <status>RESERVED</status> + <xref type="note" data="17"/> + </record> + <record> + <prefix>255/8</prefix> + <designation>Future use</designation> + <date>1981-09</date> + <status>RESERVED</status> + <xref type="note" data="17"/> + <xref type="note" data="18"/> + </record> + <footnote anchor="1">Indicates the status of address blocks as follows: +RESERVED: designated by the IETF for specific non-global-unicast purposes as noted. +LEGACY: allocated by the central Internet Registry (IR) prior to the Regional Internet Registries +(RIRs). This address space is now administered by individual RIRs as noted, including maintenance +of WHOIS Directory and reverse DNS records. Assignments from these blocks are distributed globally +on a regional basis. +ALLOCATED: delegated entirely to specific RIR as indicated. +UNALLOCATED: not yet allocated or reserved.</footnote> + <footnote anchor="2">0.0.0.0/8 reserved for self-identification <xref type="rfc" data="rfc791"/>, section 3.2. +Reserved by protocol. For authoritative registration, see <xref type="registry" data="iana-ipv4-special-registry"/>.</footnote> + <footnote anchor="3">0.0.0.0/32 reserved for self-identification <xref type="rfc" data="rfc1122"/>, section 3.2.1.3. +Reserved by protocol. For authoritative registration, see <xref type="registry" data="iana-ipv4-special-registry"/>.</footnote> + <footnote anchor="4">Reserved for Private-Use Networks <xref type="rfc" data="rfc1918"/>. +Complete registration details for 10.0.0.0/8 are found in <xref type="registry" data="iana-ipv4-special-registry"/>.</footnote> + <footnote anchor="5">This was reserved for Public Data Networks <xref type="rfc" data="rfc1356"/>. See <xref type="registry" data="public-data-network-numbers"/>. +It was recovered in February 2008 and was subsequently allocated to APNIC in April 2010.</footnote> + <footnote anchor="6">100.64.0.0/10 reserved for Shared Address Space <xref type="rfc" data="rfc6598"/>. +Complete registration details for 100.64.0.0/10 are found in <xref type="registry" data="iana-ipv4-special-registry"/>.</footnote> + <footnote anchor="7">127.0.0.0/8 reserved for Loopback <xref type="rfc" data="rfc1122"/>, section 3.2.1.3. +Reserved by protocol. For authoritative registration, see <xref type="registry" data="iana-ipv4-special-registry"/>.</footnote> + <footnote anchor="8">169.254.0.0/16 reserved for Link Local <xref type="rfc" data="rfc3927"/>. +Reserved by protocol. For authoritative registration, see <xref type="registry" data="iana-ipv4-special-registry"/>.</footnote> + <footnote anchor="9">172.16.0.0/12 reserved for Private-Use Networks <xref type="rfc" data="rfc1918"/>. +Complete registration details are found in <xref type="registry" data="iana-ipv4-special-registry"/>.</footnote> + <footnote anchor="10">192.0.2.0/24 reserved for TEST-NET-1 <xref type="rfc" data="rfc5737"/>. +Complete registration details for 192.0.2.0/24 are found in <xref type="registry" data="iana-ipv4-special-registry"/>. +192.88.99.0/24 reserved for 6to4 Relay Anycast <xref type="rfc" data="rfc7526"/> +Complete registration details for 192.88.99.0/24 are found in <xref type="registry" data="iana-ipv4-special-registry"/>. +192.88.99.2/32 reserved for 6a44 Relay Anycast <xref type="rfc" data="rfc6751"/> (possibly collocated with 6to4 Relay +at 192.88.99.1/32 - see <xref type="rfc" data="rfc7526"/>) +192.168.0.0/16 reserved for Private-Use Networks <xref type="rfc" data="rfc1918"/>. +Complete registration details for 192.168.0.0/16 are found in <xref type="registry" data="iana-ipv4-special-registry"/>.</footnote> + <footnote anchor="11">192.0.0.0/24 reserved for IANA IPv4 Special Purpose Address Registry <xref type="rfc" data="rfc5736"/>. +Complete registration details for 192.0.0.0/24 are found in <xref type="registry" data="iana-ipv4-special-registry"/>.</footnote> + <footnote anchor="12">198.18.0.0/15 reserved for Network Interconnect Device Benchmark Testing <xref type="rfc" data="rfc2544"/>. +Complete registration details for 198.18.0.0/15 are found in <xref type="registry" data="iana-ipv4-special-registry"/>. +198.51.100.0/24 reserved for TEST-NET-2 <xref type="rfc" data="rfc5737"/>. +Complete registration details for 198.51.100.0/24 are found in <xref type="registry" data="iana-ipv4-special-registry"/>.</footnote> + <footnote anchor="13">203.0.113.0/24 reserved for TEST-NET-3 <xref type="rfc" data="rfc5737"/>. +Complete registration details for 203.0.113.0/24 are found in <xref type="registry" data="iana-ipv4-special-registry"/>.</footnote> + <footnote anchor="14">Multicast (formerly "Class D") <xref type="rfc" data="rfc5771"/> registered in <xref type="registry" data="multicast-addresses"/></footnote> + <footnote anchor="15">Unicast-Prefix-Based IPv4 Multicast Addresses <xref type="rfc" data="rfc6034"/></footnote> + <footnote anchor="16">Administratively Scoped IP Multicast <xref type="rfc" data="rfc2365"/></footnote> + <footnote anchor="17">Reserved for future use (formerly "Class E") <xref type="rfc" data="rfc1112"/>. +Reserved by protocol. For authoritative registration, see <xref type="registry" data="iana-ipv4-special-registry"/>.</footnote> + <footnote anchor="18">255.255.255.255 is reserved for "limited broadcast" destination address <xref type="rfc" data="rfc919"/> and <xref type="rfc" data="rfc922"/>. +Complete registration details for 255.255.255.255/32 are found in <xref type="registry" data="iana-ipv4-special-registry"/>.</footnote> + <people/> +</registry> diff --git a/netaddr/ip/ipv6-address-space.xml b/netaddr/ip/ipv6-address-space.xml new file mode 100644 index 0000000..3a0fb42 --- /dev/null +++ b/netaddr/ip/ipv6-address-space.xml @@ -0,0 +1,198 @@ +<?xml version='1.0' encoding='UTF-8'?> +<?xml-stylesheet type="text/xsl" href="ipv6-address-space.xsl"?> +<?xml-model href="ipv6-address-space.rng" schematypens="http://relaxng.org/ns/structure/1.0" ?> +<registry xmlns="http://www.iana.org/assignments" id="ipv6-address-space"> + <title>Internet Protocol Version 6 Address Space</title> + <updated>2019-09-13</updated> + <note>The IPv6 address management function was formally delegated to IANA +in December 1995 <xref type="rfc" data="rfc1881"/>. The registration procedure was confirmed +with the IETF Chair in March 2010. + +As stated in <xref type="rfc" data="rfc3513"/>, IANA should limit its allocation of +IPv6-unicast address space to the range of addresses that start with +binary value 001. The rest of the global unicast address space +(approximately 85% of the IPv6 address space) is reserved for future +definition and use, and is not to be assigned by IANA at this time. + +While <xref type="rfc" data="rfc3513"/> was obsoleted by <xref type="rfc" data="rfc4291"/>, the guidance provided to +IANA did not change regarding the allocation of IPv6 unicast +addresses. + + </note> +<registry id="ipv6-address-space-1"> + <registration_rule>IESG Approval</registration_rule> + <record> + <prefix>0000::/8</prefix> + <description>Reserved by IETF</description> + <xref type="rfc" data="rfc3513"/><xref type="rfc" data="rfc4291"/> + <notes> + <xref type="note" data="1"/> + <xref type="note" data="2"/> + <xref type="note" data="3"/> + <xref type="note" data="4"/> + <xref type="note" data="5"/> + <xref type="note" data="6"/> + </notes> + </record> + <record> + <prefix>0100::/8</prefix> + <description>Reserved by IETF</description> + <xref type="rfc" data="rfc3513"/><xref type="rfc" data="rfc4291"/> + <notes>0100::/64 reserved for Discard-Only Address Block <xref type="rfc" data="rfc6666"/>. +Complete registration details are found in <xref type="registry" data="iana-ipv6-special-registry"/>.</notes> + </record> + <record> + <prefix>0200::/7</prefix> + <description>Reserved by IETF</description> + <xref type="rfc" data="rfc4048"/> + <notes>Deprecated as of December 2004 <xref type="rfc" data="rfc4048"/>. +Formerly an OSI NSAP-mapped prefix set <xref type="rfc" data="rfc4548"/>.</notes> + </record> + <record> + <prefix>0400::/6</prefix> + <description>Reserved by IETF</description> + <xref type="rfc" data="rfc3513"/><xref type="rfc" data="rfc4291"/> + <notes/> + </record> + <record> + <prefix>0800::/5</prefix> + <description>Reserved by IETF</description> + <xref type="rfc" data="rfc3513"/><xref type="rfc" data="rfc4291"/> + <notes/> + </record> + <record> + <prefix>1000::/4</prefix> + <description>Reserved by IETF</description> + <xref type="rfc" data="rfc3513"/><xref type="rfc" data="rfc4291"/> + <notes/> + </record> + <record> + <prefix>2000::/3</prefix> + <description>Global Unicast</description> + <xref type="rfc" data="rfc3513"/><xref type="rfc" data="rfc4291"/> + <notes>The IPv6 Unicast space encompasses the entire IPv6 address range +with the exception of ff00::/8, per <xref type="rfc" data="rfc4291"/>. IANA unicast address +assignments are currently limited to the IPv6 unicast address +range of 2000::/3. IANA assignments from this block are registered +in <xref type="registry" data="ipv6-unicast-address-assignments"/>. + <xref type="note" data="7"/> + <xref type="note" data="8"/> + <xref type="note" data="9"/> + <xref type="note" data="10"/> + <xref type="note" data="11"/> + <xref type="note" data="12"/> + <xref type="note" data="13"/> + <xref type="note" data="14"/> + <xref type="note" data="15"/> + </notes> + </record> + <record> + <prefix>4000::/3</prefix> + <description>Reserved by IETF</description> + <xref type="rfc" data="rfc3513"/><xref type="rfc" data="rfc4291"/> + <notes/> + </record> + <record> + <prefix>6000::/3</prefix> + <description>Reserved by IETF</description> + <xref type="rfc" data="rfc3513"/><xref type="rfc" data="rfc4291"/> + <notes/> + </record> + <record> + <prefix>8000::/3</prefix> + <description>Reserved by IETF</description> + <xref type="rfc" data="rfc3513"/><xref type="rfc" data="rfc4291"/> + <notes/> + </record> + <record> + <prefix>a000::/3</prefix> + <description>Reserved by IETF</description> + <xref type="rfc" data="rfc3513"/><xref type="rfc" data="rfc4291"/> + <notes/> + </record> + <record> + <prefix>c000::/3</prefix> + <description>Reserved by IETF</description> + <xref type="rfc" data="rfc3513"/><xref type="rfc" data="rfc4291"/> + <notes/> + </record> + <record> + <prefix>e000::/4</prefix> + <description>Reserved by IETF</description> + <xref type="rfc" data="rfc3513"/><xref type="rfc" data="rfc4291"/> + <notes/> + </record> + <record> + <prefix>f000::/5</prefix> + <description>Reserved by IETF</description> + <xref type="rfc" data="rfc3513"/><xref type="rfc" data="rfc4291"/> + <notes/> + </record> + <record> + <prefix>f800::/6</prefix> + <description>Reserved by IETF</description> + <xref type="rfc" data="rfc3513"/><xref type="rfc" data="rfc4291"/> + <notes/> + </record> + <record> + <prefix>fc00::/7</prefix> + <description>Unique Local Unicast</description> + <xref type="rfc" data="rfc4193"/> + <notes>For complete registration details, see <xref type="registry" data="iana-ipv6-special-registry"/>.</notes> + </record> + <record> + <prefix>fe00::/9</prefix> + <description>Reserved by IETF</description> + <xref type="rfc" data="rfc3513"/><xref type="rfc" data="rfc4291"/> + <notes/> + </record> + <record> + <prefix>fe80::/10</prefix> + <description>Link-Scoped Unicast</description> + <xref type="rfc" data="rfc3513"/><xref type="rfc" data="rfc4291"/> + <notes>Reserved by protocol. For authoritative registration, see <xref type="registry" data="iana-ipv6-special-registry"/>.</notes> + </record> + <record> + <prefix>fec0::/10</prefix> + <description>Reserved by IETF</description> + <xref type="rfc" data="rfc3879"/> + <notes>Deprecated by <xref type="rfc" data="rfc3879"/> in September 2004. Formerly a Site-Local scoped address prefix.</notes> + </record> + <record> + <prefix>ff00::/8</prefix> + <description>Multicast</description> + <xref type="rfc" data="rfc3513"/><xref type="rfc" data="rfc4291"/> + <notes>IANA assignments from this block are registered in <xref type="registry" data="ipv6-multicast-addresses"/>.</notes> + </record> + <footnote anchor="1">::1/128 reserved for Loopback Address <xref type="rfc" data="rfc4291"/>. +Reserved by protocol. For authoritative registration, see <xref type="registry" data="iana-ipv6-special-registry"/>.</footnote> + <footnote anchor="2">::/128 reserved for Unspecified Address <xref type="rfc" data="rfc4291"/>. +Reserved by protocol. For authoritative registration, see <xref type="registry" data="iana-ipv6-special-registry"/>.</footnote> + <footnote anchor="3">::ffff:0:0/96 reserved for IPv4-mapped Address <xref type="rfc" data="rfc4291"/>. +Reserved by protocol. For authoritative registration, see <xref type="registry" data="iana-ipv6-special-registry"/>.</footnote> + <footnote anchor="4">0::/96 deprecated by <xref type="rfc" data="rfc4291"/>. Formerly defined as the "IPv4-compatible IPv6 address" prefix.</footnote> + <footnote anchor="5">The "Well Known Prefix" 64:ff9b::/96 is used in an algorithmic mapping between IPv4 to IPv6 addresses <xref type="rfc" data="rfc6052"/>.</footnote> + <footnote anchor="6">64:ff9b:1::/48 reserved for Local-Use IPv4/IPv6 Translation <xref type="rfc" data="rfc8215"/>.</footnote> + <footnote anchor="7">2001:0::/23 reserved for IETF Protocol Assignments <xref type="rfc" data="rfc2928"/>. +For complete registration details, see <xref type="registry" data="iana-ipv6-special-registry"/>.</footnote> + <footnote anchor="8">2001:0::/32 reserved for TEREDO <xref type="rfc" data="rfc4380"/>. +For complete registration details, see <xref type="registry" data="iana-ipv6-special-registry"/>.</footnote> + <footnote anchor="9">2001:2::/48 reserved for Benchmarking <xref type="rfc" data="rfc5180"/><xref type="rfc-errata" data="1752"/>. +For complete registration details, see <xref type="registry" data="iana-ipv6-special-registry"/>.</footnote> + <footnote anchor="10">2001:3::/32 reserved for AMT <xref type="rfc" data="rfc7450"/>. +For complete registration details, see <xref type="registry" data="iana-ipv6-special-registry"/>.</footnote> + <footnote anchor="11">2001:4:112::/48 reserved for AS112-v6 <xref type="rfc" data="rfc7535"/>. +For complete registration details, see <xref type="registry" data="iana-ipv6-special-registry"/>.</footnote> + <footnote anchor="12">2001:10::/28 deprecated (formerly ORCHID) <xref type="rfc" data="rfc4843"/>. +For complete registration details, see <xref type="registry" data="iana-ipv6-special-registry"/>.</footnote> + <footnote anchor="13">2001:20::/28 reserved for ORCHIDv2 <xref type="rfc" data="rfc7343"/>. +For complete registration details, see <xref type="registry" data="iana-ipv6-special-registry"/>.</footnote> + <footnote anchor="14">2001:db8::/32 reserved for Documentation <xref type="rfc" data="rfc3849"/>. +For complete registration details, see <xref type="registry" data="iana-ipv6-special-registry"/>.</footnote> + <footnote anchor="15">2002::/16 reserved for 6to4 <xref type="rfc" data="rfc3056"/>. +For complete registration details, see <xref type="registry" data="iana-ipv6-special-registry"/>.</footnote> + + + <people/> +</registry> + </registry> diff --git a/netaddr/ip/ipv6-unicast-address-assignments.xml b/netaddr/ip/ipv6-unicast-address-assignments.xml new file mode 100644 index 0000000..ee5a69f --- /dev/null +++ b/netaddr/ip/ipv6-unicast-address-assignments.xml @@ -0,0 +1,435 @@ +<?xml version='1.0' encoding='UTF-8'?> +<?xml-stylesheet type="text/xsl" href="ipv6-unicast-address-assignments.xsl"?> +<?xml-model href="ipv6-unicast-address-assignments.rng" schematypens="http://relaxng.org/ns/structure/1.0" ?> +<registry xmlns="http://www.iana.org/assignments" id="ipv6-unicast-address-assignments"> + <title>IPv6 Global Unicast Address Assignments</title> + <category>Internet Protocol version 6 (IPv6) Global Unicast Allocations</category> + <updated>2019-11-06</updated> + <xref type="rfc" data="rfc7249"/> + <registration_rule>Allocations to RIRs are made in line with the Global Policy published at +<xref type="uri" data="http://www.icann.org/en/resources/policy/global-addressing"/>. +All other assignments require IETF Review.</registration_rule> + <description>The allocation of Internet Protocol version 6 (IPv6) unicast address space is listed +here. References to the various other registries detailing the use of the IPv6 address +space can be found in the <xref type="registry" data="ipv6-address-space">IPv6 Address Space registry</xref>.</description> + <note>The assignable Global Unicast Address space is defined in <xref type="rfc" data="rfc3513"/> as the address block +defined by the prefix 2000::/3. <xref type="rfc" data="rfc3513"/> was later obsoleted by <xref type="rfc" data="rfc4291"/>. All address +space in this block not listed in the table below is reserved by IANA for future +allocation. + </note> + <record date="1999-07-01"> + <prefix>2001:0000::/23</prefix> + <description>IANA</description> + <whois>whois.iana.org</whois> + <status>ALLOCATED</status> + <notes>2001:0000::/23 is reserved for IETF Protocol Assignments <xref type="rfc" data="rfc2928"/>. +2001:0000::/32 is reserved for TEREDO <xref type="rfc" data="rfc4380"/>. +2001:1::1/128 is reserved for Port Control Protocol Anycast <xref type="rfc" data="rfc7723"/>. +2001:2::/48 is reserved for Benchmarking <xref type="rfc" data="rfc5180"/><xref type="rfc-errata" data="1752"/>. +2001:3::/32 is reserved for AMT <xref type="rfc" data="rfc7450"/>. +2001:4:112::/48 is reserved for AS112-v6 <xref type="rfc" data="rfc7535"/>. +2001:10::/28 is deprecated (previously ORCHID) <xref type="rfc" data="rfc4843"/>. +2001:20::/28 is reserved for ORCHIDv2 <xref type="rfc" data="rfc7343"/>. +2001:db8::/32 is reserved for Documentation <xref type="rfc" data="rfc3849"/>. +For complete registration details, see <xref type="registry" data="iana-ipv6-special-registry"/>.</notes> + </record> + <record date="1999-07-01"> + <prefix>2001:0200::/23</prefix> + <description>APNIC</description> + <whois>whois.apnic.net</whois> + <status>ALLOCATED</status> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <notes/> + </record> + <record date="1999-07-01"> + <prefix>2001:0400::/23</prefix> + <description>ARIN</description> + <whois>whois.arin.net</whois> + <status>ALLOCATED</status> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <notes/> + </record> + <record date="1999-07-01"> + <prefix>2001:0600::/23</prefix> + <description>RIPE NCC</description> + <whois>whois.ripe.net</whois> + <status>ALLOCATED</status> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <notes/> + </record> + + <record date="2002-11-02"> + <prefix>2001:0800::/22</prefix> + <description>RIPE NCC</description> + <whois>whois.ripe.net</whois> + <status>ALLOCATED</status> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <notes>2001:0800::/23 was allocated on 2002-05-02. The more recent + allocation (2002-11-02) incorporates the previous allocation.</notes> + </record> + <record date="2002-05-02"> + <prefix>2001:0c00::/23</prefix> + <description>APNIC</description> + <whois>whois.apnic.net</whois> + <status>ALLOCATED</status> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <notes>2001:db8::/32 reserved for Documentation <xref type="rfc" data="rfc3849"/>. +For complete registration details, see <xref type="registry" data="iana-ipv6-special-registry"/>.</notes> + </record> + <record date="2003-01-01"> + <prefix>2001:0e00::/23</prefix> + <description>APNIC</description> + <whois>whois.apnic.net</whois> + <status>ALLOCATED</status> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <notes/> + </record> + <record date="2002-11-01"> + <prefix>2001:1200::/23</prefix> + <description>LACNIC</description> + <whois>whois.lacnic.net</whois> + <status>ALLOCATED</status> + <rdap> + <server>https://rdap.lacnic.net/rdap/</server> + </rdap> + <notes/> + </record> + + <record date="2003-07-01"> + <prefix>2001:1400::/22</prefix> + <description>RIPE NCC</description> + <whois>whois.ripe.net</whois> + <status>ALLOCATED</status> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <notes>2001:1400::/23 was allocated on 2003-02-01. The more recent + allocation (2003-07-01) incorporates the previous allocation.</notes> + </record> + <record date="2003-04-01"> + <prefix>2001:1800::/23</prefix> + <description>ARIN</description> + <whois>whois.arin.net</whois> + <status>ALLOCATED</status> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <notes/> + </record> + <record date="2004-01-01"> + <prefix>2001:1a00::/23</prefix> + <description>RIPE NCC</description> + <whois>whois.ripe.net</whois> + <status>ALLOCATED</status> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <notes/> + </record> + <record date="2004-05-04"> + <prefix>2001:1c00::/22</prefix> + <description>RIPE NCC</description> + <whois>whois.ripe.net</whois> + <status>ALLOCATED</status> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <notes/> + </record> + + <record date="2019-03-12"> + <prefix>2001:2000::/19</prefix> + <description>RIPE NCC</description> + <whois>whois.ripe.net</whois> + <status>ALLOCATED</status> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <notes>2001:2000::/20, 2001:3000::/21, and 2001:3800::/22 + were allocated on 2004-05-04. The more recent allocation + (2019-03-12) incorporates all these previous allocations.</notes> + </record> + <record date="2004-06-11"> + <prefix>2001:4000::/23</prefix> + <description>RIPE NCC</description> + <whois>whois.ripe.net</whois> + <status>ALLOCATED</status> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <notes/> + </record> + <record date="2004-06-01"> + <prefix>2001:4200::/23</prefix> + <description>AFRINIC</description> + <whois>whois.afrinic.net</whois> + <status>ALLOCATED</status> + <rdap> + <server>https://rdap.afrinic.net/rdap/</server> + <server>http://rdap.afrinic.net/rdap/</server> + </rdap> + <notes/> + </record> + <record date="2004-06-11"> + <prefix>2001:4400::/23</prefix> + <description>APNIC</description> + <whois>whois.apnic.net</whois> + <status>ALLOCATED</status> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <notes/> + </record> + <record date="2004-08-17"> + <prefix>2001:4600::/23</prefix> + <description>RIPE NCC</description> + <whois>whois.ripe.net</whois> + <status>ALLOCATED</status> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <notes/> + </record> + <record date="2004-08-24"> + <prefix>2001:4800::/23</prefix> + <description>ARIN</description> + <whois>whois.arin.net</whois> + <status>ALLOCATED</status> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <notes/> + </record> + <record date="2004-10-15"> + <prefix>2001:4a00::/23</prefix> + <description>RIPE NCC</description> + <whois>whois.ripe.net</whois> + <status>ALLOCATED</status> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <notes/> + </record> + <record date="2004-12-17"> + <prefix>2001:4c00::/23</prefix> + <description>RIPE NCC</description> + <whois>whois.ripe.net</whois> + <status>ALLOCATED</status> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <notes/> + </record> + <record date="2004-09-10"> + <prefix>2001:5000::/20</prefix> + <description>RIPE NCC</description> + <whois>whois.ripe.net</whois> + <status>ALLOCATED</status> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <notes/> + </record> + <record date="2004-11-30"> + <prefix>2001:8000::/19</prefix> + <description>APNIC</description> + <whois>whois.apnic.net</whois> + <status>ALLOCATED</status> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <notes/> + </record> + <record date="2004-11-30"> + <prefix>2001:a000::/20</prefix> + <description>APNIC</description> + <whois>whois.apnic.net</whois> + <status>ALLOCATED</status> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <notes/> + </record> + <record date="2006-03-08"> + <prefix>2001:b000::/20</prefix> + <description>APNIC</description> + <whois>whois.apnic.net</whois> + <status>ALLOCATED</status> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <notes/> + </record> + <record date="2001-02-01"> + <prefix>2002:0000::/16</prefix> + <description>6to4</description> + <whois/> + <status>ALLOCATED</status> + <notes>2002::/16 is reserved for 6to4 <xref type="rfc" data="rfc3056"/>. +For complete registration details, see <xref type="registry" data="iana-ipv6-special-registry"/>.</notes> + </record> + <record date="2005-01-12"> + <prefix>2003:0000::/18</prefix> + <description>RIPE NCC</description> + <whois>whois.ripe.net</whois> + <status>ALLOCATED</status> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <notes/> + </record> + <record date="2006-10-03"> + <prefix>2400:0000::/12</prefix> + <description>APNIC</description> + <whois>whois.apnic.net</whois> + <status>ALLOCATED</status> + <rdap> + <server>https://rdap.apnic.net/</server> + </rdap> + <notes>2400:0000::/19 was allocated on 2005-05-20. 2400:2000::/19 was allocated on 2005-07-08. 2400:4000::/21 was +allocated on 2005-08-08. 2404:0000::/23 was allocated on 2006-01-19. The more recent allocation (2006-10-03) +incorporates all these previous allocations.</notes> + </record> + <record date="2006-10-03"> + <prefix>2600:0000::/12</prefix> + <description>ARIN</description> + <whois>whois.arin.net</whois> + <status>ALLOCATED</status> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <notes>2600:0000::/22, 2604:0000::/22, 2608:0000::/22 and 260c:0000::/22 were allocated on 2005-04-19. The more +recent allocation (2006-10-03) incorporates all these previous allocations.</notes> + </record> + <record date="2005-11-17"> + <prefix>2610:0000::/23</prefix> + <description>ARIN</description> + <whois>whois.arin.net</whois> + <status>ALLOCATED</status> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <notes/> + </record> + <record date="2006-09-12"> + <prefix>2620:0000::/23</prefix> + <description>ARIN</description> + <whois>whois.arin.net</whois> + <status>ALLOCATED</status> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <notes/> + </record> + <record date="2019-11-06"> + <prefix>2630:0000::/12</prefix> + <description>ARIN</description> + <whois>whois.arin.net</whois> + <status>ALLOCATED</status> + <rdap> + <server>https://rdap.arin.net/registry</server> + <server>http://rdap.arin.net/registry</server> + </rdap> + <notes/> + </record> + <record date="2006-10-03"> + <prefix>2800:0000::/12</prefix> + <description>LACNIC</description> + <whois>whois.lacnic.net</whois> + <status>ALLOCATED</status> + <rdap> + <server>https://rdap.lacnic.net/rdap/</server> + </rdap> + <notes>2800:0000::/23 was allocated on 2005-11-17. The more recent allocation (2006-10-03) incorporates the +previous allocation.</notes> + </record> + <record date="2006-10-03"> + <prefix>2a00:0000::/12</prefix> + <description>RIPE NCC</description> + <whois>whois.ripe.net</whois> + <status>ALLOCATED</status> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <notes>2a00:0000::/21 was originally allocated on 2005-04-19. 2a01:0000::/23 was allocated on 2005-07-14. +2a01:0000::/16 (incorporating the 2a01:0000::/23) was allocated on 2005-12-15. The more recent allocation +(2006-10-03) incorporates these previous allocations.</notes> + </record> + <record date="2019-06-05"> + <prefix>2a10:0000::/12</prefix> + <description>RIPE NCC</description> + <whois>whois.ripe.net</whois> + <status>ALLOCATED</status> + <rdap> + <server>https://rdap.db.ripe.net/</server> + </rdap> + <notes/> + </record> + <record date="2006-10-03"> + <prefix>2c00:0000::/12</prefix> + <description>AFRINIC</description> + <whois>whois.afrinic.net</whois> + <status>ALLOCATED</status> + <rdap> + <server>https://rdap.afrinic.net/rdap/</server> + <server>http://rdap.afrinic.net/rdap/</server> + </rdap> + <notes/> + </record> + <record date="1999-07-01"> + <prefix>2d00:0000::/8</prefix> + <description>IANA</description> + <whois/> + <status>RESERVED</status> + <notes/> + </record> + <record date="1999-07-01"> + <prefix>2e00:0000::/7</prefix> + <description>IANA</description> + <whois/> + <status>RESERVED</status> + <notes/> + </record> + <record date="1999-07-01"> + <prefix>3000:0000::/4</prefix> + <description>IANA</description> + <whois/> + <status>RESERVED</status> + <notes/> + </record> + <record date="2008-04"> + <prefix>3ffe::/16</prefix> + <description>IANA</description> + <whois/> + <status>RESERVED</status> + <notes>3ffe:831f::/32 was used for Teredo in some old but widely distributed networking stacks. This usage is +deprecated in favor of 2001::/32, which was allocated for the purpose in <xref type="rfc" data="rfc4380"/>. +3ffe::/16 and 5f00::/8 were used for the 6bone but were returned. <xref type="rfc" data="rfc5156"/></notes> + </record> + <record date="2008-04"> + <prefix>5f00::/8</prefix> + <description>IANA</description> + <whois/> + <status>RESERVED</status> + <notes>3ffe::/16 and 5f00::/8 were used for the 6bone but were returned. <xref type="rfc" data="rfc5156"/></notes> + </record> + <people/> +</registry> diff --git a/netaddr/ip/multicast-addresses.xml b/netaddr/ip/multicast-addresses.xml new file mode 100644 index 0000000..0a09b62 --- /dev/null +++ b/netaddr/ip/multicast-addresses.xml @@ -0,0 +1,4914 @@ +<?xml version='1.0' encoding='UTF-8'?> +<?xml-stylesheet type="text/xsl" href="multicast-addresses.xsl"?> +<?xml-model href="multicast-addresses.rng" schematypens="http://relaxng.org/ns/structure/1.0" ?> +<registry xmlns="http://www.iana.org/assignments" id="multicast-addresses"> + <title>IPv4 Multicast Address Space Registry</title> + <updated>2023-10-16</updated> + <expert>Stig Venaas</expert> + <note>Host Extensions for IP Multicasting <xref type="rfc" data="rfc1112"/> specifies the extensions +required of a host implementation of the Internet Protocol (IP) to +support multicasting. The multicast addresses are in the range +224.0.0.0 through 239.255.255.255. Address assignments are listed below. + +The range of addresses between 224.0.0.0 and 224.0.0.255, inclusive, +is reserved for the use of routing protocols and other low-level +topology discovery or maintenance protocols, such as gateway discovery +and group membership reporting. Multicast routers should not forward +any multicast datagram with destination addresses in this range, +regardless of its TTL. + </note> + + + <registry id="multicast-addresses-1"> + <title>Local Network Control Block (224.0.0.0 - 224.0.0.255 (224.0.0/24))</title> + <xref type="rfc" data="rfc5771"/> + <registration_rule>Expert Review, IESG Approval, or Standards Action</registration_rule> + <note>(*) It is only appropriate to use these values in explicitly- +configured experiments; they MUST NOT be shipped as defaults in +implementations. See <xref type="rfc" data="rfc3692"/> for details. + </note> + <note title="Request an Assignment"> +<xref type="uri" data="https://www.iana.org/protocols/apply"/> + + </note> + <record> + <addr>224.0.0.0</addr> + <description>Base Address (Reserved)</description> + <xref type="rfc" data="rfc1112"/> + <xref type="person" data="Jon_Postel"/> + </record> + <record> + <addr>224.0.0.1</addr> + <description>All Systems on this Subnet</description> + <xref type="rfc" data="rfc1112"/> + <xref type="person" data="Jon_Postel"/> + </record> + <record> + <addr>224.0.0.2</addr> + <description>All Routers on this Subnet</description> + <xref type="person" data="Jon_Postel"/> + </record> + <record> + <addr>224.0.0.3</addr> + <description>Unassigned</description> + </record> + <record> + <addr>224.0.0.4</addr> + <description>DVMRP Routers</description> + <xref type="rfc" data="rfc1075"/> + <xref type="person" data="Jon_Postel"/> + </record> + <record> + <addr>224.0.0.5</addr> + <description>OSPFIGP OSPFIGP All Routers</description> + <xref type="rfc" data="rfc2328"/> + <xref type="person" data="OSPF_WG_Chairs"/> + </record> + <record> + <addr>224.0.0.6</addr> + <description>OSPFIGP OSPFIGP Designated Routers</description> + <xref type="rfc" data="rfc2328"/> + <xref type="person" data="OSPF_WG_Chairs"/> + </record> + <record> + <addr>224.0.0.7</addr> + <description>ST Routers</description> + <xref type="rfc" data="rfc1190"/> + <xref type="person" data="Karen_Seo"/> + </record> + <record> + <addr>224.0.0.8</addr> + <description>ST Hosts</description> + <xref type="rfc" data="rfc1190"/> + <xref type="person" data="Karen_Seo"/> + </record> + <record> + <addr>224.0.0.9</addr> + <description>RIP2 Routers</description> + <xref type="rfc" data="rfc1723"/> + <xref type="person" data="Gary_S_Malkin"/> + </record> + <record date="1996-03-01" updated="2016-03-21"> + <addr>224.0.0.10</addr> + <description>EIGRP Routers</description> + <xref type="rfc" data="rfc7868"/> + </record> + <record> + <addr>224.0.0.11</addr> + <description>Mobile-Agents</description> + <xref type="text">[Bill Simpson]</xref> + </record> + <record> + <addr>224.0.0.12</addr> + <description>DHCP Server / Relay Agent</description> + <xref type="text">[Unknown]</xref> + </record> + <record date="1996-03-01"> + <addr>224.0.0.13</addr> + <description>All PIM Routers</description> + <xref type="person" data="Dino_Farinacci"/> + </record> + <record date="1996-04-01"> + <addr>224.0.0.14</addr> + <description>RSVP-ENCAPSULATION</description> + <xref type="person" data="Bob_Braden"/> + </record> + <record date="1997-02-01"> + <addr>224.0.0.15</addr> + <description>all-cbt-routers</description> + <xref type="person" data="Tony_Ballardie"/> + <xref type="rfc" data="rfc2189"/> + </record> + <record date="1997-06-01"> + <addr>224.0.0.16</addr> + <description>designated-sbm</description> + <xref type="person" data="Fred_Baker"/> + </record> + <record date="1997-06-01"> + <addr>224.0.0.17</addr> + <description>all-sbms</description> + <xref type="person" data="Fred_Baker"/> + </record> + <record> + <addr>224.0.0.18</addr> + <description>VRRP</description> + <xref type="rfc" data="rfc3768"/> + <xref type="rfc" data="rfc5798"/> + </record> + <record date="1999-10-01"> + <addr>224.0.0.19</addr> + <description>IPAllL1ISs</description> + <xref type="person" data="Tony_Przygienda"/> + </record> + <record date="1999-10-01"> + <addr>224.0.0.20</addr> + <description>IPAllL2ISs</description> + <xref type="person" data="Tony_Przygienda"/> + </record> + <record date="1999-10-01"> + <addr>224.0.0.21</addr> + <description>IPAllIntermediate Systems</description> + <xref type="person" data="Tony_Przygienda"/> + </record> + <record date="1999-10-01"> + <addr>224.0.0.22</addr> + <description>IGMP</description> + <xref type="person" data="Steve_Deering"/> + </record> + <record date="2000-03-01"> + <addr>224.0.0.23</addr> + <description>GLOBECAST-ID</description> + <xref type="person" data="Piers_Scannell"/> + </record> + <record> + <addr>224.0.0.24</addr> + <description>OSPFIGP-TE</description> + <xref type="rfc" data="rfc4973"/> + </record> + <record date="2000-03-01"> + <addr>224.0.0.25</addr> + <description>router-to-switch</description> + <xref type="person" data="Ishan_Wu"/> + </record> + <record> + <addr>224.0.0.26</addr> + <description>Unassigned</description> + </record> + <record date="2000-03-01"> + <addr>224.0.0.27</addr> + <description>Al MPP Hello</description> + <xref type="person" data="Brian_Martinicky"/> + </record> + <record date="2000-03-01"> + <addr>224.0.0.28</addr> + <description>ETC Control</description> + <xref type="person" data="Steve_Polishinski"/> + </record> + <record date="2000-05-01"> + <addr>224.0.0.29</addr> + <description>GE-FANUC</description> + <xref type="person" data="Ian_Wacey"/> + </record> + <record date="2000-05-01"> + <addr>224.0.0.30</addr> + <description>indigo-vhdp</description> + <xref type="person" data="Colin_Caughie"/> + </record> + <record date="2000-05-01"> + <addr>224.0.0.31</addr> + <description>shinbroadband</description> + <xref type="person" data="Sakon_Kittivatcharapong"/> + </record> + <record date="2000-05-01"> + <addr>224.0.0.32</addr> + <description>digistar</description> + <xref type="person" data="Brian_Kerkan"/> + </record> + <record date="2003-03-01"> + <addr>224.0.0.33</addr> + <description>ff-system-management</description> + <xref type="person" data="Dave_Glanzer"/> + </record> + <record date="2000-06-01"> + <addr>224.0.0.34</addr> + <description>pt2-discover</description> + <xref type="person" data="Ralph_Kammerlander"/> + </record> + <record date="2000-07-01"> + <addr>224.0.0.35</addr> + <description>DXCLUSTER</description> + <xref type="person" data="Dirk_Koopman"/> + </record> + <record date="2001-01-01"> + <addr>224.0.0.36</addr> + <description>DTCP Announcement</description> + <xref type="person" data="Patrick_Cipiere"/> + </record> + <record date="2001-12-01"> + <addr>224.0.0.37-224.0.0.68</addr> + <description>zeroconfaddr (renew 12/02)</description> + <xref type="person" data="Erik_Guttman"/> + </record> + <record> + <addr>224.0.0.69-224.0.0.100</addr> + <description>Unassigned</description> + </record> + <record date="2001-12-01"> + <addr>224.0.0.101</addr> + <description>cisco-nhap</description> + <xref type="person" data="Mark_Bakke"/> + </record> + <record date="2001-12-01"> + <addr>224.0.0.102</addr> + <description>HSRP</description> + <xref type="person" data="Ian_Wilson"/> + </record> + <record date="2002-02-01"> + <addr>224.0.0.103</addr> + <description>MDAP</description> + <xref type="person" data="Johan_Deleu"/> + </record> + <record date="2002-10-01"> + <addr>224.0.0.104</addr> + <description>Nokia MC CH</description> + <xref type="person" data="Morteza_Kalhour"/> + </record> + <record date="2003-03-01"> + <addr>224.0.0.105</addr> + <description>ff-lr-address</description> + <xref type="person" data="Dave_Glanzer"/> + </record> + <record> + <addr>224.0.0.106</addr> + <description>All-Snoopers</description> + <xref type="rfc" data="rfc4286"/> + </record> + <record date="2007-02-02" updated="2023-08-17"> + <addr>224.0.0.107</addr> + <description>PTP-pdelay</description> + <xref type="uri" data="https://www.nist.gov/el/intelligent-systems-division-73500/ordering-ieee-1588-standard-precision-clock-synchronization">NIST: IEEE Std 1588</xref> + <xref type="person" data="Kang_Lee"/> + </record> + <record date="2007-08-30"> + <addr>224.0.0.108</addr> + <description>Saratoga</description> + <xref type="person" data="Lloyd_Wood"/> + <reviewed>2011-03-17</reviewed> + </record> + <record> + <addr>224.0.0.109</addr> + <description>LL-MANET-Routers</description> + <xref type="rfc" data="rfc5498"/> + <reviewed>2011-02-23</reviewed> + </record> + <record date="2009-01-20"> + <addr>224.0.0.110</addr> + <description>IGRS</description> + <xref type="person" data="Xiaoyu_Zhou"/> + </record> + <record> + <addr>224.0.0.111</addr> + <description>Babel</description> + <xref type="rfc" data="rfc8966"/> + </record> + <record date="2011-11-02"> + + <addr>224.0.0.112</addr> + <description>MMA Device Discovery</description> + <xref type="person" data="Tom_White"/> + </record> + <record date="2011-11-18"> + <addr>224.0.0.113</addr> + <description>AllJoyn</description> + <xref type="person" data="Craig_Dowell"/> + </record> + <record date="2012-06-12"> + <addr>224.0.0.114</addr> + <description>Inter RFID Reader Protocol</description> + <xref type="person" data="Wayne_Wenyu_Liu"/> + </record> + <record date="2014-07-01"> + <addr>224.0.0.115</addr> + <description>JSDP</description> + <xref type="person" data="J._Ryan_Stinnett"/> + </record> + <record date="2016-10-20"> + <addr>224.0.0.116</addr> + <description>Device discovery/config</description> + <xref type="person" data="COMTECH_Kft."/> + </record> + <record date="2017-04-03"> + <addr>224.0.0.117</addr> + <description>DLEP Discovery</description> + <xref type="rfc" data="rfc8175"/> + </record> + <record date="2017-05-19"> + <addr>224.0.0.118</addr> + <description>MAAS</description> + <xref type="person" data="Mike_Pontillo"/> + </record> + <record date="2017-07-20"> + <addr>224.0.0.119</addr> + <description>ALL_GRASP_NEIGHBORS</description> + <xref type="rfc" data="rfc8990"/> + </record> + <record date="2022-11-02"> + <addr>224.0.0.120</addr> + <description>3GPP MBMS SACH</description> + <xref type="person" data="Charles_Lo"/> + <controller><xref type="person" data="_3GPP"/></controller> + </record> + <record date="2023-02-17"> + <addr>224.0.0.121</addr> + <description>ALL_V4_RIFT_ROUTERS (TEMPORARY - registered 2023-02-17, expires 2024-02-17)</description> + <xref type="draft" data="draft-ietf-rift-rift-16"/> + </record> + <record> + <addr>224.0.0.122-224.0.0.149</addr> + <description>Unassigned</description> + </record> + <record date="2019-03-13"> + <addr>224.0.0.150</addr> + <description>Ramp AltitudeCDN MulticastPlus</description> + <xref type="person" data="Giovanni_Marzot"/> + <controller><xref type="person" data="Ramp_Holdings"/></controller> + </record> + <record> + <addr>224.0.0.151</addr> + <description>Unassigned</description> + </record> + <record date="2023-08-09"> + <addr>224.0.0.152</addr> + <description>WiseHome</description> + <xref type="person" data="Erick_MacDonald_Filzek"/> + <controller> + <xref type="person" data="IOT_COMPANY_SOLUCOES_TECNOLOGICAS_LTDA"/> + </controller> + </record> + <record> + <addr>224.0.0.153-224.0.0.250</addr> + <description>Unassigned</description> + </record> + <record date="2000-04-01"> + <addr>224.0.0.251</addr> + <description>mDNS</description> + <xref type="rfc" data="rfc6762"/> + </record> + <record> + <addr>224.0.0.252</addr> + <description>Link-local Multicast Name Resolution</description> + <xref type="rfc" data="rfc4795"/> + <reviewed>2011-03-17</reviewed> + </record> + <record> + <addr>224.0.0.253</addr> + <description>Teredo</description> + <xref type="rfc" data="rfc4380"/> + <reviewed>2010-02-14</reviewed> + </record> + <record> + <addr>224.0.0.254</addr> + <description>RFC3692-style Experiment (*)</description> + <xref type="rfc" data="rfc4727"/> + </record> + <record> + <addr>224.0.0.255</addr> + <description>Unassigned</description> + </record> + </registry> + + + <registry id="multicast-addresses-2"> + <title>Internetwork Control Block (224.0.1.0 - 224.0.1.255 (224.0.1/24))</title> + <xref type="rfc" data="rfc5771"/> + <registration_rule>Expert Review, IESG Approval, or Standards Action</registration_rule> + <note title="Request an Assignment"> +<xref type="uri" data="https://www.iana.org/protocols/apply"/> + + </note> + <record> + <addr>224.0.1.0</addr> + <description>VMTP Managers Group</description> + <xref type="rfc" data="rfc1045"/> + <xref type="person" data="Dave_Cheriton"/> + </record> + <record> + <addr>224.0.1.1</addr> + <description>NTP Network Time Protocol</description> + <xref type="rfc" data="rfc1119"/> + <xref type="rfc" data="rfc5905"/> + <xref type="person" data="David_Mills"/> + </record> + <record> + <addr>224.0.1.2</addr> + <description>SGI-Dogfight</description> + <xref type="person" data="Andrew_Cherenson"/> + </record> + <record> + <addr>224.0.1.3</addr> + <description>Rwhod</description> + <xref type="person" data="Steve_Deering_2"/> + </record> + <record> + <addr>224.0.1.4</addr> + <description>VNP</description> + <xref type="person" data="Dave_Cheriton"/> + </record> + <record> + <addr>224.0.1.5</addr> + <description>Artificial Horizons - Aviator</description> + <xref type="person" data="Bruce_Factor"/> + </record> + <record> + <addr>224.0.1.6</addr> + <description>NSS - Name Service Server</description> + <xref type="person" data="Bill_Schilit"/> + </record> + <record> + <addr>224.0.1.7</addr> + <description>AUDIONEWS - Audio News Multicast</description> + <xref type="person" data="Martin_Forssen"/> + </record> + <record> + <addr>224.0.1.8</addr> + <description>SUN NIS+ Information Service</description> + <xref type="person" data="Chuck_McManis"/> + </record> + <record> + <addr>224.0.1.9</addr> + <description>MTP Multicast Transport Protocol</description> + <xref type="person" data="Susie_Armstrong"/> + </record> + <record> + <addr>224.0.1.10</addr> + <description>IETF-1-LOW-AUDIO</description> + <xref type="person" data="Steve_Casner"/> + </record> + <record> + <addr>224.0.1.11</addr> + <description>IETF-1-AUDIO</description> + <xref type="person" data="Steve_Casner"/> + </record> + <record> + <addr>224.0.1.12</addr> + <description>IETF-1-VIDEO</description> + <xref type="person" data="Steve_Casner"/> + </record> + <record> + <addr>224.0.1.13</addr> + <description>IETF-2-LOW-AUDIO</description> + <xref type="person" data="Steve_Casner"/> + </record> + <record> + <addr>224.0.1.14</addr> + <description>IETF-2-AUDIO</description> + <xref type="person" data="Steve_Casner"/> + </record> + <record> + <addr>224.0.1.15</addr> + <description>IETF-2-VIDEO</description> + <xref type="person" data="Steve_Casner"/> + </record> + <record> + <addr>224.0.1.16</addr> + <description>MUSIC-SERVICE</description> + </record> + <record> + <addr>224.0.1.17</addr> + <description>SEANET-TELEMETRY</description> + </record> + <record> + <addr>224.0.1.18</addr> + <description>SEANET-IMAGE</description> + </record> + <record date="1996-04-01"> + <addr>224.0.1.19</addr> + <description>MLOADD</description> + <xref type="person" data="Bob_Braden"/> + </record> + <record> + <addr>224.0.1.20</addr> + <description>any private experiment</description> + <xref type="person" data="Jon_Postel"/> + </record> + <record> + <addr>224.0.1.21</addr> + <description>DVMRP on MOSPF</description> + <xref type="text">[John Moy]</xref> + </record> + <record date="1995-05-01"> + <addr>224.0.1.22</addr> + <description>SVRLOC</description> + <xref type="person" data="John_Veizades"/> + </record> + <record> + <addr>224.0.1.23</addr> + <description>XINGTV</description> + <xref type="person" data="Howard_Gordon"/> + </record> + <record> + <addr>224.0.1.24</addr> + <description>microsoft-ds</description> + <xref type="text"><arnoldm&microsoft.com></xref> + </record> + <record> + <addr>224.0.1.25</addr> + <description>nbc-pro</description> + <xref type="text"><bloomer&birch.crd.ge.com></xref> + </record> + <record> + <addr>224.0.1.26</addr> + <description>nbc-pfn</description> + <xref type="text"><bloomer&birch.crd.ge.com></xref> + </record> + <record date="1994-11-01"> + <addr>224.0.1.27</addr> + <description>lmsc-calren-1</description> + <xref type="person" data="Yea_Uang"/> + </record> + <record date="1994-11-01"> + <addr>224.0.1.28</addr> + <description>lmsc-calren-2</description> + <xref type="person" data="Yea_Uang"/> + </record> + <record date="1994-11-01"> + <addr>224.0.1.29</addr> + <description>lmsc-calren-3</description> + <xref type="person" data="Yea_Uang"/> + </record> + <record date="1994-11-01"> + <addr>224.0.1.30</addr> + <description>lmsc-calren-4</description> + <xref type="person" data="Yea_Uang"/> + </record> + <record date="1995-01-01"> + <addr>224.0.1.31</addr> + <description>ampr-info</description> + <xref type="person" data="Rob_Janssen"/> + </record> + <record date="1995-01-01"> + <addr>224.0.1.32</addr> + <description>mtrace</description> + <xref type="person" data="Steve_Casner_2"/> + </record> + <record date="1996-04-01"> + <addr>224.0.1.33</addr> + <description>RSVP-encap-1</description> + <xref type="person" data="Bob_Braden"/> + </record> + <record date="1996-04-01"> + <addr>224.0.1.34</addr> + <description>RSVP-encap-2</description> + <xref type="person" data="Bob_Braden"/> + </record> + <record date="1995-05-01"> + <addr>224.0.1.35</addr> + <description>SVRLOC-DA</description> + <xref type="person" data="John_Veizades"/> + </record> + <record date="1995-08-01"> + <addr>224.0.1.36</addr> + <description>rln-server</description> + <xref type="person" data="Brian_Kean"/> + </record> + <record date="1995-10-01"> + <addr>224.0.1.37</addr> + <description>proshare-mc</description> + <xref type="person" data="Mark_Lewis"/> + </record> + <record> + <addr>224.0.1.38</addr> + <description>Unassigned</description> + </record> + <record date="1996-03-01"> + <addr>224.0.1.39</addr> + <description>cisco-rp-announce</description> + <xref type="person" data="Dino_Farinacci"/> + </record> + <record date="1996-03-01"> + <addr>224.0.1.40</addr> + <description>cisco-rp-discovery</description> + <xref type="person" data="Dino_Farinacci"/> + </record> + <record date="1996-05-01"> + <addr>224.0.1.41</addr> + <description>gatekeeper</description> + <xref type="person" data="Jim_Toga"/> + </record> + <record date="1996-07-01"> + <addr>224.0.1.42</addr> + <description>iberiagames</description> + <xref type="person" data="Jose_Luis_Marocho"/> + </record> + <record date="1996-11-01"> + <addr>224.0.1.43</addr> + <description>nwn-discovery</description> + <xref type="person" data="Arnoud_Zwemmer"/> + </record> + <record date="1996-11-01"> + <addr>224.0.1.44</addr> + <description>nwn-adaptor</description> + <xref type="person" data="Arnoud_Zwemmer"/> + </record> + <record date="1997-01-01"> + <addr>224.0.1.45</addr> + <description>isma-1</description> + <xref type="person" data="Stephen_Dunne"/> + </record> + <record date="1997-01-01"> + <addr>224.0.1.46</addr> + <description>isma-2</description> + <xref type="person" data="Stephen_Dunne"/> + </record> + <record date="1997-01-01"> + <addr>224.0.1.47</addr> + <description>telerate</description> + <xref type="person" data="Wenjie_Peng"/> + </record> + <record date="1997-01-01"> + <addr>224.0.1.48</addr> + <description>ciena</description> + <xref type="person" data="Mike_Rodbell"/> + </record> + <record> + <addr>224.0.1.49</addr> + <description>dcap-servers</description> + <xref type="rfc" data="rfc2114"/> + </record> + <record> + <addr>224.0.1.50</addr> + <description>dcap-clients</description> + <xref type="rfc" data="rfc2114"/> + </record> + <record date="1997-01-01"> + <addr>224.0.1.51</addr> + <description>mcntp-directory</description> + <xref type="person" data="Heiko_Rupp"/> + </record> + <record date="1997-01-01"> + <addr>224.0.1.52</addr> + <description>mbone-vcr-directory</description> + <xref type="person" data="Wieland_Holdfelder"/> + </record> + <record date="1997-03-01"> + <addr>224.0.1.53</addr> + <description>heartbeat</description> + <xref type="person" data="Louis_Mamakos"/> + </record> + <record date="1997-04-01"> + <addr>224.0.1.54</addr> + <description>sun-mc-grp</description> + <xref type="person" data="Michael_DeMoney"/> + </record> + <record date="1997-04-01"> + <addr>224.0.1.55</addr> + <description>extended-sys</description> + <xref type="person" data="David_Poole"/> + </record> + <record date="1997-06-01"> + <addr>224.0.1.56</addr> + <description>pdrncs</description> + <xref type="person" data="Paul_Wissenbach"/> + </record> + <record date="1997-06-01"> + <addr>224.0.1.57</addr> + <description>tns-adv-multi</description> + <xref type="person" data="Jerome_Albin"/> + </record> + <record date="1997-08-01"> + <addr>224.0.1.58</addr> + <description>vcals-dmu</description> + <xref type="person" data="Masato_Shindoh"/> + </record> + <record date="1997-09-01"> + <addr>224.0.1.59</addr> + <description>zuba</description> + <xref type="person" data="Dan_Jackson"/> + </record> + <record date="1997-07-01"> + <addr>224.0.1.60</addr> + <description>hp-device-disc</description> + <xref type="person" data="Shivaun_Albright"/> + </record> + <record date="1997-07-01"> + <addr>224.0.1.61</addr> + <description>tms-production</description> + <xref type="person" data="Asad_Gilani"/> + </record> + <record date="1997-08-01"> + <addr>224.0.1.62</addr> + <description>sunscalar</description> + <xref type="person" data="Terry_Gibson"/> + </record> + <record date="1997-09-01"> + <addr>224.0.1.63</addr> + <description>mmtp-poll</description> + <xref type="person" data="Bryan_Costales"/> + </record> + <record date="1997-10-01"> + <addr>224.0.1.64</addr> + <description>compaq-peer</description> + <xref type="person" data="Victor_Volpe"/> + </record> + <record date="1997-12-01"> + <addr>224.0.1.65</addr> + <description>iapp</description> + <xref type="person" data="Bob_Meier"/> + </record> + <record date="1997-12-01"> + <addr>224.0.1.66</addr> + <description>multihasc-com</description> + <xref type="person" data="Darcy_Brockbank"/> + </record> + <record date="1997-12-01"> + <addr>224.0.1.67</addr> + <description>serv-discovery</description> + <xref type="person" data="Chas_Honton"/> + </record> + <record> + <addr>224.0.1.68</addr> + <description>mdhcpdisover</description> + <xref type="rfc" data="rfc2730"/> + </record> + <record date="1998-02-01"> + <addr>224.0.1.69</addr> + <description>MMP-bundle-discovery1</description> + <xref type="person" data="Gary_Scott_Malkin"/> + </record> + <record date="1998-02-01"> + <addr>224.0.1.70</addr> + <description>MMP-bundle-discovery2</description> + <xref type="person" data="Gary_Scott_Malkin"/> + </record> + <record date="1998-02-01" updated="2014-11-07"> + <addr>224.0.1.71</addr> + <description>XYPOINT DGPS Data Feed</description> + <xref type="person" data="NE-TEAM_at_telecomsys.com"/> + </record> + <record date="1998-02-01"> + <addr>224.0.1.72</addr> + <description>GilatSkySurfer</description> + <xref type="person" data="Yossi_Gal"/> + </record> + <record date="1997-03-01"> + <addr>224.0.1.73</addr> + <description>SharesLive</description> + <xref type="person" data="Shane_Rowatt"/> + </record> + <record> + <addr>224.0.1.74</addr> + <description>NorthernData</description> + <xref type="text">[Sheers]</xref> + </record> + <record> + <addr>224.0.1.75</addr> + <description>SIP</description> + <xref type="text">[Schulzrinne]</xref> + </record> + <record date="1998-03"> + <addr>224.0.1.76</addr> + <description>IAPP</description> + <xref type="person" data="Henri_Moelard"/> + </record> + <record date="1998-03-01"> + <addr>224.0.1.77</addr> + <description>AGENTVIEW</description> + <xref type="person" data="Ram_Iyer"/> + </record> + <record date="1998-04-01"> + <addr>224.0.1.78</addr> + <description>Tibco Multicast1</description> + <xref type="person" data="Raymond_Shum"/> + </record> + <record date="1998-04-01"> + <addr>224.0.1.79</addr> + <description>Tibco Multicast2</description> + <xref type="person" data="Raymond_Shum"/> + </record> + <record date="1998-06-01"> + <addr>224.0.1.80</addr> + <description>MSP</description> + <xref type="person" data="Evan_Caves"/> + </record> + <record date="1998-06-01"> + <addr>224.0.1.81</addr> + <description>OTT (One-way Trip Time)</description> + <xref type="person" data="Beverly_Schwartz"/> + </record> + <record date="1998-08-01"> + <addr>224.0.1.82</addr> + <description>TRACKTICKER</description> + <xref type="person" data="Alan_Novick"/> + </record> + <record date="1998-08-01"> + <addr>224.0.1.83</addr> + <description>dtn-mc</description> + <xref type="person" data="Bob_Gaddie"/> + </record> + <record date="1998-08-01"> + <addr>224.0.1.84</addr> + <description>jini-announcement</description> + <xref type="person" data="Bob_Scheifler"/> + </record> + <record date="1998-08-01"> + <addr>224.0.1.85</addr> + <description>jini-request</description> + <xref type="person" data="Bob_Scheifler"/> + </record> + <record date="1998-08-01"> + <addr>224.0.1.86</addr> + <description>sde-discovery</description> + <xref type="person" data="Peter_Aronson"/> + </record> + <record date="1998-08-01"> + <addr>224.0.1.87</addr> + <description>DirecPC-SI</description> + <xref type="person" data="Doug_Dillon"/> + </record> + <record date="1998-09-01"> + <addr>224.0.1.88</addr> + <description>B1RMonitor</description> + <xref type="person" data="Ed_Purkiss"/> + </record> + <record date="1998-09-01"> + <addr>224.0.1.89</addr> + <description>3Com-AMP3 dRMON</description> + <xref type="person" data="Prakash_Banthia"/> + </record> + <record date="1998-09-01"> + <addr>224.0.1.90</addr> + <description>imFtmSvc</description> + <xref type="person" data="Zia_Bhatti"/> + </record> + <record date="1998-09-01"> + <addr>224.0.1.91</addr> + <description>NQDS4</description> + <xref type="person" data="Michael_Rosenberg"/> + </record> + <record date="1998-09-01"> + <addr>224.0.1.92</addr> + <description>NQDS5</description> + <xref type="person" data="Michael_Rosenberg"/> + </record> + <record date="1998-09-01"> + <addr>224.0.1.93</addr> + <description>NQDS6</description> + <xref type="person" data="Michael_Rosenberg"/> + </record> + <record date="1998-09-01"> + <addr>224.0.1.94</addr> + <description>NLVL12</description> + <xref type="person" data="Michael_Rosenberg"/> + </record> + <record date="1998-09-01"> + <addr>224.0.1.95</addr> + <description>NTDS1</description> + <xref type="person" data="Michael_Rosenberg"/> + </record> + <record date="1998-09-01"> + <addr>224.0.1.96</addr> + <description>NTDS2</description> + <xref type="person" data="Michael_Rosenberg"/> + </record> + <record date="1998-09-01"> + <addr>224.0.1.97</addr> + <description>NODSA</description> + <xref type="person" data="Michael_Rosenberg"/> + </record> + <record date="1998-09-01"> + <addr>224.0.1.98</addr> + <description>NODSB</description> + <xref type="person" data="Michael_Rosenberg"/> + </record> + <record date="1998-09-01"> + <addr>224.0.1.99</addr> + <description>NODSC</description> + <xref type="person" data="Michael_Rosenberg"/> + </record> + <record date="1998-09-01"> + <addr>224.0.1.100</addr> + <description>NODSD</description> + <xref type="person" data="Michael_Rosenberg"/> + </record> + <record date="1998-09-01"> + <addr>224.0.1.101</addr> + <description>NQDS4R</description> + <xref type="person" data="Michael_Rosenberg"/> + </record> + <record date="1998-09-01"> + <addr>224.0.1.102</addr> + <description>NQDS5R</description> + <xref type="person" data="Michael_Rosenberg"/> + </record> + <record date="1998-09-01"> + <addr>224.0.1.103</addr> + <description>NQDS6R</description> + <xref type="person" data="Michael_Rosenberg"/> + </record> + <record date="1998-09-01"> + <addr>224.0.1.104</addr> + <description>NLVL12R</description> + <xref type="person" data="Michael_Rosenberg"/> + </record> + <record date="1998-09-01"> + <addr>224.0.1.105</addr> + <description>NTDS1R</description> + <xref type="person" data="Michael_Rosenberg"/> + </record> + <record date="1998-09-01"> + <addr>224.0.1.106</addr> + <description>NTDS2R</description> + <xref type="person" data="Michael_Rosenberg"/> + </record> + <record date="1998-09-01"> + <addr>224.0.1.107</addr> + <description>NODSAR</description> + <xref type="person" data="Michael_Rosenberg"/> + </record> + <record date="1998-09-01"> + <addr>224.0.1.108</addr> + <description>NODSBR</description> + <xref type="person" data="Michael_Rosenberg"/> + </record> + <record date="1998-09-01"> + <addr>224.0.1.109</addr> + <description>NODSCR</description> + <xref type="person" data="Michael_Rosenberg"/> + </record> + <record date="1998-09-01"> + <addr>224.0.1.110</addr> + <description>NODSDR</description> + <xref type="person" data="Michael_Rosenberg"/> + </record> + <record date="1998-10-01"> + <addr>224.0.1.111</addr> + <description>MRM</description> + <xref type="person" data="Liming_Wei"/> + </record> + <record date="1998-11-01"> + <addr>224.0.1.112</addr> + <description>TVE-FILE</description> + <xref type="person" data="Dean_Blackketter"/> + </record> + <record date="1998-11-01"> + <addr>224.0.1.113</addr> + <description>TVE-ANNOUNCE</description> + <xref type="person" data="Dean_Blackketter"/> + </record> + <record date="1998-11-01"> + <addr>224.0.1.114</addr> + <description>Mac Srv Loc</description> + <xref type="person" data="Bill_Woodcock"/> + </record> + <record date="1998-11-01"> + <addr>224.0.1.115</addr> + <description>Simple Multicast</description> + <xref type="person" data="Jon_Crowcroft"/> + </record> + <record date="1998-11-01"> + <addr>224.0.1.116</addr> + <description>SpectraLinkGW</description> + <xref type="person" data="Mark_Hamilton"/> + </record> + <record date="1998-11-01"> + <addr>224.0.1.117</addr> + <description>dieboldmcast</description> + <xref type="person" data="Gene_Marsh"/> + </record> + <record date="1998-12-01"> + <addr>224.0.1.118</addr> + <description>Tivoli Systems</description> + <xref type="person" data="Jon_Gabriel"/> + </record> + <record date="1998-12-01"> + <addr>224.0.1.119</addr> + <description>pq-lic-mcast</description> + <xref type="person" data="Bob_Sledge"/> + </record> + <record date="2007-03-01" updated="2020-07-22"> + <addr>224.0.1.120</addr> + <description>Pico</description> + <xref type="person" data="Pico_Sales"/> + <controller> + <xref type="person" data="Pico"/> + </controller> + </record> + <record date="1998-12-01"> + <addr>224.0.1.121</addr> + <description>Pipesplatform</description> + <xref type="person" data="Daniel_Dissett"/> + </record> + <record date="1999-01-01"> + <addr>224.0.1.122</addr> + <description>LiebDevMgmg-DM</description> + <xref type="person" data="Mike_Velten"/> + </record> + <record date="1999-01-01"> + <addr>224.0.1.123</addr> + <description>TRIBALVOICE</description> + <xref type="person" data="Nigel_Thompson"/> + </record> + <record> + <addr>224.0.1.124</addr> + <description>Unassigned (Retracted 1/29/01)</description> + </record> + <record> + <addr>224.0.1.125</addr> + <description>PolyCom Relay1</description> + <xref type="text">[Coutiere]</xref> + </record> + <record date="1999-03-01"> + <addr>224.0.1.126</addr> + <description>Infront Multi1</description> + <xref type="person" data="Morten_Lindeman"/> + </record> + <record date="1999-03-01"> + <addr>224.0.1.127</addr> + <description>XRX DEVICE DISC</description> + <xref type="person" data="Michael_Wang"/> + </record> + <record date="1999-04-01"> + <addr>224.0.1.128</addr> + <description>CNN</description> + <xref type="person" data="Joel_Lynch"/> + </record> + <record date="2007-02-02" updated="2023-08-17"> + <addr>224.0.1.129</addr> + <description>PTP-primary</description> + <xref type="uri" data="https://www.nist.gov/el/intelligent-systems-division-73500/ordering-ieee-1588-standard-precision-clock-synchronization">NIST: IEEE Std 1588</xref> + <xref type="person" data="Kang_Lee"/> + </record> + <record date="2007-02-02" updated="2023-08-17"> + <addr>224.0.1.130</addr> + <description>PTP-alternate1</description> + <xref type="uri" data="https://www.nist.gov/el/intelligent-systems-division-73500/ordering-ieee-1588-standard-precision-clock-synchronization">NIST: IEEE Std 1588</xref> + <xref type="person" data="Kang_Lee"/> + </record> + <record date="2007-02-02" updated="2023-08-17"> + <addr>224.0.1.131</addr> + <description>PTP-alternate2</description> + <xref type="uri" data="https://www.nist.gov/el/intelligent-systems-division-73500/ordering-ieee-1588-standard-precision-clock-synchronization">NIST: IEEE Std 1588</xref> + <xref type="person" data="Kang_Lee"/> + </record> + <record date="2007-02-02" updated="2023-08-17"> + <addr>224.0.1.132</addr> + <description>PTP-alternate3</description> + <xref type="uri" data="https://www.nist.gov/el/intelligent-systems-division-73500/ordering-ieee-1588-standard-precision-clock-synchronization">NIST: IEEE Std 1588</xref> + <xref type="person" data="Kang_Lee"/> + </record> + <record date="1999-04-01"> + <addr>224.0.1.133</addr> + <description>ProCast</description> + <xref type="person" data="Shai_Revzen"/> + </record> + <record date="1999-04-01"> + <addr>224.0.1.134</addr> + <description>3Com Discp</description> + <xref type="person" data="Peter_White"/> + </record> + <record date="1999-05-01"> + <addr>224.0.1.135</addr> + <description>CS-Multicasting</description> + <xref type="person" data="Nedelcho_Stanev"/> + </record> + <record date="1999-06-01"> + <addr>224.0.1.136</addr> + <description>TS-MC-1</description> + <xref type="person" data="Darrell_Sveistrup"/> + </record> + <record date="1999-06-01"> + <addr>224.0.1.137</addr> + <description>Make Source</description> + <xref type="person" data="Anthony_Daga"/> + </record> + <record date="1999-06-01"> + <addr>224.0.1.138</addr> + <description>Teleborsa</description> + <xref type="person" data="Paolo_Strazzera"/> + </record> + <record date="1999-07-01"> + <addr>224.0.1.139</addr> + <description>SUMAConfig</description> + <xref type="person" data="Walter_Wallach"/> + </record> + <record> + <addr>224.0.1.140</addr> + <description>capwap-ac</description> + <xref type="rfc" data="rfc5415"/> + </record> + <record date="1999-10-01"> + <addr>224.0.1.141</addr> + <description>DHCP-SERVERS</description> + <xref type="person" data="Eric_Hall"/> + </record> + <record date="1999-08-01"> + <addr>224.0.1.142</addr> + <description>CN Router-LL</description> + <xref type="person" data="Ian_Armitage"/> + </record> + <record date="2008-02-04"> + <addr>224.0.1.143</addr> + <description>EMWIN</description> + <xref type="person" data="Antonio_Querubin"/> + </record> + <record date="1999-08-01"> + <addr>224.0.1.144</addr> + <description>Alchemy Cluster</description> + <xref type="person" data="Stacey_O_Rourke"/> + <xref type="person" data="Stacey_O_Rourke_2"/> + </record> + <record date="1999-08-01"> + <addr>224.0.1.145</addr> + <description>Satcast One</description> + <xref type="person" data="Julian_Nevell"/> + </record> + <record date="1999-08-01"> + <addr>224.0.1.146</addr> + <description>Satcast Two</description> + <xref type="person" data="Julian_Nevell"/> + </record> + <record date="1999-08-01"> + <addr>224.0.1.147</addr> + <description>Satcast Three</description> + <xref type="person" data="Julian_Nevell"/> + </record> + <record date="2000-02-01"> + <addr>224.0.1.148</addr> + <description>Intline</description> + <xref type="person" data="Robert_Sliwinski"/> + </record> + <record date="1999-09-01"> + <addr>224.0.1.149</addr> + <description>8x8 Multicast</description> + <xref type="person" data="Mike_Roper"/> + </record> + <record date="2019-03-13"> + <addr>224.0.1.150</addr> + <description>Ramp AltitudeCDN MulticastPlus</description> + <xref type="person" data="Giovanni_Marzot"/> + <controller><xref type="person" data="Ramp_Holdings"/></controller> + </record> + <record date="2000-02-01"> + <addr>224.0.1.151</addr> + <description>Intline-1</description> + <xref type="person" data="Robert_Sliwinski"/> + </record> + <record date="2000-02-01"> + <addr>224.0.1.152</addr> + <description>Intline-2</description> + <xref type="person" data="Robert_Sliwinski"/> + </record> + <record date="2000-02-01"> + <addr>224.0.1.153</addr> + <description>Intline-3</description> + <xref type="person" data="Robert_Sliwinski"/> + </record> + <record date="2000-02-01"> + <addr>224.0.1.154</addr> + <description>Intline-4</description> + <xref type="person" data="Robert_Sliwinski"/> + </record> + <record date="2000-02-01"> + <addr>224.0.1.155</addr> + <description>Intline-5</description> + <xref type="person" data="Robert_Sliwinski"/> + </record> + <record date="2000-02-01"> + <addr>224.0.1.156</addr> + <description>Intline-6</description> + <xref type="person" data="Robert_Sliwinski"/> + </record> + <record date="2000-02-01"> + <addr>224.0.1.157</addr> + <description>Intline-7</description> + <xref type="person" data="Robert_Sliwinski"/> + </record> + <record date="2000-02-01"> + <addr>224.0.1.158</addr> + <description>Intline-8</description> + <xref type="person" data="Robert_Sliwinski"/> + </record> + <record date="2000-02-01"> + <addr>224.0.1.159</addr> + <description>Intline-9</description> + <xref type="person" data="Robert_Sliwinski"/> + </record> + <record date="2000-02-01"> + <addr>224.0.1.160</addr> + <description>Intline-10</description> + <xref type="person" data="Robert_Sliwinski"/> + </record> + <record date="2000-02-01"> + <addr>224.0.1.161</addr> + <description>Intline-11</description> + <xref type="person" data="Robert_Sliwinski"/> + </record> + <record date="2000-02-01"> + <addr>224.0.1.162</addr> + <description>Intline-12</description> + <xref type="person" data="Robert_Sliwinski"/> + </record> + <record date="2000-02-01"> + <addr>224.0.1.163</addr> + <description>Intline-13</description> + <xref type="person" data="Robert_Sliwinski"/> + </record> + <record date="2000-02-01"> + <addr>224.0.1.164</addr> + <description>Intline-14</description> + <xref type="person" data="Robert_Sliwinski"/> + </record> + <record date="2000-02-01"> + <addr>224.0.1.165</addr> + <description>Intline-15</description> + <xref type="person" data="Robert_Sliwinski"/> + </record> + <record date="2000-02-01"> + <addr>224.0.1.166</addr> + <description>marratech-cc</description> + <xref type="person" data="Peter_Parnes"/> + </record> + <record date="2000-02-01"> + <addr>224.0.1.167</addr> + <description>EMS-InterDev</description> + <xref type="person" data="Stephen_T_Lyda"/> + </record> + <record date="2000-03-01"> + <addr>224.0.1.168</addr> + <description>itb301</description> + <xref type="person" data="Bodo_Rueskamp"/> + </record> + <record date="2000-07-01"> + <addr>224.0.1.169</addr> + <description>rtv-audio</description> + <xref type="person" data="Chris_Adams"/> + </record> + <record date="2000-07-01"> + <addr>224.0.1.170</addr> + <description>rtv-video</description> + <xref type="person" data="Chris_Adams"/> + </record> + <record date="2000-07-01"> + <addr>224.0.1.171</addr> + <description>HAVI-Sim</description> + <xref type="person" data="Stephan_Wasserroth"/> + </record> + <record date="1999-08-01"> + <addr>224.0.1.172</addr> + <description>Nokia Cluster</description> + <xref type="person" data="Stacey_O_Rourke"/> + <xref type="person" data="Stacey_O_Rourke_2"/> + </record> + <record date="2001-06-01"> + <addr>224.0.1.173</addr> + <description>host-request</description> + <xref type="person" data="Keith_Thompson"/> + </record> + <record date="2001-06-01"> + <addr>224.0.1.174</addr> + <description>host-announce</description> + <xref type="person" data="Keith_Thompson"/> + </record> + <record date="2001-12-01"> + <addr>224.0.1.175</addr> + <description>ptk-cluster</description> + <xref type="person" data="Robert_Hodgson"/> + </record> + <record date="2002-02-01"> + <addr>224.0.1.176</addr> + <description>Proxim Protocol</description> + <xref type="person" data="Gajendra_Shukla"/> + </record> + <record date="2002-10-01"> + <addr>224.0.1.177</addr> + <description>Gemtek Systems</description> + <xref type="person" data="Alex_Lee"/> + </record> + <record date="2003-01-01"> + <addr>224.0.1.178</addr> + <description>IEEE IAPP</description> + <xref type="person" data="Stuart_Kerry"/> + </record> + <record date="2006-04-11"> + <addr>224.0.1.179</addr> + <description>1451_Dot5_802_Discovery</description> + <xref type="person" data="Ryon_Coleman"/> + </record> + <record date="2006-04-11"> + <addr>224.0.1.180</addr> + <description>1451_Dot5_802_Group_1</description> + <xref type="person" data="Ryon_Coleman"/> + </record> + <record date="2006-04-11"> + <addr>224.0.1.181</addr> + <description>1451_Dot5_802_Group_2</description> + <xref type="person" data="Ryon_Coleman"/> + </record> + <record date="2006-04-11"> + <addr>224.0.1.182</addr> + <description>1451_Dot5_802_Group_3</description> + <xref type="person" data="Ryon_Coleman"/> + </record> + <record date="2006-04-11"> + <addr>224.0.1.183</addr> + <description>1451_Dot5_802_Group_4</description> + <xref type="person" data="Ryon_Coleman"/> + </record> + <record date="2007-03-06"> + <addr>224.0.1.184</addr> + <description>VFSDP</description> + <xref type="person" data="Adam_Yellen"/> + </record> + <record> + <addr>224.0.1.185</addr> + <description>ASAP</description> + <xref type="rfc" data="rfc5352"/> + </record> + <record> + <addr>224.0.1.186</addr> + <description>SL-MANET-ROUTERS</description> + <xref type="rfc" data="rfc6621"/> + </record> + <record date="2013-07-25"> + <addr>224.0.1.187</addr> + <description>All CoAP Nodes</description> + <xref type="rfc" data="rfc7252"/> + </record> + <record date="2019-02-20"> + <addr>224.0.1.188</addr> + <description>BRSDP</description> + <xref type="person" data="Vanya_Levy"/> + <controller><xref type="person" data="Semtech_Corporation"/></controller> + </record> + <record date="2021-02-08"> + <addr>224.0.1.189</addr> + <description>Amateur radio DMR</description> + <xref type="uri" data="https://www.etsi.org/deliver/etsi_TS/102300_102399/10236103/01.03.01_60/ts_10236103v010301p.pdf">ETSI TS 102 361-3</xref> + <xref type="person" data="Jean-Marc_MAGNIER"/> + <controller><xref type="person" data="Jean-Marc_MAGNIER"/></controller> + </record> + <record date="2021-03-16"> + <addr>224.0.1.190</addr> + <description>All CoRE Resource Directories</description> + <xref type="rfc" data="rfc9176"/> + </record> + <record> + <addr>224.0.1.191-224.0.1.255</addr> + <description>Unassigned</description> + </record> + </registry> + + + <registry id="multicast-addresses-3"> + <title>AD-HOC Block I (224.0.2.0 - 224.0.255.255)</title> + <xref type="rfc" data="rfc5771"/> + <registration_rule>Expert Review, IESG Approval, or Standards Action</registration_rule> + <note title="Request an Assignment"> +<xref type="uri" data="https://www.iana.org/protocols/apply"/> + + </note> + <record> + <addr>224.0.2.0</addr> + + <description>Unassigned</description> + </record> + <record> + <addr>224.0.2.1</addr> + <description>"rwho" Group (BSD) (unofficial)</description> + <xref type="person" data="Jon_Postel"/> + </record> + <record> + <addr>224.0.2.2</addr> + <description>SUN RPC PMAPPROC_CALLIT</description> + <xref type="person" data="Brendan_Eic"/> + </record> + <record date="2005-01-01"> + <addr>224.0.2.3</addr> + <description>EPSON-disc-set</description> + <xref type="person" data="SEIKO_EPSON_Corp"/> + </record> + <record date="2009-08-28"> + <addr>224.0.2.4</addr> + <description>All C1222 Nodes</description> + <xref type="rfc" data="rfc6142"/> + </record> + <record date="2012-04-17"> + <addr>224.0.2.5</addr> + <description>Monitoring Discovery Protocol</description> + <xref type="person" data="Alan_Robertson"/> + </record> + <record date="2012-04-25"> + <addr>224.0.2.6</addr> + <description>BitSend MediaStreams</description> + <xref type="person" data="Carl-Johan_Sjöberg"/> + </record> + <record date="2012-11-19"> + <addr>224.0.2.7-224.0.2.8</addr> + <description>rxWARN</description> + <xref type="person" data="Caleb_Bell"/> + </record> + <record date="2016-10-04"> + <addr>224.0.2.9</addr> + <description>DATV streams</description> + <xref type="person" data="Grant_Taylor"/> + </record> + <record date="2017-05-19"> + <addr>224.0.2.10</addr> + <description>swapapp_multicast</description> + <xref type="person" data="Applykane"/> + </record> + <record date="2018-10-17"> + <addr>224.0.2.11</addr> + <description>LDA Discovery Service</description> + <xref type="person" data="Juan_Ayas"/> + <controller><xref type="person" data="LDA_Audio_Tech"/></controller> + </record> + <record date="2018-11-15"> + <addr>224.0.2.12</addr> + <description>CNP-HD-PLC</description> + <xref type="person" data="Ernst_EDER"/> + <controller><xref type="person" data="LonMark_International"/></controller> + </record> + <record date="2019-01-17"> + <addr>224.0.2.13</addr> + <description>BSE</description> + <xref type="person" data="Rami_Chalhoub"/> + <controller><xref type="person" data="BSE"/></controller> + </record> + <record date="2019-08-19"> + <addr>224.0.2.14</addr> + <description>OPC Discovery</description> + <xref type="person" data="OPC_Foundation"/> + <controller><xref type="person" data="OPC_Foundation"/></controller> + </record> + <record date="2023-06-09"> + <addr>224.0.2.15</addr> + <description>MRFLabbing (expires 2024-06-09)</description> + <xref type="person" data="Mohammed_Raoof_Fadda"/> + <controller><xref type="person" data="Mohammed_Raoof_Fadda"/></controller> + </record> + <record date="2023-01-18"> + <addr>224.0.2.16-224.0.2.17</addr> + <description>unidns</description> + <xref type="person" data="Xie_Shao"/> + <controller><xref type="person" data="Xie_Shao"/></controller> + </record> + <record date="2023-10-13" updated="2023-10-16"> + <addr>224.0.2.18</addr> + <description>vivoh-directory-1</description> + <xref type="person" data="Giovanni_Marzot_2"/> + <controller> + <xref type="person" data="Vivoh"/> + </controller> + </record> + <record date="2023-10-13" updated="2023-10-16"> + <addr>224.0.2.19</addr> + <description>vivoh-directory-2</description> + <xref type="person" data="Giovanni_Marzot_2"/> + <controller> + <xref type="person" data="Vivoh"/> + </controller> + </record> + <record> + <addr>224.0.2.20-224.0.2.63</addr> + <description>Unassigned</description> + </record> + <record date="1996-04" updated="2018-04-20"> + <addr>224.0.2.64-224.0.2.95</addr> + <description>Intercontinental Exchange, Inc.</description> + <xref type="person" data="RIR_Admin"/> + <controller> + <xref type="person" data="Intercontinental_Exchange_Inc."/> + </controller> + <reviewed>2007-07</reviewed> + </record> + <record date="1997-07-01"> + <addr>224.0.2.96-224.0.2.127</addr> + <description>BallisterNet</description> + <xref type="person" data="Tom_Ballister"/> + <controller> + <xref type="person" data="Tom_Ballister"/> + </controller> + <reviewed>2021-06-11</reviewed> + </record> + <record date="1997-02-01"> + <addr>224.0.2.128-224.0.2.191</addr> + <description>WOZ-Garage</description> + <xref type="person" data="Douglas_Marquardt"/> + </record> + <record date="1997-02-01" updated="2018-04-20"> + <addr>224.0.2.192-224.0.2.255</addr> + <description>Intercontinental Exchange, Inc.</description> + <xref type="person" data="RIR_Admin"/> + <controller> + <xref type="person" data="Intercontinental_Exchange_Inc."/> + </controller> + </record> + <record> + <addr>224.0.3.0-224.0.3.255</addr> + <description>RFE Generic Service</description> + <xref type="person" data="Daniel_Steinber"/> + </record> + <record> + <addr>224.0.4.0-224.0.4.255</addr> + <description>RFE Individual Conferences</description> + <xref type="person" data="Daniel_Steinber"/> + </record> + <record> + <addr>224.0.5.0-224.0.5.127</addr> + <description>CDPD Groups</description> + <xref type="text">[Bob Brenner]</xref> + </record> + <record date="1998-10-01" updated="2018-04-20"> + <addr>224.0.5.128-224.0.5.191</addr> + <description>Intercontinental Exchange, Inc.</description> + <xref type="person" data="RIR_Admin"/> + <controller> + <xref type="person" data="Intercontinental_Exchange_Inc."/> + </controller> + </record> + <record date="2001-08-01" updated="2018-04-20"> + <addr>224.0.5.192-224.0.5.255</addr> + <description>Intercontinental Exchange, Inc.</description> + <xref type="person" data="RIR_Admin"/> + <controller> + <xref type="person" data="Intercontinental_Exchange_Inc."/> + </controller> + </record> + <record> + <addr>224.0.6.0-224.0.6.127</addr> + <description>Cornell ISIS Project</description> + <xref type="text">[Tim Clark]</xref> + </record> + <record date="2009-09-24"> + <addr>224.0.6.128-224.0.6.143</addr> + <description>MoeSingh</description> + <xref type="person" data="Moe_Singh"/> + </record> + <record date="2018-01-03" updated="2018-01-31"> + <addr>224.0.6.144</addr> + <description>QDNE</description> + <xref type="person" data="Architecture_Team"/> + </record> + <record> + <addr>224.0.6.145-224.0.6.150</addr> + <description>Unassigned</description> + </record> + <record date="2014-08-01"> + <addr>224.0.6.151</addr> + <description>Canon-Device-control</description> + <xref type="person" data="Hiroshi_Okubo"/> + </record> + <record> + <addr>224.0.6.152-224.0.6.191</addr> + <description>Unassigned</description> + </record> + <record date="2014-09-19"> + <addr>224.0.6.192-224.0.6.255</addr> + <description>OneChicago multicast</description> + <xref type="person" data="Brian_Trudeau"/> + </record> + <record date="1994-11-01"> + <addr>224.0.7.0-224.0.7.255</addr> + <description>Where-Are-You</description> + <xref type="person" data="Bill_Simpson"/> + </record> + <record date="2017-10-13" updated="2020-10-07"> + <addr>224.0.8.0</addr> + <description>Cell Broadcast Encapsulation</description> + <xref type="person" data="Meridian_Labs_LTD"/> + <xref type="person" data="LIRNEasia"/> + <controller> + <xref type="person" data="Meridian_Labs_LTD"/> + <xref type="person" data="LIRNEasia"/> + </controller> + </record> + <record date="2020-10-07"> + <addr>224.0.8.1-224.0.8.255</addr> + <description>Civic Telemetry</description> + <xref type="person" data="Meridian_Labs_LTD"/> + <xref type="person" data="LIRNEasia"/> + <controller> + <xref type="person" data="Meridian_Labs_LTD"/> + <xref type="person" data="LIRNEasia"/> + </controller> + </record> + <record date="1998-04-01"> + <addr>224.0.9.0-224.0.9.255</addr> + <description>The Thing System</description> + <xref type="person" data="Carl_Malamud"/> + </record> + <record date="1996-04-01"> + <addr>224.0.10.0-224.0.10.255</addr> + <description>DLSw Groups</description> + <xref type="person" data="Choon_Lee"/> + </record> + <record date="1996-08-01"> + <addr>224.0.11.0-224.0.11.255</addr> + <description>NCC.NET Audio</description> + <xref type="person" data="David_Rubin"/> + </record> + <record date="1996-11-01"> + <addr>224.0.12.0-224.0.12.63</addr> + <description>Microsoft and MSNBC</description> + <xref type="person" data="Tom_Blank"/> + </record> + <record date="2023-03-03" updated="2023-03-06"> + <addr>224.0.12.64-224.0.12.135</addr> + <description>AsiaNext</description> + <xref type="person" data="Lau_Wei_Lun"/> + <controller> + <xref type="person" data="Asia_Digital_Exchange"/> + </controller> + </record> + <record> + <addr>224.0.12.136-224.0.12.255</addr> + <description>Unassigned</description> + </record> + <record date="1997-01-01"> + <addr>224.0.13.0-224.0.13.255</addr> + <description>WorldCom Broadcast Services</description> + <xref type="person" data="Tony_Barber"/> + </record> + <record date="1997-02-01"> + <addr>224.0.14.0-224.0.14.255</addr> + <description>NLANR</description> + <xref type="person" data="Duane_Wessels"/> + </record> + <record date="1997-02-01" updated="2015-10-12"> + <addr>224.0.15.0-224.0.15.255</addr> + <description>Agilent Technologies</description> + <xref type="person" data="IP_Admin"/> + </record> + <record date="1997-04-01"> + <addr>224.0.16.0-224.0.16.255</addr> + <description>XingNet</description> + <xref type="person" data="Mika_Uusitalo"/> + </record> + <record date="1997-07-01"> + <addr>224.0.17.0-224.0.17.31</addr> + <description>Mercantile & Commodity Exchange</description> + <xref type="person" data="Asad_Gilani"/> + </record> + <record date="1999-03-01"> + <addr>224.0.17.32-224.0.17.63</addr> + <description>NDQMD1</description> + <xref type="person" data="Michael_Rosenberg"/> + </record> + <record date="1999-03-01"> + <addr>224.0.17.64-224.0.17.127</addr> + <description>ODN-DTV</description> + <xref type="person" data="Richard_Hodges"/> + </record> + <record> + <addr>224.0.17.128-224.0.17.255</addr> + <description>Unassigned</description> + </record> + <record date="1997-01-01"> + <addr>224.0.18.0-224.0.18.255</addr> + <description>Dow Jones</description> + <xref type="person" data="Wenjie_Peng"/> + </record> + <record date="1997-08-01"> + <addr>224.0.19.0-224.0.19.63</addr> + <description>Walt Disney Company</description> + <xref type="person" data="Scott_Watson"/> + </record> + <record date="1997-10-01"> + <addr>224.0.19.64-224.0.19.95</addr> + <description>Cal Multicast</description> + <xref type="person" data="Ed_Moran"/> + </record> + <record date="1997-10" updated="2018-04-20"> + <addr>224.0.19.96-224.0.19.127</addr> + <description>Intercontinental Exchange, Inc.</description> + <xref type="person" data="RIR_Admin"/> + <controller> + <xref type="person" data="Intercontinental_Exchange_Inc."/> + </controller> + <reviewed>2007-07</reviewed> + </record> + <record date="1997-12-01"> + <addr>224.0.19.128-224.0.19.191</addr> + <description>IIG Multicast</description> + <xref type="person" data="Wayne_Carr"/> + </record> + <record date="1998-05-01"> + <addr>224.0.19.192-224.0.19.207</addr> + <description>Metropol</description> + <xref type="person" data="James_Crawford"/> + </record> + <record date="1998-07-01"> + <addr>224.0.19.208-224.0.19.239</addr> + <description>Xenoscience, Inc.</description> + <xref type="person" data="Mary_Timm"/> + </record> + <record date="2007-03-01"> + <addr>224.0.19.240-224.0.19.255</addr> + <description>MJDPM</description> + <xref type="person" data="Matthew_Straight"/> + </record> + <record date="1998-07-01"> + <addr>224.0.20.0-224.0.20.63</addr> + <description>MS-IP/TV</description> + <xref type="person" data="Tony_Wong"/> + </record> + <record date="1998-08-01"> + <addr>224.0.20.64-224.0.20.127</addr> + <description>Reliable Network Solutions</description> + <xref type="person" data="Werner_Vogels"/> + </record> + <record date="1998-08-01"> + <addr>224.0.20.128-224.0.20.143</addr> + <description>TRACKTICKER Group</description> + <xref type="person" data="Alan_Novick"/> + </record> + <record date="1999-08-01"> + <addr>224.0.20.144-224.0.20.207</addr> + <description>CNR Rebroadcast MCA</description> + <xref type="person" data="Robert_Sautter"/> + </record> + <record> + <addr>224.0.20.208-224.0.20.255</addr> + <description>Unassigned</description> + </record> + <record date="1999-01-01"> + <addr>224.0.21.0-224.0.21.127</addr> + <description>Talarian MCAST</description> + <xref type="person" data="Geoff_Mendal"/> + </record> + <record> + <addr>224.0.21.128-224.0.21.255</addr> + <description>Unassigned</description> + </record> + <record date="1999-06-01"> + <addr>224.0.22.0-224.0.22.239</addr> + <description>WORLD MCAST</description> + <xref type="person" data="Ian_Stewart"/> + </record> + <record date="2007-10-31"> + <addr>224.0.22.240-224.0.22.255</addr> + <description>Jones International</description> + <xref type="person" data="Jim_Ginsburg"/> + </record> + <record date="2003-02-01"> + <addr>224.0.23.0</addr> + <description>ECHONET</description> + <xref type="person" data="Takeshi_Saito"/> + </record> + <record date="2003-02-01"> + <addr>224.0.23.1</addr> + <description>Ricoh-device-ctrl</description> + <xref type="person" data="Akihiro_Nishida"/> + </record> + <record date="2003-02-01"> + <addr>224.0.23.2</addr> + <description>Ricoh-device-ctrl</description> + <xref type="person" data="Akihiro_Nishida"/> + </record> + <record date="2003-04-01"> + <addr>224.0.23.3-224.0.23.10</addr> + <description>Telefeed</description> + <xref type="person" data="Wally_Beddoe"/> + </record> + <record date="2003-05-01"> + <addr>224.0.23.11</addr> + <description>SpectraTalk</description> + <xref type="person" data="Madhav_Karhade"/> + </record> + <record date="2003-07-01" updated="2023-08-23"> + <addr>224.0.23.12</addr> + <description>KNXnet/IP</description> + <xref type="person" data="Joost_Demarest"/> + <controller> + <xref type="person" data="KNX_Association"/> + </controller> + <reviewed>2023-08-23</reviewed> + </record> + <record date="2003-10-01"> + <addr>224.0.23.13</addr> + <description>TVE-ANNOUNCE2</description> + <xref type="person" data="Michael_Dolan"/> + </record> + <record date="2004-01-01"> + <addr>224.0.23.14</addr> + <description>DvbServDisc</description> + <xref type="person" data="Bert_van_Willigen"/> + </record> + <record date="2007-03-01"> + <addr>224.0.23.15-224.0.23.31</addr> + <description>MJDPM</description> + <xref type="person" data="Matthew_Straight"/> + </record> + <record date="2004-02-01"> + <addr>224.0.23.32</addr> + <description>Norman MCMP</description> + <xref type="person" data="Kristian_A_Bognaes"/> + </record> + <record date="2004-06-01"> + <addr>224.0.23.33</addr> + <description>RRDP</description> + <xref type="person" data="Tetsuo_Hoshi"/> + </record> + <record date="2005-10-28"> + <addr>224.0.23.34</addr> + <description>AF_NA</description> + <xref type="person" data="Bob_Brzezinski"/> + </record> + <record date="2005-10-28"> + <addr>224.0.23.35</addr> + <description>AF_OPRA_NBBO</description> + <xref type="person" data="Bob_Brzezinski"/> + </record> + <record date="2005-10-28"> + <addr>224.0.23.36</addr> + <description>AF_OPRA_FULL</description> + <xref type="person" data="Bob_Brzezinski"/> + </record> + <record date="2005-10-28"> + <addr>224.0.23.37</addr> + <description>AF_NEWS</description> + <xref type="person" data="Bob_Brzezinski"/> + </record> + <record date="2005-10-28"> + <addr>224.0.23.38</addr> + <description>AF_NA_CHI</description> + <xref type="person" data="Bob_Brzezinski"/> + </record> + <record date="2005-10-28"> + <addr>224.0.23.39</addr> + <description>AF_OPRA_NBBO_CHI</description> + <xref type="person" data="Bob_Brzezinski"/> + </record> + <record date="2005-10-28"> + <addr>224.0.23.40</addr> + <description>AF_OPRA_FULL_CHI</description> + <xref type="person" data="Bob_Brzezinski"/> + </record> + <record date="2005-10-28"> + <addr>224.0.23.41</addr> + <description>AF_NEWS_CHI</description> + <xref type="person" data="Bob_Brzezinski"/> + </record> + <record date="2005-02-01"> + <addr>224.0.23.42</addr> + <description>Control for IP Video</description> + <xref type="person" data="Nadine_Guillaume"/> + </record> + <record date="2005-02-01"> + <addr>224.0.23.43</addr> + <description>acp-discovery</description> + <xref type="person" data="Andy_Belk"/> + </record> + <record date="2005-02-01"> + <addr>224.0.23.44</addr> + <description>acp-management</description> + <xref type="person" data="Andy_Belk"/> + </record> + <record date="2005-02-01"> + <addr>224.0.23.45</addr> + <description>acp-data</description> + <xref type="person" data="Andy_Belk"/> + </record> + <record date="2006-06-16" updated="2015-04-23"> + <addr>224.0.23.46</addr> + <description>dof-multicast</description> + <xref type="person" data="Bryant_Eastham"/> + <reviewed>2015-04-23</reviewed> + </record> + <record date="2005-10-28"> + <addr>224.0.23.47</addr> + <description>AF_DOB_CHI</description> + <xref type="person" data="Bob_Brzezinski"/> + </record> + <record date="2005-10-28"> + <addr>224.0.23.48</addr> + <description>AF_OPRA_FULL2_CHI</description> + <xref type="person" data="Bob_Brzezinski"/> + </record> + <record date="2005-10-28"> + <addr>224.0.23.49</addr> + <description>AF_DOB</description> + <xref type="person" data="Bob_Brzezinski"/> + </record> + <record date="2005-10-28"> + <addr>224.0.23.50</addr> + <description>AF_OPRA_FULL2</description> + <xref type="person" data="Bob_Brzezinski"/> + </record> + <record date="2006-08-07"> + <addr>224.0.23.51</addr> + <description>Fairview</description> + <xref type="person" data="Jim_Lyle"/> + </record> + <record date="2006-08-11" updated="2018-04-20"> + <addr>224.0.23.52</addr> + <description>Intercontinental Exchange, Inc.</description> + <xref type="person" data="RIR_Admin"/> + <controller> + <xref type="person" data="Intercontinental_Exchange_Inc."/> + </controller> + </record> + <record date="2006-11-30"> + <addr>224.0.23.53</addr> + <description>MCP</description> + <xref type="person" data="Tim_DeBaillie"/> + </record> + <record date="2007-01-17"> + <addr>224.0.23.54</addr> + <description>ServDiscovery</description> + <xref type="person" data="Paul_Langille"/> + </record> + <record date="2008-02-04"> + <addr>224.0.23.55</addr> + <description>noaaport1</description> + <xref type="person" data="Antonio_Querubin"/> + </record> + <record date="2008-02-04"> + <addr>224.0.23.56</addr> + <description>noaaport2</description> + <xref type="person" data="Antonio_Querubin"/> + </record> + <record date="2008-02-04"> + <addr>224.0.23.57</addr> + <description>noaaport3</description> + <xref type="person" data="Antonio_Querubin"/> + </record> + <record date="2008-02-04"> + <addr>224.0.23.58</addr> + <description>noaaport4</description> + <xref type="person" data="Antonio_Querubin"/> + </record> + <record date="2008-02-22"> + <addr>224.0.23.59</addr> + <description>DigacIP7</description> + <xref type="person" data="Jonathan_Niedfeldt"/> + </record> + <record date="2008-12-19"> + <addr>224.0.23.60</addr> + <description>AtscSvcSig</description> + <xref type="person" data="Jerry_Whitaker"/> + </record> + <record date="2009-03-13"> + <addr>224.0.23.61</addr> + <description>SafetyNET p (potentially IGMPv1)</description> + <xref type="person" data="Pilz"/> + </record> + <record date="2009-05-12"> + <addr>224.0.23.62</addr> + <description>BluemoonGamesMC</description> + <xref type="person" data="Christopher_Mettin"/> + </record> + <record date="2009-05-12"> + <addr>224.0.23.63</addr> + <description>iADT Discovery</description> + <xref type="person" data="Paul_Suhler"/> + </record> + <record date="2004-01-01"> + <addr>224.0.23.64-224.0.23.80</addr> + <description>Moneyline</description> + <xref type="person" data="Guido_Petronio"/> + </record> + <record> + <addr>224.0.23.81-224.0.23.127</addr> + <description>Reserved (Moneyline)</description> + </record> + <record date="2004-01-01"> + <addr>224.0.23.128-224.0.23.157</addr> + <description>PHLX</description> + <xref type="person" data="Michael_Rosenberg"/> + </record> + <record date="2005-09-01"> + <addr>224.0.23.158</addr> + <description>VSCP</description> + <xref type="person" data="Charles_Tewiah"/> + </record> + <record date="2005-11-04"> + <addr>224.0.23.159</addr> + <description>LXI-EVENT</description> + <xref type="person" data="Nick_Barendt"/> + </record> + <record date="2006-02-09"> + <addr>224.0.23.160</addr> + <description>solera_lmca</description> + <xref type="person" data="Mark_Armstrong"/> + </record> + <record date="2006-03-17"> + <addr>224.0.23.161</addr> + <description>VBooster</description> + <xref type="person" data="Alexander_Pevzner"/> + </record> + <record date="2006-03-17"> + <addr>224.0.23.162</addr> + <description>cajo discovery</description> + <xref type="person" data="John_Catherino"/> + </record> + <record date="2006-03-31"> + <addr>224.0.23.163</addr> + <description>INTELLIDEN</description> + <xref type="person" data="Jeff_Schenk"/> + </record> + <record date="2006-07-11"> + <addr>224.0.23.164</addr> + <description>IceEDCP</description> + <xref type="person" data="Oliver_Lewis"/> + </record> + <record date="2006-07-11"> + <addr>224.0.23.165</addr> + <description>omasg</description> + <xref type="person" data="Mark_Lipford"/> + </record> + <record date="2006-08-15"> + <addr>224.0.23.166</addr> + <description>MEDIASTREAM</description> + <xref type="person" data="Maurice_Robberson"/> + </record> + <record date="2006-08-21"> + <addr>224.0.23.167</addr> + <description>Systech Mcast</description> + <xref type="person" data="Dan_Jakubiec"/> + </record> + <record date="2007-07-06"> + <addr>224.0.23.168</addr> + <description>tricon-system-management</description> + <xref type="person" data="John_Gabler"/> + </record> + <record date="2008-01-14"> + <addr>224.0.23.169</addr> + <description>MNET discovery</description> + <xref type="person" data="Andy_Crick"/> + </record> + <record date="2009-09-24"> + <addr>224.0.23.170</addr> + <description>CCNx (not for global routing)</description> + <xref type="person" data="Simon_Barber"/> + </record> + <record date="2009-11-11"> + <addr>224.0.23.171</addr> + <description>LLAFP</description> + <xref type="person" data="Michael_Lyle"/> + </record> + <record date="2010-02-04" updated="2019-07-01"> + <addr>224.0.23.172</addr> + <description>UFMP</description> + <xref type="person" data="Shachar_Dor"/> + <controller> + <xref type="person" data="Mellanox"/> + </controller> + </record> + <record date="2010-02-26" updated="2019-02-07"> + <addr>224.0.23.173</addr> + <description>PHILIPS-HEALTH</description> + <xref type="person" data="Mike_King"/> + <controller><xref type="person" data="Philips_Healthcare"/></controller> + </record> + <record date="2010-02-26" updated="2019-02-07"> + <addr>224.0.23.174</addr> + <description>PHILIPS-HEALTH</description> + <xref type="person" data="Mike_King"/> + <controller><xref type="person" data="Philips_Healthcare"/></controller> + </record> + <record date="2010-03-12"> + <addr>224.0.23.175</addr> + <description>QDP</description> + <xref type="person" data="Kevin_Gross"/> + </record> + <record date="2011-06-06"> + <addr>224.0.23.176</addr> + <description>CalAmp WCP</description> + <xref type="person" data="Pierre_Oliver"/> + </record> + <record date="2012-08-28"> + <addr>224.0.23.177</addr> + <description>AES discovery</description> + <xref type="person" data="Kevin_Gross_2"/> + </record> + <record date="2013-02-08"> + <addr>224.0.23.178</addr> + <description>JDP Java Discovery Protocol</description> + <xref type="person" data="Florian_Weimer"/> + </record> + <record date="2014-06-04"> + <addr>224.0.23.179</addr> + <description>PixelPusher</description> + <xref type="person" data="Jasmine_Strong"/> + </record> + <record date="2014-12-17"> + <addr>224.0.23.180</addr> + <description>network metronome</description> + <xref type="person" data="George_Neville-Neil"/> + </record> + <record date="2016-04-19"> + <addr>224.0.23.181</addr> + <description>polaris-video-transport</description> + <xref type="person" data="Geoff_Golder"/> + </record> + <record> + <addr>224.0.23.182-224.0.23.191</addr> + <description>Unassigned</description> + </record> + <record date="2008-08-12"> + <addr>224.0.23.192-224.0.23.255</addr> + <description>PINKOTC</description> + <xref type="person" data="Sergey_Shulgin"/> + </record> + <record date="2006-06-09"> + <addr>224.0.24.0-224.0.24.127</addr> + <description>AGSC UK VVs</description> + <xref type="person" data="Andrew_Rowley"/> + </record> + <record date="2006-08-07"> + <addr>224.0.24.128-224.0.24.255</addr> + <description>EM-MULTI</description> + <xref type="person" data="Soren_Martin_Sorensen"/> + </record> + <record date="2007-03-22"> + <addr>224.0.25.0-224.0.28.255</addr> + <description>CME Market Data</description> + <xref type="person" data="Sarunas_Brakauskas"/> + </record> + <record date="2007-03-22"> + <addr>224.0.29.0-224.0.30.255</addr> + <description>Deutsche Boerse</description> + <xref type="person" data="Jan_Drwal"/> + </record> + <record date="2007-07-17"> + <addr>224.0.31.0-224.0.34.255</addr> + <description>CME Market Data</description> + <xref type="person" data="Sarunas_Brakauskas"/> + </record> + <record date="2007-08-31"> + <addr>224.0.35.0-224.0.35.255</addr> + <description>M2S</description> + <xref type="person" data="Itamar_Gilad"/> + </record> + <record date="2016-09-29"> + <addr>224.0.36.0-224.0.36.255</addr> + <description>DigiPlay</description> + <xref type="person" data="Robert_Taylor"/> + </record> + <record date="2017-03-24" updated="2023-04-27"> + <addr>224.0.37.0-224.0.38.255</addr> + <description>London Metal Exchange</description> + <xref type="person" data="LME_Networks"/> + <controller> + <xref type="person" data="London_Metal_Exchange"/> + </controller> + </record> + <record date="2007-09-12"> + <addr>224.0.39.0-224.0.40.255</addr> + <description>CDAS</description> + <xref type="person" data="Oyvind_H_Olsen"/> + </record> + <record date="2007-11-28" updated="2018-04-20"> + <addr>224.0.41.0-224.0.41.255</addr> + <description>Intercontinental Exchange, Inc.</description> + <xref type="person" data="RIR_Admin"/> + <controller> + <xref type="person" data="Intercontinental_Exchange_Inc."/> + </controller> + <reviewed>2011-02-15</reviewed> + </record> + <record date="2008-01-15" updated="2021-10-22"> + <addr>224.0.42.0-224.0.45.255</addr> + <description>Media Systems</description> + <xref type="person" data="Media_Systems_OOO"/> + <controller><xref type="person" data="Media_Systems_OOO"/></controller> + </record> + <record date="2008-01-25"> + <addr>224.0.46.0-224.0.50.255</addr> + <description>Deutsche Boerse</description> + <xref type="person" data="Jan_Drwal"/> + </record> + <record date="2008-04-09" updated="2018-02-20"> + <addr>224.0.51.0-224.0.51.255</addr> + <description>ALCOM-IPTV</description> + <xref type="person" data="TV_System_Administrators"/> + <controller><xref type="person" data="Ålands_Telekommunikation_Ab"/></controller> + <reviewed>2018-02-20</reviewed> + </record> + <record date="2008-07-23" updated="2021-04-14"> + <addr>224.0.52.0-224.0.53.255</addr> + <description>Euronext</description> + <xref type="person" data="Euronext_Admin"/> + <controller><xref type="person" data="Euronext_Admin"/></controller> + <reviewed>2014-11-24</reviewed> + </record> + <record date="2008-08-20" updated="2019-08-29"> + <addr>224.0.54.0-224.0.57.255</addr> + <description>Telia Norway mcast</description> + <xref type="person" data="Henrik_Lans"/> + <controller> + <xref type="person" data="Telia-Norway-Get-NOC"/> + </controller> + </record> + <record date="2008-08-27" updated="2018-04-20"> + <addr>224.0.58.0-224.0.61.255</addr> + <description>Intercontinental Exchange, Inc.</description> + <xref type="person" data="RIR_Admin"/> + <controller> + <xref type="person" data="Intercontinental_Exchange_Inc."/> + </controller> + </record> + <record date="2008-12-24"> + <addr>224.0.62.0-224.0.62.255</addr> + <description>BATS</description> + <xref type="person" data="Andrew_Brown"/> + </record> + <record date="2009-03-13"> + <addr>224.0.63.0-224.0.63.255</addr> + <description>BATS Trading</description> + <xref type="person" data="Tim_Gorsline"/> + </record> + <record date="2009-03-13" updated="2021-04-14"> + <addr>224.0.64.0-224.0.67.255</addr> + <description>Euronext</description> + <xref type="person" data="Euronext_Admin"/> + <controller><xref type="person" data="Euronext_Admin"/></controller> + <reviewed>2014-11-24</reviewed> + </record> + <record date="2009-05-12" updated="2016-05-06"> + <addr>224.0.68.0-224.0.69.255</addr> + <description>ISE</description> + <xref type="person" data="ISE-Networks"/> + </record> + <record date="2009-06-16" updated="2018-04-20"> + <addr>224.0.70.0-224.0.71.255</addr> + <description>Intercontinental Exchange, Inc.</description> + <xref type="person" data="RIR_Admin"/> + <controller> + <xref type="person" data="Intercontinental_Exchange_Inc."/> + </controller> + <reviewed>2011-03-01</reviewed> + </record> + <record date="2009-08-28" updated="2023-04-14"> + <addr>224.0.72.0-224.0.72.255</addr> + <description>TMX</description> + <xref type="person" data="TMX_Network_Engineering"/> + <controller> + <xref type="person" data="TMX"/> + </controller> + </record> + <record date="2009-08-28"> + <addr>224.0.73.0-224.0.74.255</addr> + <description>Direct Edge</description> + <xref type="person" data="Javier_Landin"/> + </record> + <record date="2010-01-22" updated="2016-05-06"> + <addr>224.0.75.0-224.0.75.255</addr> + <description>ISE</description> + <xref type="person" data="ISE-Networks"/> + </record> + <record date="2010-02-26" updated="2018-04-20"> + <addr>224.0.76.0-224.0.76.255</addr> + <description>Intercontinental Exchange, Inc.</description> + <xref type="person" data="RIR_Admin"/> + <controller> + <xref type="person" data="Intercontinental_Exchange_Inc."/> + </controller> + <reviewed>2011-03-01</reviewed> + </record> + <record date="2010-02-26" updated="2018-04-20"> + <addr>224.0.77.0-224.0.77.255</addr> + <description>Intercontinental Exchange, Inc.</description> + <xref type="person" data="RIR_Admin"/> + <controller> + <xref type="person" data="Intercontinental_Exchange_Inc."/> + </controller> + </record> + <record date="2010-03-12" updated="2018-02-20"> + <addr>224.0.78.0-224.0.78.255</addr> + <description>ALCOM-IPTV</description> + <xref type="person" data="TV_System_Administrators"/> + <controller><xref type="person" data="Ålands_Telekommunikation_Ab"/></controller> + <reviewed>2018-02-20</reviewed> + </record> + <record date="2010-08-24" updated="2016-05-06"> + <addr>224.0.79.0-224.0.81.255</addr> + <description>ISE</description> + <xref type="person" data="ISE-Networks"/> + </record> + <record date="2011-01-31" updated="2017-06-23"> + <addr>224.0.82.0-224.0.85.255</addr> + <description>BATS Trading</description> + <xref type="person" data="BATS_Europe_NOC"/> + </record> + <record date="2011-02-10" updated="2018-04-20"> + <addr>224.0.86.0-224.0.101.255</addr> + <description>Intercontinental Exchange, Inc.</description> + <xref type="person" data="RIR_Admin"/> + <controller> + <xref type="person" data="Intercontinental_Exchange_Inc."/> + </controller> + </record> + <record date="2011-04-13" updated="2018-04-20"> + <addr>224.0.102.0-224.0.102.127</addr> + <description>Intercontinental Exchange, Inc.</description> + <xref type="person" data="RIR_Admin"/> + <controller> + <xref type="person" data="Intercontinental_Exchange_Inc."/> + </controller> + </record> + <record date="2014-06-12"> + <addr>224.0.102.128-224.0.102.255</addr> + <description>MVS-IPTV-2</description> + <xref type="person" data="Midwest_Video_Solutions"/> + <controller> + <xref type="person" data="Midwest_Video_Solutions"/> + </controller> + </record> + <record date="2011-04-20"> + <addr>224.0.103.0-224.0.104.255</addr> + <description>MVS-IPTV</description> + <xref type="person" data="Midwest_Video_Solutions"/> + <xref type="person" data="Adam_DeMinter"/> + <controller> + <xref type="person" data="Midwest_Video_Solutions"/> + </controller> + </record> + <record date="2011-06-06" updated="2018-08-01"> + <addr>224.0.105.0-224.0.105.127</addr> + <description>MIAX Multicast</description> + <xref type="person" data="Gamini_Karunaratne"/> + <controller><xref type="person" data="MIAX"/></controller> + </record> + <record date="2017-12-04"> + <addr>224.0.105.128-224.0.105.255</addr> + <description>MVS-IPTV3</description> + <xref type="person" data="Justin_Beaman"/> + <controller> + <xref type="person" data="Midwest_Video_Solutions"/> + </controller> + </record> + <record date="2011-06-16" updated="2023-04-14"> + <addr>224.0.106.0-224.0.106.255</addr> + <description>TMX</description> + <xref type="person" data="TMX_Network_Engineering"/> + <controller> + <xref type="person" data="TMX"/> + </controller> + </record> + <record date="2011-07-13" updated="2023-04-13"> + <addr>224.0.107.0-224.0.108.255</addr> + <description>TSX Inc.</description> + <xref type="person" data="TMX_Network_Engineering"/> + <controller> + <xref type="person" data="TMX"/> + </controller> + </record> + <record date="2011-10-25" updated="2023-04-13"> + <addr>224.0.109.0-224.0.110.255</addr> + <description>TSX Inc.</description> + <xref type="person" data="TMX_Network_Engineering"/> + <controller> + <xref type="person" data="TMX"/> + </controller> + </record> + <record date="2011-10-25" updated="2019-10-01"> + <addr>224.0.111.0-224.0.111.255</addr> + <description>VoleraDataFeed</description> + <xref type="person" data="Gerald_Hanweck"/> + <controller> + <xref type="person" data="Hanweck_Associates"/> + </controller> + </record> + <record date="2011-12-07"> + <addr>224.0.112.0-224.0.112.255</addr> + <description>JHB-STOCK-EXCH</description> + <xref type="person" data="Clem_Verwey"/> + </record> + <record date="2011-12-19"> + <addr>224.0.113.0-224.0.114.255</addr> + <description>Deutsche Boerse</description> + <xref type="person" data="Jan_Drwal"/> + </record> + <record date="2012-06-12" updated="2023-04-14"> + <addr>224.0.115.0-224.0.115.255</addr> + <description>TMX</description> + <xref type="person" data="TMX_Network_Engineering"/> + <controller> + <xref type="person" data="TMX"/> + </controller> + </record> + <record date="2012-06-19" updated="2018-04-20"> + <addr>224.0.116.0-224.0.116.255</addr> + <description>Intercontinental Exchange, Inc</description> + <xref type="person" data="RIR_Admin"/> + <controller> + <xref type="person" data="Intercontinental_Exchange_Inc."/> + </controller> + </record> + <record date="2012-07-12" updated="2016-05-06"> + <addr>224.0.117.0-224.0.119.255</addr> + <description>ISE</description> + <xref type="person" data="ISE-Networks"/> + </record> + <record date="2013-01-15"> + <addr>224.0.120.0-224.0.120.255</addr> + <description>czechbone iptv</description> + <xref type="person" data="Jan_Vitek"/> + </record> + <record date="2013-05-13" updated="2019-08-28"> + <addr>224.0.121.0-224.0.121.255</addr> + <description>AQUIS-EXCHANGE</description> + <xref type="person" data="Paul_Roberts"/> + <controller> + <xref type="person" data="Aquis_Exchange_PLC"/> + </controller> + </record> + <record date="2013-05-25"> + <addr>224.0.122.0-224.0.123.255</addr> + <description>DNS:NET TV</description> + <xref type="person" data="Marlon_Berlin"/> + </record> + <record date="2013-05-30"> + <addr>224.0.124.0-224.0.124.255</addr> + <description>Boston Options Exchange</description> + <xref type="person" data="David_Wilson"/> + <xref type="person" data="Michael_Caravetta"/> + </record> + <record date="2013-09-05" updated="2019-10-01"> + <addr>224.0.125.0-224.0.125.255</addr> + <description>Hanweck Associates</description> + <xref type="person" data="Gerald_Hanweck"/> + <controller> + <xref type="person" data="Hanweck_Associates"/> + </controller> + </record> + <record date="2013-10-31" updated="2018-04-20"> + <addr>224.0.126.0-224.0.129.255</addr> + <description>Intercontinental Exchange, Inc.</description> + <xref type="person" data="RIR_Admin"/> + <controller> + <xref type="person" data="Intercontinental_Exchange_Inc."/> + </controller> + </record> + <record date="2014-03-05"> + <addr>224.0.130.0-224.0.131.255</addr> + <description>BATS Trading</description> + <xref type="person" data="Andrew_Brown"/> + </record> + <record date="2014-04-12"> + <addr>224.0.132.0-224.0.135.255</addr> + <description>Net By Net Holding IPTV</description> + <xref type="person" data="Lev_V._Cherednikov"/> + </record> + <record date="2014-05-16"> + <addr>224.0.136.0-224.0.139.255</addr> + <description>Aequitas Innovations Inc.</description> + <xref type="person" data="Zaklina_Petkovic"/> + </record> + <record date="2014-09-04" updated="2019-08-29"> + <addr>224.0.140.0-224.0.140.255</addr> + <description>Instinet</description> + <xref type="person" data="Instinet"/> + <controller> + <xref type="person" data="Instinet"/> + </controller> + </record> + <record date="2015-06-30" updated="2018-08-01"> + <addr>224.0.141.0-224.0.141.255</addr> + <description>MIAX-2</description> + <xref type="person" data="Gamini_Karunaratne"/> + <controller><xref type="person" data="MIAX"/></controller> + </record> + <record date="2017-05-19" updated="2018-08-01"> + <addr>224.0.142.0-224.0.142.255</addr> + <description>MIAX M3</description> + <xref type="person" data="Gamini_Karunaratne"/> + <controller><xref type="person" data="MIAX"/></controller> + </record> + <record date="2017-06-02"> + <addr>224.0.143.0-224.0.143.255</addr> + <description>A2X-EXCHANGE</description> + <xref type="person" data="Neal_Lawrence"/> + </record> + <record date="2015-03-23"> + <addr>224.0.144.0-224.0.151.255</addr> + <description>VZ-Multicast-Public</description> + <xref type="person" data="Stephen_Ray_Middleton"/> + </record> + <record date="2016-04-19"> + <addr>224.0.152.0-224.0.152.255</addr> + <description>cse-md</description> + <xref type="person" data="David_Brett"/> + </record> + <record date="2016-05-24" updated="2019-08-29"> + <addr>224.0.153.0-224.0.156.255</addr> + <description>Telia Norway mcast</description> + <xref type="person" data="Henrik_Lans"/> + <controller> + <xref type="person" data="Telia-Norway-Get-NOC"/> + </controller> + </record> + <record date="2017-01-23" updated="2023-04-27"> + <addr>224.0.157.0-224.0.157.255</addr> + <description>London Metal Exchange</description> + <xref type="person" data="LME_Networks"/> + <controller> + <xref type="person" data="London_Metal_Exchange"/> + </controller> + </record> + <record date="2017-01-23"> + <addr>224.0.158.0-224.0.159.255</addr> + <description>TriAct Canada Marketplace LP</description> + <xref type="person" data="Hatice_Unal"/> + </record> + <record date="2016-07-07"> + <addr>224.0.160.0-224.0.165.255</addr> + <description>Deutsche Boerse</description> + <xref type="person" data="Bernd_Uphoff"/> + </record> + <record date="2017-02-17"> + <addr>224.0.166.0-224.0.167.255</addr> + <description>Virgin Connect IPTV</description> + <xref type="person" data="Vladimir_Shishkov"/> + </record> + <record date="2017-12-05"> + <addr>224.0.168.0-224.0.169.255</addr> + <description>Deutsche Boerse</description> + <xref type="person" data="Bernd_Uphoff"/> + </record> + <record date="2018-06-07"> + <addr>224.0.170.0-224.0.170.255</addr> + <description>MVS-IPTV4</description> + <xref type="person" data="Justin_Beaman"/> + <controller> + <xref type="person" data="Midwest_Video_Solutions"/> + </controller> + </record> + <record date="2019-01-25"> + <addr>224.0.171.0-224.0.171.255</addr> + <description>COINBASE-MARKETS</description> + <xref type="person" data="Gavin_McKee"/> + <controller><xref type="person" data="Coinbase"/></controller> + </record> + <record date="2018-06-19"> + <addr>224.0.172.0-224.0.175.255</addr> + <description>Deutsche Boerse</description> + <xref type="person" data="Bernd_Uphoff"/> + </record> + <record date="2018-07-31"> + <addr>224.0.176.0-224.0.179.255</addr> + <description>MIAX-EX-3-4-5</description> + <xref type="person" data="Gamini_Karunaratne"/> + <controller><xref type="person" data="MIAX"/></controller> + </record> + <record date="2019-02-13"> + <addr>224.0.180.0-224.0.181.255</addr> + <description>CBOE Europe</description> + <xref type="person" data="Jason_Ives"/> + <controller><xref type="person" data="CBOE_Europe"/></controller> + </record> + <record date="2019-02-28"> + <addr>224.0.182.0-224.0.183.255</addr> + <description>ALCOM-TV</description> + <xref type="person" data="TV_System_Administrators"/> + <controller><xref type="person" data="Ålands_Telekommunikation_Ab"/></controller> + </record> + <record date="2019-08-28"> + <addr>224.0.184.0-224.0.184.255</addr> + <description>AQUIS-EXCHANGE</description> + <xref type="person" data="Paul_Roberts"/> + <controller> + <xref type="person" data="Aquis_Exchange_PLC"/> + </controller> + </record> + <record date="2019-09-12" updated="2019-10-01"> + <addr>224.0.185.0-224.0.185.255</addr> + <description>Hanweck Associates</description> + <xref type="person" data="Svetlana_Kachintseva"/> + <controller> + <xref type="person" data="Hanweck_Associates"/> + </controller> + </record> + <record date="2019-10-02"> + <addr>224.0.186.0-224.0.186.255</addr> + <description>BOX Options Market</description> + <xref type="person" data="Alexandre_Gomes"/> + <controller> + <xref type="person" data="BOX_TECHNOLOGY_CANADA_INC."/> + </controller> + </record> + <record date="2019-11-13"> + <addr>224.0.187.0-224.0.188.255</addr> + <description>MVS-IPTV5</description> + <xref type="person" data="Justin_Beaman"/> + <controller> + <xref type="person" data="Midwest_Video_Solutions"/> + </controller> + </record> + <record date="2021-03-23"> + <addr>224.0.189.0-224.0.189.255</addr> + <description>Ido Rosen</description> + <xref type="person" data="Ido_Rosen"/> + <controller> + <xref type="person" data="Ido_Rosen"/> + </controller> + </record> + <record date="2020-10-01" updated="2020-10-15"> + <addr>224.0.190.0-224.0.191.255</addr> + <description>RTP Media</description> + <xref type="person" data="Vadim_B._Kantor"/> + <controller> + <xref type="person" data="RTP_Media"/> + </controller> + </record> + <record date="2021-04-01"> + <addr>224.0.192.0-224.0.207.255</addr> + <description>Intercontinental Exchange, Inc.</description> + <xref type="person" data="RIR_Admin"/> + <controller> + <xref type="person" data="Intercontinental_Exchange_Inc."/> + </controller> + </record> + <record date="2021-04-13" updated="2021-06-11"> + <addr>224.0.208.0-224.0.213.255</addr> + <description>Euronext</description> + <xref type="person" data="Euronext_Admin"/> + <controller><xref type="person" data="Euronext_Admin"/></controller> + </record> + <record date="2021-06-11"> + <addr>224.0.214.0-224.0.214.255</addr> + <description>OSK B2B mVPN distribution</description> + <xref type="person" data="Attila_Miklóš"/> + <controller> + <xref type="person" data="IPadmin_-_Orange_Slovensko_a.s."/> + </controller> + </record> + <record date="2022-01-06"> + <addr>224.0.215.0-224.0.215.255</addr> + <description>Tradeweb CLOB</description> + <xref type="person" data="Ruben_Hernandez"/> + <controller> + <xref type="person" data="Tradeweb_Markets_Inc"/> + </controller> + </record> + <record date="2021-07-30"> + <addr>224.0.216.0-224.0.219.255</addr> + <description>RTP Media</description> + <xref type="person" data="Vadim_B._Kantor"/> + <controller> + <xref type="person" data="RTP_Media"/> + </controller> + </record> + <record date="2021-09-07"> + <addr>224.0.220.0-224.0.223.255</addr> + <description>Japan Exchange Group</description> + <xref type="person" data="Japan_Exchange_Group"/> + <controller> + <xref type="person" data="Japan_Exchange_Group"/> + </controller> + </record> + <record date="2021-12-21"> + <addr>224.0.224.0-224.0.224.255</addr> + <description>AQUIS-EXCHANGE</description> + <xref type="person" data="Paul_Roberts"/> + <controller> + <xref type="person" data="Aquis_Exchange_PLC"/> + </controller> + </record> + <record date="2022-08-26" updated="2022-08-31"> + <addr>224.0.225.0-224.0.225.255</addr> + <description>Kalejdo TV</description> + <xref type="person" data="Kalejdo_TV"/> + <controller> + <xref type="person" data="Thomas_Sörlin"/> + </controller> + </record> + <record date="2022-06-09"> + <addr>224.0.226.0-224.0.227.255</addr> + <description>MVS-IPTV6</description> + <xref type="person" data="Justin_Beaman"/> + <controller> + <xref type="person" data="Midwest_Video_Solutions"/> + </controller> + </record> + <record date="2022-02-01" updated="2023-04-27"> + <addr>224.0.228.0-224.0.231.255</addr> + <description>London Metal Exchange</description> + <xref type="person" data="LME_Networks"/> + <controller> + <xref type="person" data="London_Metal_Exchange"/> + </controller> + </record> + <record date="2022-02-17"> + <addr>224.0.232.0-224.0.239.255</addr> + <description>Lucera Financial Infra</description> + <xref type="person" data="Kevin_McNicholas"/> + <controller> + <xref type="person" data="Lucera_Financial_Infrastructures"/> + </controller> + </record> + <record date="2022-05-26" updated="2023-04-27"> + <addr>224.0.240.0-224.0.243.255</addr> + <description>London Metal Exchange</description> + <xref type="person" data="LME_Networks"/> + <controller> + <xref type="person" data="London_Metal_Exchange"/> + </controller> + </record> + <record date="2023-05-19"> + <addr>224.0.244.0-224.0.244.255</addr> + <description>Clearpool AMS</description> + <xref type="person" data="Charles_Gomes"/> + <controller> + <xref type="person" data="Clearpool"/> + </controller> + </record> + <record date="2023-08-29"> + <addr>224.0.245.0-224.0.245.255</addr> + <description>OneChronos</description> + <xref type="person" data="Kelly_Littlepage"/> + <controller> + <xref type="person" data="OCX_Group_Inc"/> + </controller> + </record> + <record> + <addr>224.0.246.0-224.0.249.255</addr> + <description>Unassigned</description> + </record> + <record date="2009-09-01"> + <addr>224.0.250.0-224.0.251.255</addr> + <description>KPN Broadcast Services</description> + <xref type="person" data="Ad_C_Spelt"/> + <xref type="person" data="KPN_IP_Office"/> + </record> + <record date="2005-08-01"> + <addr>224.0.252.0-224.0.252.255</addr> + <description>KPN Broadcast Services</description> + <xref type="person" data="Ad_C_Spelt"/> + <xref type="person" data="KPN_IP_Office"/> + </record> + <record date="2005-08-01"> + <addr>224.0.253.0-224.0.253.255</addr> + <description>KPN Broadcast Services</description> + <xref type="person" data="Ad_C_Spelt"/> + <xref type="person" data="KPN_IP_Office"/> + </record> + <record date="2006-03-31"> + <addr>224.0.254.0-224.0.254.255</addr> + <description>Intelsat IPTV</description> + <xref type="person" data="Karl_Elad"/> + <reviewed>2011-02-22</reviewed> + </record> + <record date="2006-03-31"> + <addr>224.0.255.0-224.0.255.255</addr> + <description>Intelsat IPTV</description> + <xref type="person" data="Karl_Elad"/> + <reviewed>2011-02-22</reviewed> + </record> + </registry> + + + <registry id="multicast-addresses-4"> + <title>RESERVED (224.1.0.0-224.1.255.255 (224.1/16))</title> + <xref type="rfc" data="rfc5771"/> + <note>No new assignments are being made in this range for the time being.</note> + <record> + <addr>224.1.0.0-224.1.0.37</addr> + <description>Reserved</description> + <xref type="rfc" data="rfc5771"/> + </record> + <record date="2004-05-01"> + <addr>224.1.0.38</addr> + <description>dantz</description> + <xref type="person" data="Richard_Zulch"/> + </record> + <record> + <addr>224.1.0.39-224.1.1.255</addr> + <description>Reserved</description> + <xref type="rfc" data="rfc5771"/> + </record> + <record date="2006-02-17" updated="2018-04-20"> + <addr>224.1.2.0-224.1.2.255</addr> + <description>Intercontinental Exchange, Inc.</description> + <xref type="person" data="RIR_Admin"/> + <controller> + <xref type="person" data="Intercontinental_Exchange_Inc."/> + </controller> + </record> + <record date="2006-05-22"> + <addr>224.1.3.0-224.1.4.255</addr> + <description>NOB Cross media facilities</description> + <xref type="person" data="Technicolor_NL_NOC"/> + </record> + <record> + <addr>224.1.5.0-224.1.255.255</addr> + <description>Reserved</description> + <xref type="rfc" data="rfc5771"/> + </record> + </registry> + + + <registry id="multicast-addresses-5"> + <title>SDP/SAP Block (224.2.0.0-224.2.255.255 (224.2/16))</title> + <xref type="rfc" data="rfc5771"/> + <record> + <addr>224.2.0.0-224.2.127.253</addr> + <description>Multimedia Conference Calls</description> + <xref type="person" data="Steve_Casner"/> + </record> + <record> + <addr>224.2.127.254</addr> + <description>SAPv1 Announcements</description> + <xref type="person" data="Steve_Casner"/> + </record> + <record> + <addr>224.2.127.255</addr> + <description>SAPv0 Announcements (deprecated)</description> + <xref type="person" data="Steve_Casner"/> + </record> + <record> + <addr>224.2.128.0-224.2.255.255</addr> + <description>SAP Dynamic Assignments</description> + <xref type="person" data="Steve_Casner"/> + </record> + </registry> + + + <registry id="multicast-addresses-6"> + <title>AD-HOC Block II (224.3.0.0-224.4.255.255 (224.3/16, 224.4/16))</title> + <xref type="rfc" data="rfc5771"/> + <registration_rule>Expert Review, IESG Approval, or Standards Action</registration_rule> + <note title="Request an Assignment"> +<xref type="uri" data="https://www.iana.org/protocols/apply"/> + + </note> + <record date="1999-03-01"> + <addr>224.3.0.0-224.3.0.63</addr> + <description>Nasdaqmdfeeds (re-new/March 2003)</description> + <xref type="person" data="Michael_Rosenberg"/> + </record> + <record> + <addr>224.3.0.64-224.3.255.255</addr> + <description>Unassigned</description> + </record> + <record date="2006-03-31" updated="2021-10-28"> + <addr>224.4.0.0-224.4.0.255</addr> + <description>London Stock Exchange Group</description> + <xref type="person" data="Johnathan_Ryder"/> + <controller> + <xref type="person" data="London_Stock_Exchange_Group"/> + </controller> + </record> + <record date="2008-02-25" updated="2021-10-28"> + <addr>224.4.1.0-224.4.1.255</addr> + <description>London Stock Exchange Group</description> + <xref type="person" data="Johnathan_Ryder"/> + <controller> + <xref type="person" data="London_Stock_Exchange_Group"/> + </controller> + </record> + <record date="2008-02-29" updated="2021-10-28"> + <addr>224.4.2.0-224.4.2.255</addr> + <description>London Stock Exchange Group</description> + <xref type="person" data="Johnathan_Ryder"/> + <controller> + <xref type="person" data="London_Stock_Exchange_Group"/> + </controller> + </record> + <record date="2008-12-24" updated="2021-10-28"> + <addr>224.4.3.0-224.4.4.255</addr> + <description>London Stock Exchange Group</description> + <xref type="person" data="Johnathan_Ryder"/> + <controller> + <xref type="person" data="London_Stock_Exchange_Group"/> + </controller> + </record> + <record date="2009-05-12" updated="2021-10-28"> + <addr>224.4.5.0-224.4.6.255</addr> + <description>London Stock Exchange Group</description> + <xref type="person" data="Johnathan_Ryder"/> + <controller> + <xref type="person" data="London_Stock_Exchange_Group"/> + </controller> + </record> + <record date="2012-04-10"> + <addr>224.4.7.0-224.4.7.255</addr> + <description>CBOE Holdings</description> + <xref type="person" data="John_Rittner"/> + </record> + <record date="2012-04-11" updated="2016-05-06"> + <addr>224.4.8.0-224.4.9.255</addr> + <description>ISE</description> + <xref type="person" data="ISE-Networks"/> + </record> + <record date="2012-04-11" updated="2021-10-28"> + <addr>224.4.10.0-224.4.13.255</addr> + <description>London Stock Exchange Group</description> + <xref type="person" data="Johnathan_Ryder"/> + <controller> + <xref type="person" data="London_Stock_Exchange_Group"/> + </controller> + </record> + <record date="2018-01-04" updated="2021-10-28"> + <addr>224.4.14.0-224.4.17.255</addr> + <description>London Stock Exchange Group</description> + <xref type="person" data="Johnathan_Ryder"/> + <controller> + <xref type="person" data="London_Stock_Exchange_Group"/> + </controller> + </record> + <record date="2021-02-04"> + <addr>224.4.18.0-224.4.21.255</addr> + <description>London Stock Exchange Group</description> + <xref type="person" data="Johnathan_Ryder"/> + <controller> + <xref type="person" data="London_Stock_Exchange_Group"/> + </controller> + </record> + <record date="2021-09-21"> + <addr>224.4.22.0-224.4.23.255</addr> + <description>London Stock Exchange Group</description> + <xref type="person" data="Johnathan_Ryder"/> + <controller> + <xref type="person" data="London_Stock_Exchange_Group"/> + </controller> + </record> + <record date="2023-01-18"> + <addr>224.4.24.0-224.4.31.255</addr> + <description>Fenics Market Data</description> + <xref type="person" data="Steve_Loizou"/> + <controller> + <xref type="person" data="Cantor_Fitzgerald"/> + </controller> + </record> + <record date="2023-03-15"> + <addr>224.4.32.0-224.4.33.255</addr> + <description>Global Futures & Options Ltd</description> + <xref type="person" data="David_Beattie"/> + <controller> + <xref type="person" data="Global_Futures_and_Options_Limited"/> + </controller> + </record> + <record date="2023-05-24"> + <addr>224.4.34.0-224.4.39.255</addr> + <description>MIAX-3</description> + <xref type="person" data="Gamini_Karunaratne"/> + <controller><xref type="person" data="MIAX"/></controller> + </record> + <record> + <addr>224.4.40.0-224.4.47.255</addr> + <description>Unassigned</description> + </record> + <record date="2023-04-10"> + <addr>224.4.48.0-224.4.63.255</addr> + <description>Intercontinental Exchange, Inc.</description> + <xref type="person" data="RIR_Admin"/> + <controller> + <xref type="person" data="Intercontinental_Exchange_Inc."/> + </controller> + </record> + <record> + <addr>224.4.64.0-224.4.255.255</addr> + <description>Unassigned</description> + </record> + </registry> + + + <registry id="multicast-addresses-7"> + <title>RESERVED (224.5.0.0-224.251.255.255 (251 /16s))</title> + <xref type="rfc" data="rfc5771"/> + <record> + <addr>224.5.0.0-224.251.255.255</addr> + <description>Reserved</description> + <xref type="rfc" data="rfc5771"/> + </record> + </registry> + + + <registry id="multicast-addresses-8"> + <title>DIS Transient Groups 224.252.0.0-224.255.255.255 (224.252/14))</title> + <xref type="rfc" data="rfc2365"/> + <record> + <addr>224.252.0.0-224.255.255.255</addr> + <description>DIS Transient Groups</description> + <xref type="person" data="IANA"/> + <xref type="rfc" data="rfc2365"/> + </record> + </registry> + + + <registry id="multicast-addresses-9"> + <title>RESERVED (225.0.0.0-231.255.255.255 (7 /8s))</title> + <xref type="rfc" data="rfc5771"/> + <record> + <addr>225.0.0.0-231.255.255.255</addr> + <description>Reserved</description> + <xref type="rfc" data="rfc5771"/> + </record> + </registry> + + + <registry id="multicast-addresses-10"> + <title>Source-Specific Multicast Block (232.0.0.0-232.255.255.255 (232/8))</title> + <xref type="rfc" data="rfc5771"/> + <note>Addresses within the 232.0.1.0-232.255.255.255 are dynamically +allocated by hosts when needed <xref type="rfc" data="rfc4607"/></note> + <record> + <addr>232.0.0.0</addr> + <description>Reserved</description> + <xref type="rfc" data="rfc4607"/> + </record> + <record> + <addr>232.0.0.1-232.0.0.255</addr> + <description>Reserved for IANA allocation</description> + <xref type="rfc" data="rfc4607"/> + </record> + <record> + <addr>232.0.1.0-232.255.255.255</addr> + <description>Reserved for local host allocation</description> + <xref type="rfc" data="rfc4607"/> + </record> + </registry> + + + <registry id="glop"> + <title>GLOP Block</title> + <xref type="rfc" data="rfc3180"/> + <record> + <addr>233.0.0.0-233.251.255.255</addr> + <description>GLOP Block</description> + <xref type="rfc" data="rfc3180"/> + </record> + </registry> + + + <registry id="multicast-addresses-11"> + <title>AD-HOC Block III (233.252.0.0-233.255.255.255 (233.252/14))</title> + <xref type="rfc" data="rfc5771"/> + <registration_rule>Expert Review, IESG Approval, or Standards Action</registration_rule> + <note title="Request an Assignment"> +<xref type="uri" data="https://www.iana.org/protocols/apply"/> + + </note> + <record date="2010-01-20"> + <addr>233.252.0.0-233.252.0.255</addr> + <description>MCAST-TEST-NET</description> + <xref type="person" data="IANA"/> + <xref type="rfc" data="rfc5771"/> + <xref type="rfc" data="rfc6676"/> + <reviewed>2010-01-20</reviewed> + </record> + <record date="2010-08-12" updated="2021-12-17"> + <addr>233.252.1.0-233.252.1.255</addr> + <description>Pico</description> + <xref type="person" data="Pico_Sales"/> + <controller> + <xref type="person" data="Pico"/> + </controller> + </record> + <record date="2010-08-12"> + <addr>233.252.2.0-233.252.7.255</addr> + <description>Tradition</description> + <xref type="person" data="Tradition_Network_Operations_and_Command_Center"/> + </record> + <record date="2010-08-12"> + <addr>233.252.8.0-233.252.11.255</addr> + <description>BVMF_MKT_DATA</description> + <xref type="person" data="Roberto_Costa_Simoes"/> + </record> + <record date="2010-09-14"> + <addr>233.252.12.0-233.252.13.255</addr> + <description>blizznet-tv-services</description> + <xref type="person" data="Paul_Wallner"/> + </record> + <record date="2016-09-27"> + <addr>233.252.14.0-233.252.17.255</addr> + <description>BVMF_MKT_DATA_2</description> + <xref type="person" data="Guilherme_Longanezi"/> + </record> + <record date="2021-12-17"> + <addr>233.252.18.0-233.252.18.255</addr> + <description>Pico</description> + <xref type="person" data="Pico_Sales"/> + <controller> + <xref type="person" data="Pico"/> + </controller> + </record> + <record> + <addr>233.252.19.0-233.255.255.255</addr> + <description>Unassigned</description> + </record> + </registry> + + <registry id="unicast-prefix-based"> + <title>Unicast-Prefix-based IPv4 Multicast Addresses</title> + <xref type="rfc" data="rfc6034"/> + <record date="2010-08-11"> + <addr>234.0.0.0-234.255.255.255</addr> + <description>Unicast-Prefix-based IPv4 Multicast Addresses</description> + <xref type="rfc" data="rfc6034"/> + </record> + </registry> + + + <registry id="multicast-addresses-12"> + <title>Scoped Multicast Ranges</title> + <xref type="rfc" data="rfc5771"/> + <record> + <addr>235.0.0.0-238.255.255.255</addr> + <description>Reserved</description> + <xref type="rfc" data="rfc5771"/> + </record> + <record date="1997-01-01"> + <addr>239.0.0.0-239.255.255.255</addr> + <description>Organization-Local Scope</description> + <xref type="person" data="David_Meyer"/> + <xref type="rfc" data="rfc2365"/> + </record> + </registry> + + + <registry id="multicast-addresses-13"> + <title>Relative Addresses used with Scoped Multicast Addresses</title> + <xref type="rfc" data="rfc5771"/> + <note>(*) It is only appropriate to use these values in explicitly- +configured experiments; they MUST NOT be shipped as defaults in +implementations. See <xref type="rfc" data="rfc3692"/> for details. + +These addresses are listed in the Domain Name Service under MCAST.NET +and 224.IN-ADDR.ARPA. + +Note that when used on an Ethernet or IEEE 802 network, the 23 +low-order bits of the IP Multicast address are placed in the low-order +23 bits of the Ethernet or IEEE 802 net multicast address +1.0.94.0.0.0. See the section on "IANA ETHERNET ADDRESS BLOCK".</note> + <record date="1998-12-01"> + <relative>0</relative> + <description>SAP Session Announcement Protocol</description> + <xref type="person" data="Mark_Handley"/> + </record> + <record> + <relative>1</relative> + <description>MADCAP Protocol</description> + <xref type="rfc" data="rfc2730"/> + </record> + <record date="2001-12-01"> + <relative>2</relative> + <description>SLPv2 Discovery</description> + <xref type="person" data="Erik_Guttman"/> + </record> + <record date="2000-06-01"> + <relative>3</relative> + <description>MZAP</description> + <xref type="person" data="Dave_Thaler"/> + </record> + <record date="1999-08-01"> + <relative>4</relative> + <description>Multicast Discovery of DNS Services</description> + <xref type="person" data="Bill_Manning"/> + </record> + <record date="2006-06-27"> + <relative>5</relative> + <description>SSDP</description> + <xref type="person" data="UPnP_Forum"/> + </record> + <record date="1999-10-01"> + <relative>6</relative> + <description>DHCP v4</description> + <xref type="person" data="Eric_Hall"/> + </record> + <record date="2000-07-01"> + <relative>7</relative> + <description>AAP</description> + <xref type="person" data="Stephen_Hanna"/> + </record> + <record> + <relative>8</relative> + <description>MBUS</description> + <xref type="rfc" data="rfc3259"/> + </record> + <record date="2006-06-27"> + <relative>9</relative> + <description>UPnP</description> + <xref type="person" data="UPnP_Forum"/> + </record> + <record> + <relative>10</relative> + <description>MCAST-TEST-NET-2</description> + <xref type="rfc" data="rfc6676"/> + </record> + <record> + <relative>11-252</relative> + <description>Unassigned</description> + </record> + <record> + <relative>253</relative> + <description>Reserved</description> + </record> + <record> + <relative>254</relative> + <description>RFC3692-style Experiment (*)</description> + <xref type="rfc" data="rfc4727"/> + </record> + <record> + <relative>255</relative> + <description>Unassigned</description> + </record> + </registry> + + <people> + <person id="_3GPP"> + <org>3GPP</org> + <uri>https://www.3gpp.org</uri> + </person> + <person id="Ad_C_Spelt"> + <name>Ad C. Spelt</name> + <uri>mailto:a.c.spelt&kpn.com</uri> + <updated>2009-09-01</updated> + </person> + <person id="Adam_DeMinter"> + <name>Adam DeMinter</name> + <uri>mailto:adam.deminter&mwt.net</uri> + <updated>2011-04-20</updated> + </person> + <person id="Adam_Yellen"> + <name>Adam Yellen</name> + <uri>mailto:adam&videofurnace.com</uri> + <updated>2009-08-12</updated> + </person> + <person id="Akihiro_Nishida"> + <name>Akihiro Nishida</name> + <uri>mailto:nishida&src.ricoh.co.jp</uri> + <updated>2003-02-01</updated> + </person> + <person id="Alan_Novick"> + <name>Alan Novick</name> + <uri>mailto:anovick&tdc.com</uri> + <updated>1998-08-01</updated> + </person> + <person id="Alan_Robertson"> + <name>Alan Robertson</name> + <uri>mailto:alanr&unix.sh</uri> + <updated>2012-04-17</updated> + </person> + <person id="Ålands_Telekommunikation_Ab"> + <org>Ålands Telekommunikation Ab</org> + <uri>mailto:tv-noc&alcom.ax</uri> + <updated>2019-02-28</updated> + </person> + <person id="Alex_Lee"> + <name>Alex Lee</name> + <uri>mailto:alex_mrlee&gemtek.com.tw</uri> + <updated>2002-10-01</updated> + </person> + <person id="Alexander_Pevzner"> + <name>Alexander Pevzner</name> + <uri>mailto:pzz&pzz.msk.ru</uri> + <updated>2006-03-17</updated> + </person> + <person id="Alexandre_Gomes"> + <name>Alexandre Gomes</name> + <uri>mailto:agomes&boxtechnology.com</uri> + <updated>2019-10-02</updated> + </person> + <person id="Andrew_Brown"> + <name>Andrew Brown</name> + <uri>mailto:abrown&batstrading.com</uri> + <updated>2014-03-05</updated> + </person> + <person id="Andrew_Cherenson"> + <name>Andrew Cherenson</name> + <uri>mailto:arc&sgi.com</uri> + </person> + <person id="Andrew_Rowley"> + <name>Andrew Rowley</name> + <uri>mailto:Andrew.Rowley&manchester.ac.uk</uri> + <updated>2006-06-09</updated> + </person> + <person id="Andy_Belk"> + <name>Andy Belk</name> + <uri>mailto:register1&azulsystems.com</uri> + <updated>2005-02-01</updated> + </person> + <person id="Andy_Crick"> + <name>Andy Crick</name> + <uri>mailto:acrick&haascnc.com</uri> + <updated>2008-01-14</updated> + </person> + <person id="Anthony_Daga"> + <name>Anthony Daga</name> + <uri>mailto:anthony&mksrc.com</uri> + <updated>1999-06-01</updated> + </person> + <person id="Antonio_Querubin"> + <name>Antonio Querubin</name> + <uri>mailto:tony&lava.net</uri> + <updated>2008-02-04</updated> + </person> + <person id="Applykane"> + <org>Applykane Technologies Private Limited</org> + <uri>mailto:applykane&gmail.com</uri> + <updated>2017-05-19</updated> + </person> + <person id="Aquis_Exchange_PLC"> + <org>Aquis Exchange PLC</org> + <uri>mailto:networks&aquis.eu</uri> + <updated>2021-12-21</updated> + </person> + <person id="Architecture_Team"> + <name>Architecture Team</name> + <uri>mailto:tech.arch&quantifytechnology.com</uri> + <updated>2018-01-31</updated> + </person> + <person id="Arnoud_Zwemmer"> + <name>Arnoud Zwemmer</name> + <uri>mailto:arnoud&nwn.nl</uri> + <updated>1996-11-01</updated> + </person> + <person id="Asad_Gilani"> + <name>Asad Gilani</name> + <uri>mailto:agilani&nymex.com</uri> + <updated>1997-07-01</updated> + </person> + <person id="Asia_Digital_Exchange"> + <name>Asia Digital Exchange</name> + <uri>mailto:it_infra&asianext.com</uri> + <updated>2023-03-06</updated> + </person> + <person id="Attila_Miklóš"> + <name>Attila Miklóš</name> + <uri>mailto:attila.miklos&orange.com</uri> + <updated>2021-06-11</updated> + </person> + <person id="BATS_Europe_NOC"> + <name>BATS Europe NOC</name> + <uri>mailto:noceurope&bats.com</uri> + <updated>2017-06-23</updated> + </person> + <person id="Bernd_Uphoff"> + <name>Bernd Uphoff</name> + <uri>mailto:bernd.uphoff&deutsche-boerse.com</uri> + <updated>2018-06-19</updated> + </person> + <person id="Bert_van_Willigen"> + <name>Bert van Willigen</name> + <uri>mailto:bert.vanwilligen&philips.com</uri> + <updated>2004-01-01</updated> + </person> + <person id="Beverly_Schwartz"> + <name>Beverly Schwartz</name> + <uri>mailto:bschwart&bbn.com</uri> + <updated>1998-06-01</updated> + </person> + <person id="Bill_Manning"> + <name>Bill Manning</name> + <uri>mailto:bmanning&isi.edu</uri> + <updated>1999-08-01</updated> + </person> + <person id="Bill_Schilit"> + <name>Bill Schilit</name> + <uri>mailto:schilit&parc.xerox.com</uri> + </person> + <person id="Bill_Simpson"> + <name>Bill Simpson</name> + <uri>mailto:bill.simpson&um.cc.umich.edu</uri> + <updated>1994-11-01</updated> + </person> + <person id="Bill_Woodcock"> + <name>Bill Woodcock</name> + <uri>mailto:woody&zocalo.net</uri> + <updated>1998-11-01</updated> + </person> + <person id="Bob_Braden"> + <name>Bob Braden</name> + <uri>mailto:braden&isi.edu</uri> + <updated>1996-04-01</updated> + </person> + <person id="Bob_Brzezinski"> + <name>Bob Brzezinski</name> + <uri>mailto:bob.brzezinski&activfinancial.com</uri> + <updated>2005-10-28</updated> + </person> + <person id="Bob_Gaddie"> + <name>Bob Gaddie</name> + <uri>mailto:bobg&dtn.com</uri> + <updated>1998-08-01</updated> + </person> + <person id="Bob_Meier"> + <name>Bob Meier</name> + <uri>mailto:meierb&norand.com</uri> + <updated>1997-12-01</updated> + </person> + <person id="Bob_Scheifler"> + <name>Bob Scheifler</name> + <uri>mailto:Bob.Scheifler&sun.com</uri> + <updated>1998-08-01</updated> + </person> + <person id="Bob_Sledge"> + <name>Bob Sledge</name> + <uri>mailto:bob&pqsystems.com</uri> + <updated>1998-12-01</updated> + </person> + <person id="Bodo_Rueskamp"> + <name>Bodo Rueskamp</name> + <uri>mailto:br&itchigo.com</uri> + <updated>2000-03-01</updated> + </person> + <person id="BOX_TECHNOLOGY_CANADA_INC."> + <org>BOX TECHNOLOGY CANADA INC.</org> + <updated>2019-10-04</updated> + </person> + <person id="Brendan_Eic"> + <name>Brendan Eic</name> + <uri>mailto:brendan&illyria.wpd.sgi.com</uri> + </person> + <person id="Brian_Kean"> + <name>Brian Kean</name> + <uri>mailto:bkean&dca.com</uri> + <updated>1995-08-01</updated> + </person> + <person id="Brian_Kerkan"> + <name>Brian Kerkan</name> + <uri>mailto:brian&satcomsystems.com</uri> + <updated>2000-05-01</updated> + </person> + <person id="Brian_Martinicky"> + <name>Brian Martinicky</name> + <uri>mailto:Brian_Martinicky&automationintelligence.com</uri> + <updated>2000-03-01</updated> + </person> + <person id="Brian_Trudeau"> + <name>Brian Trudeau</name> + <uri>mailto:btrudeau&onechicago.com</uri> + <updated>2014-09-19</updated> + </person> + <person id="Bruce_Factor"> + <name>Bruce Factor</name> + <uri>mailto:ahi!bigapple!bruce&uunet.uu.net</uri> + </person> + <person id="Bryan_Costales"> + <name>Bryan Costales</name> + <uri>mailto:bcx&infobeat.com</uri> + <updated>1997-09-01</updated> + </person> + <person id="Bryant_Eastham"> + <name>Bryant Eastham</name> + <uri>mailto:protocol&opendof.org</uri> + <updated>2015-04-23</updated> + </person> + <person id="BSE"> + <org>Beirut Stock Exchange</org> + <uri>mailto:itd&bse.com.lb</uri> + <updated>2019-01-17</updated> + </person> + <person id="Caleb_Bell"> + <name>Caleb Bell</name> + <uri>mailto:cbell&rxnetworks.com</uri> + <updated>2012-11-19</updated> + </person> + <person id="Carl-Johan_Sjöberg"> + <name>Carl-Johan Sjöberg</name> + <uri>mailto:cjs&bitsend.se</uri> + <updated>2012-04-25</updated> + </person> + <person id="Carl_Malamud"> + <name>Carl Malamud</name> + <uri>mailto:carl&media.org</uri> + <updated>2014-01-03</updated> + </person> + <person id="Cantor_Fitzgerald"> + <org>Cantor Fitzgerald</org> + <uri>mailto:networkengineering&cantor.com</uri> + <updated>2023-01-18</updated> + </person> + <person id="CBOE_Europe"> + <org>CBOE Europe</org> + <uri>mailto:noceurope&cboe.com</uri> + <updated>2019-02-13</updated> + </person> + <person id="Charles_Gomes"> + <name>Charles Gomes</name> + <uri>mailto:noc&clearpoolgroup.com</uri> + <updated>2023-06-05</updated> + </person> + <person id="Charles_Lo"> + <name>Charles Lo</name> + <uri>mailto:clo&qti.qualcomm.com</uri> + <updated>2022-11-02</updated> + </person> + <person id="Charles_Tewiah"> + <name>Charles Tewiah</name> + <uri>mailto:charles.tewiah&westlb-systems.co.uk</uri> + <updated>2005-09-01</updated> + </person> + <person id="Chas_Honton"> + <name>Chas Honton</name> + <uri>mailto:chas&secant.com</uri> + <updated>1997-12-01</updated> + </person> + <person id="Choon_Lee"> + <name>Choon Lee</name> + <uri>mailto:cwl&nsd.3com.com</uri> + <updated>1996-04-01</updated> + </person> + <person id="Chris_Adams"> + <name>Chris Adams</name> + <uri>mailto:jc.adams&reuters.com</uri> + <updated>2000-07-01</updated> + </person> + <person id="Christopher_Mettin"> + <name>Christopher Mettin</name> + <uri>mailto:cmettin&gqbc-online.com</uri> + <updated>2009-05-12</updated> + </person> + <person id="Chuck_McManis"> + <name>Chuck McManis</name> + <uri>mailto:cmcmanis&sun.com</uri> + </person> + <person id="Clearpool"> + <org>Clearpool</org> + <uri>mailto:noc&clearpoolgroup.com</uri> + <updated>2023-06-05</updated> + </person> + <person id="Clem_Verwey"> + <name>Clem Verwey</name> + <uri>mailto:clemv&jse.co.za</uri> + <updated>2011-12-07</updated> + </person> + <person id="Colin_Caughie"> + <name>Colin Caughie</name> + <uri>mailto:cfc&indigo-avs.com</uri> + <updated>2000-05-01</updated> + </person> + <person id="Coinbase"> + <org>Coinbase</org> + <uri>mailto:markets-infra&coinbase.com</uri> + <updated>2019-01-28</updated> + </person> + <person id="COMTECH_Kft."> + <org>COMTECH Kft.</org> + <uri>mailto:dev&comtech.co.hu</uri> + <updated>2016-10-20</updated> + </person> + <person id="Craig_Dowell"> + <name>Craig Dowell</name> + <uri>mailto:cdowell&quicinc.com</uri> + <updated>2011-11-18</updated> + </person> + <person id="Dan_Jackson"> + <name>Dan Jackson</name> + <uri>mailto:jdan&us.ibm.com</uri> + <updated>1997-09-01</updated> + </person> + <person id="Dan_Jakubiec"> + <name>Dan Jakubiec</name> + <uri>mailto:dan.jakubiec&systech.com</uri> + <updated>2006-09-21</updated> + </person> + <person id="Daniel_Dissett"> + <name>Daniel Dissett</name> + <uri>mailto:ddissett&peerlogic.com</uri> + <updated>1998-12-01</updated> + </person> + <person id="Daniel_Steinber"> + <name>Daniel Steinber</name> + <uri>mailto:Daniel.Steinberg&eng.sun.com</uri> + </person> + <person id="Darcy_Brockbank"> + <name>Darcy Brockbank</name> + <uri>mailto:darcy&hasc.com</uri> + <updated>1997-12-01</updated> + </person> + <person id="Darrell_Sveistrup"> + <name>Darrell Sveistrup</name> + <uri>mailto:darrells&truesolutions.net</uri> + <updated>1999-06-01</updated> + </person> + <person id="Dave_Cheriton"> + <name>Dave Cheriton</name> + <uri>mailto:cheriton&dsg.stanford.edu</uri> + </person> + <person id="Dave_Glanzer"> + <name>Dave Glanzer</name> + <uri>mailto:dave.glanzer&fieldbus.org</uri> + <updated>2003-03-01</updated> + </person> + <person id="Dave_Thaler"> + <name>Dave Thaler</name> + <uri>mailto:dthaler&microsoft.com</uri> + <updated>2000-06-01</updated> + </person> + <person id="David_Beattie"> + <name>David Beattie</name> + <org>Global Futures and Options Limited</org> + <uri>mailto:david.beattie&gfo-x.com</uri> + <updated>2023-03-15</updated> + </person> + <person id="David_Brett"> + <name>David Brett</name> + <uri>mailto:david.brett&thecse.com</uri> + <updated>2016-04-19</updated> + </person> + <person id="David_Meyer"> + <name>David Meyer</name> + <uri>mailto:meyer&ns.uoregon.edu</uri> + <updated>1997-01-01</updated> + </person> + <person id="David_Mills"> + <name>David Mills</name> + <uri>mailto:mills&udel.edu</uri> + </person> + <person id="David_Poole"> + <name>David Poole</name> + <uri>mailto:davep&extendsys.com</uri> + <updated>1997-04-01</updated> + </person> + <person id="David_Rubin"> + <name>David Rubin</name> + <uri>mailto:drubin&ncc.net</uri> + <updated>1996-08-01</updated> + </person> + <person id="David_Wilson"> + <name>David Wilson</name> + <uri>mailto:dwilson&m-x.ca</uri> + <updated>2013-05-30</updated> + </person> + <person id="Dean_Blackketter"> + <name>Dean Blackketter</name> + <uri>mailto:dean&corp.webtv.net</uri> + <updated>1998-11-01</updated> + </person> + <person id="Dino_Farinacci"> + <name>Dino Farinacci</name> + <uri>mailto:dino&procket.com</uri> + <updated>1996-03-01</updated> + </person> + <person id="Dirk_Koopman"> + <name>Dirk Koopman</name> + <uri>mailto:djk&tobit.co.uk</uri> + <updated>2000-07-01</updated> + </person> + <person id="Doug_Dillon"> + <name>Doug Dillon</name> + <uri>mailto:dillon&hns.com</uri> + <updated>1998-08-01</updated> + </person> + <person id="Douglas_Marquardt"> + <name>Douglas Marquardt</name> + <uri>mailto:dmarquar&woz.org</uri> + <updated>1997-02-01</updated> + </person> + <person id="Duane_Wessels"> + <name>Duane Wessels</name> + <uri>mailto:wessels&nlanr.net</uri> + <updated>1997-02-01</updated> + </person> + <person id="Ed_Moran"> + <name>Ed Moran</name> + <uri>mailto:admin&cruzjazz.com</uri> + <updated>1997-10-01</updated> + </person> + <person id="Ed_Purkiss"> + <name>Ed Purkiss</name> + <uri>mailto:epurkiss&wdmacodi.com</uri> + <updated>1998-09-01</updated> + </person> + <person id="Eric_Hall"> + <name>Eric Hall</name> + <uri>mailto:ehall&ntrg.com</uri> + <updated>1999-10-01</updated> + </person> + <person id="Erick_MacDonald_Filzek"> + <name>Erick MacDonald Filzek</name> + <uri>mailto:filzek&wisehome.io</uri> + <updated>2023-08-09</updated> + </person> + <person id="Erik_Guttman"> + <name>Erik Guttman</name> + <uri>mailto:Erik.Guttman&sun.com</uri> + <updated>2001-12-01</updated> + </person> + <person id="Ernst_EDER"> + <name>Ernst EDER</name> + <uri>mailto:tech&lonmark.org</uri> + <updated>2018-11-19</updated> + </person> + <person id="Euronext_Admin"> + <name>Euronext Admin</name> + <uri>mailto:iana-admin&euronext.com</uri> + <updated>2014-11-24</updated> + </person> + <person id="Evan_Caves"> + <name>Evan Caves</name> + <uri>mailto:evan&acc.com</uri> + <updated>1998-06-01</updated> + </person> + <person id="Florian_Weimer"> + <name>Florian Weimer</name> + <uri>mailto:fweimer&redhat.com</uri> + <updated>2013-02-08</updated> + </person> + <person id="Fred_Baker"> + <name>Fred Baker</name> + <uri>mailto:fred&cisco.com</uri> + <updated>1997-06-01</updated> + </person> + <person id="Gajendra_Shukla"> + <name>Gajendra Shukla</name> + <uri>mailto:gshukla&proxim.com</uri> + <updated>2002-02-01</updated> + </person> + <person id="Gamini_Karunaratne"> + <name>Gamini Karunaratne</name> + <uri>mailto:gkarunaratne&miami-holdings.com</uri> + <updated>2023-05-24</updated> + </person> + <person id="Gary_S_Malkin"> + <name>Gary S. Malkin</name> + <uri>mailto:GMALKIN&xylogics.com</uri> + </person> + <person id="Gary_Scott_Malkin"> + <name>Gary Scott Malkin</name> + <uri>mailto:gmalkin&baynetworks.com</uri> + <updated>1998-02-01</updated> + </person> + <person id="Gavin_McKee"> + <name>Gavin McKee</name> + <uri>mailto:gav.mckee&coinbase.com</uri> + <updated>2019-01-25</updated> + </person> + <person id="Gene_Marsh"> + <name>Gene Marsh</name> + <uri>mailto:MarshM&diebold.com</uri> + <updated>1998-11-01</updated> + </person> + <person id="Geoff_Golder"> + <name>Geoff Golder</name> + <uri>mailto:geoffgolder&gmail.com</uri> + <updated>2016-04-19</updated> + </person> + <person id="Geoff_Mendal"> + <name>Geoff Mendal</name> + <uri>mailto:mendal&talarian.com</uri> + <updated>1999-01-01</updated> + </person> + <person id="George_Neville-Neil"> + <name>George Neville-Neil</name> + <uri>mailto:gnn&neville-neil.com</uri> + <updated>2014-12-17</updated> + </person> + <person id="Gerald_Hanweck"> + <name>Gerald Hanweck</name> + <uri>mailto:jhanweck&hanweckassoc.com</uri> + <updated>2014-09-05</updated> + </person> + <person id="Giovanni_Marzot"> + <name>Giovanni Marzot</name> + <uri>mailto:gmarzot&ramp.com</uri> + <updated>2019-03-13</updated> + </person> + <person id="Giovanni_Marzot_2"> + <name>Giovanni Marzot</name> + <uri>mailto:gmarzot&vivoh.com</uri> + <updated>2023-10-13</updated> + </person> + <person id="Global_Futures_and_Options_Limited"> + <org>Global Futures and Options Limited</org> + <uri>mailto:david.beattie&gfo-x.com</uri> + <updated>2023-03-15</updated> + </person> + <person id="Grant_Taylor"> + <name>Grant Taylor</name> + <uri>mailto:grantwtt&gmail.com</uri> + <updated>2016-10-04</updated> + </person> + <person id="Guido_Petronio"> + <name>Guido Petronio</name> + <uri>mailto:guido.petronio&moneyline.com</uri> + <updated>2004-01-01</updated> + </person> + <person id="Guilherme_Longanezi"> + <name>Guilherme Longanezi</name> + <uri>mailto:glonganezi&bvmf.com.br</uri> + <updated>2016-09-27</updated> + </person> + <person id="Hanweck_Associates"> + <org>Hanweck Associates</org> + <uri>mailto:iana-change-controller&hanweckassoc.com</uri> + <updated>2019-10-01</updated> + </person> + <person id="Hatice_Unal"> + <name>Hatice Unal</name> + <uri>mailto:CAN-Tech-Network&itg.com</uri> + <updated>2019-01-25</updated> + </person> + <person id="Heiko_Rupp"> + <name>Heiko Rupp</name> + <uri>mailto:hwr&xlink.net</uri> + <updated>1997-01-01</updated> + </person> + <person id="Henri_Moelard"> + <name>Henri Moelard</name> + <uri>mailto:HMOELARD&wcnd.nl.lucent.com</uri> + <updated>1998-03</updated> + </person> + <person id="Henrik_Lans"> + <name>Henrik Lans</name> + <uri>mailto:henrik.lans&telia.no</uri> + <updated>2019-09-27</updated> + </person> + <person id="Hiroshi_Okubo"> + <name>Hiroshi Okubo</name> + <uri>mailto:okubo.hiroshi&canon.co.jp</uri> + <updated>2014-08-01</updated> + </person> + <person id="Howard_Gordon"> + <name>Howard Gordon</name> + <uri>mailto:hgordon&xingtech.com</uri> + </person> + <person id="IANA"> + <org>IANA</org> + <uri>mailto:iana&iana.org</uri> + </person> + <person id="Ian_Armitage"> + <name>Ian Armitage</name> + <uri>mailto:ian&coactive.com</uri> + <updated>1999-08-01</updated> + </person> + <person id="Ian_Stewart"> + <name>Ian Stewart</name> + <uri>mailto:iandbige&yahoo.com</uri> + <updated>1999-06-01</updated> + </person> + <person id="Ian_Wacey"> + <name>Ian Wacey</name> + <uri>mailto:iain.wacey&gefalbany.ge.com</uri> + <updated>2000-05-01</updated> + </person> + <person id="Ian_Wilson"> + <name>Ian Wilson</name> + <uri>mailto:iwilson&cisco.com</uri> + <updated>2001-12-01</updated> + </person> + <person id="Ido_Rosen"> + <name>Ido Rosen</name> + <uri>mailto:ido&kernel.org</uri> + <updated>2021-03-23</updated> + </person> + <person id="Instinet"> + <org>Instinet</org> + <uri>mailto:uk.networks&instinet.co.uk</uri> + <updated>2019-08-29</updated> + </person> + <person id="Intercontinental_Exchange_Inc."> + <org>Intercontinental Exchange, Inc.</org> + <uri>mailto:riradmin&theice.com</uri> + <updated>2023-04-10</updated> + </person> + <person id="IOT_COMPANY_SOLUCOES_TECNOLOGICAS_LTDA"> + <org>IOT COMPANY SOLUCOES TECNOLOGICAS LTDA</org> + <uri>mailto:contato&wisehome.io</uri> + <updated>2023-08-09</updated> + </person> + <person id="IP_Admin"> + <name>IP Admin</name> + <uri>mailto:ipaddr&agilent.com</uri> + <updated>2015-10-12</updated> + </person> + <person id="IPadmin_-_Orange_Slovensko_a.s."> + <name>IPadmin - Orange Slovensko a.s.</name> + <uri>mailto:supervision&orange.sk</uri> + <updated>2021-06-11</updated> + </person> + <person id="ISE-Networks"> + <org>ISE-Networks</org> + <uri>mailto:isenetworks&ise.com</uri> + <updated>2016-05-06</updated> + </person> + <person id="Ishan_Wu"> + <name>Ishan Wu</name> + <uri>mailto:iwu&cisco.com</uri> + <updated>2000-03-01</updated> + </person> + <person id="Itamar_Gilad"> + <name>Itamar Gilad</name> + <uri>mailto:itamar&arootz.com</uri> + <updated>2007-08-31</updated> + </person> + <person id="J._Ryan_Stinnett"> + <name>J. Ryan Stinnett</name> + <uri>mailto:jryans&mozilla.com</uri> + <updated>2014-07-01</updated> + </person> + <person id="James_Crawford"> + <name>James Crawford</name> + <uri>mailto:jcrawford&metropol.net</uri> + <updated>1998-05-01</updated> + </person> + <person id="Jan_Drwal"> + <name>Jan Drwal</name> + <uri>mailto:Jan.Drwal&deutsche-boerse.com</uri> + <updated>2011-12-19</updated> + </person> + <person id="Jan_Vitek"> + <name>Jan Vitek</name> + <uri>mailto:vitek&selfservis.cz</uri> + <updated>2013-01-15</updated> + </person> + <person id="Japan_Exchange_Group"> + <org>Japan Exchange Group</org> + <uri>mailto:ITD-tradingsystem&jpx.co.jp</uri> + <updated>2021-09-07</updated> + </person> + <person id="Jasmine_Strong"> + <name>Jasmine Strong</name> + <uri>mailto:jasmine&heroicrobotics.com</uri> + <updated>2014-06-04</updated> + </person> + <person id="Jason_Ives"> + <name>Jason Ives</name> + <uri>mailto:noceurope&cboe.com</uri> + <updated>2019-02-13</updated> + </person> + <person id="Javier_Landin"> + <name>Javier Landin</name> + <uri>mailto:jlandin&directedge.com</uri> + <updated>2009-08-28</updated> + </person> + <person id="Jean-Marc_MAGNIER"> + <name>Jean-Marc MAGNIER</name> + <uri>mailto:f1sca&sfr.fr</uri> + <updated>2021-02-03</updated> + </person> + <person id="Jeff_Schenk"> + <name>Jeff Schenk</name> + <uri>mailto:Jeff.Schenk&intelliden.com</uri> + <updated>2006-03-31</updated> + </person> + <person id="Jerome_Albin"> + <name>Jerome Albin</name> + <uri>mailto:albin&taec.enet.dec.com</uri> + <updated>1997-06-01</updated> + </person> + <person id="Jerry_Whitaker"> + <name>Jerry Whitaker</name> + <uri>mailto:jwhitaker&atsc.org</uri> + <updated>2008-12-19</updated> + </person> + <person id="Jim_Ginsburg"> + <name>Jim Ginsburg</name> + <uri>mailto:JGinsburg&jonescorp.com</uri> + <updated>2007-10-31</updated> + </person> + <person id="Jim_Lyle"> + <name>Jim Lyle</name> + <uri>mailto:jim.lyle&siliconimage.com</uri> + <updated>2006-08-07</updated> + </person> + <person id="Jim_Toga"> + <name>Jim Toga</name> + <uri>mailto:jtoga&ibeam.jf.intel.com</uri> + <updated>1996-05-01</updated> + </person> + <person id="Joel_Lynch"> + <name>Joel Lynch</name> + <uri>mailto:joel.lynch&cnn.com</uri> + <updated>1999-04-01</updated> + </person> + <person id="Johan_Deleu"> + <name>Johan Deleu</name> + <uri>mailto:johan.deleu&alcatel.be</uri> + <updated>2002-02-01</updated> + </person> + <person id="John_Catherino"> + <name>John Catherino</name> + <uri>mailto:cajo&dev.java.net</uri> + <updated>2006-03-31</updated> + </person> + <person id="John_Gabler"> + <name>John Gabler</name> + <uri>mailto:john.gabler&ips.invensys.com</uri> + <updated>2007-07-06</updated> + </person> + <person id="John_Rittner"> + <name>John Rittner</name> + <uri>mailto:rittnerj&cboe.com</uri> + <updated>2012-04-10</updated> + </person> + <person id="John_Veizades"> + <name>John Veizades</name> + <uri>mailto:veizades&tgv.com</uri> + <updated>1995-05-01</updated> + </person> + <person id="Johnathan_Ryder"> + <name>Johnathan Ryder</name> + <org>London Stock Exchange Group</org> + <uri>mailto:jryder&lseg.com</uri> + <updated>2021-09-21</updated> + </person> + <person id="Jon_Crowcroft"> + <name>Jon Crowcroft</name> + <uri>mailto:jon&hocus.cs.ucl.ac.uk</uri> + <updated>1998-11-01</updated> + </person> + <person id="Jon_Gabriel"> + <name>Jon Gabriel</name> + <uri>mailto:grabriel&tivoli.com</uri> + <updated>1998-12-01</updated> + </person> + <person id="Jon_Postel"> + <name>Jon Postel</name> + <uri>mailto:postel&isi.edu</uri> + </person> + <person id="Jonathan_Niedfeldt"> + <name>Jonathan Niedfeldt</name> + <uri>mailto:jon&digitalacoustics.com</uri> + <updated>2008-02-22</updated> + </person> + <person id="Joost_Demarest"> + <name>Joost Demarest</name> + <org>KNX Association</org> + <uri>mailto:joost.demarest&knx.org</uri> + <updated>2023-08-23</updated> + </person> + <person id="Jose_Luis_Marocho"> + <name>Jose Luis Marocho</name> + <uri>mailto:73374.313&compuserve.com</uri> + <updated>1996-07-01</updated> + </person> + <person id="Juan_Ayas"> + <name>Juan Ayas</name> + <uri>mailto:jayas&lda-audiotech.com</uri> + <updated>2018-10-17</updated> + </person> + <person id="Julian_Nevell"> + <name>Julian Nevell</name> + <uri>mailto:JNEVELL&vbs.bt.co.uk</uri> + <updated>1999-08-01</updated> + </person> + <person id="Justin_Beaman"> + <name>Justin Beaman</name> + <uri>mailto:justin.beaman&midwestvideosolutions.com</uri> + <updated>2022-06-09</updated> + </person> + <person id="Kalejdo_TV"> + <org>Kalejdo TV</org> + <uri>mailto:mikael.nyberg&kalejdo.tv</uri> + <updated>2022-08-31</updated> + </person> + <person id="Kang_Lee"> + <name>Kang Lee</name> + <uri>mailto:kang.lee&nist.gov</uri> + <updated>2007-02-02</updated> + </person> + <person id="Karen_Seo"> + <name>Karen Seo</name> + <uri>mailto:kseo&bbn.com</uri> + </person> + <person id="Karl_Elad"> + <name>Karl Elad</name> + <uri>mailto:karl.elad&intelsat.com</uri> + <updated>2006-03-31</updated> + </person> + <person id="Keith_Thompson"> + <name>Keith Thompson</name> + <uri>mailto:thompson&ridgeback.east.sun.com</uri> + <updated>2001-06-01</updated> + </person> + <person id="Kelly_Littlepage"> + <name>Kelly Littlepage</name> + <uri>mailto:kelly&onechronos.com</uri> + <updated>2023-08-29</updated> + </person> + <person id="Kevin_Gross"> + <name>Kevin Gross</name> + <uri>mailto:kvng&ieee.org</uri> + <updated>2010-03-12</updated> + </person> + <person id="Kevin_Gross_2"> + <name>Kevin Gross</name> + <uri>mailto:kevin.gross&avanw.com</uri> + <updated>2012-08-28</updated> + </person> + <person id="Kevin_McNicholas"> + <name>Kevin McNicholas</name> + <uri>mailto:kevin.mcnicholas&lucera.com</uri> + <updated>2022-02-17</updated> + </person> + <person id="KNX_Association"> + <org>KNX Association</org> + <uri>mailto:joost.demarest&knx.org</uri> + <updated>2023-08-23</updated> + </person> + <person id="KPN_IP_Office"> + <name>KPN IP Office</name> + <uri>mailto:kpn-ip-office&kpn.com</uri> + <updated>2011-04-18</updated> + </person> + <person id="Kristian_A_Bognaes"> + <name>Kristian A. Bognaes</name> + <uri>mailto:kristian.bognaes&norman.com</uri> + <updated>2014-01-08</updated> + </person> + <person id="Lau_Wei_Lun"> + <name>Lau Wei Lun</name> + <uri>mailto:weilun.lau&asianext.com</uri> + <updated>2023-03-03</updated> + </person> + <person id="LDA_Audio_Tech"> + <name>LDA Audio Tech</name> + <uri>mailto:info&lda-audiotech.com</uri> + <updated>2018-10-19</updated> + </person> + <person id="Lev_V._Cherednikov"> + <name>Lev V. Cherednikov</name> + <uri>mailto:lev.cherednikov&nbn-holding.ru</uri> + <updated>2014-04-12</updated> + </person> + <person id="Liming_Wei"> + <name>Liming Wei</name> + <uri>mailto:lwei&cisco.com</uri> + <updated>1998-10-01</updated> + </person> + <person id="LIRNEasia"> + <org>LIRNEasia</org> + <uri>mailto:nuwan&lirneasia.net</uri> + <updated>2020-10-07</updated> + </person> + <person id="Lloyd_Wood"> + <name>Lloyd Wood</name> + <uri>mailto:L.Wood&surrey.ac.uk</uri> + <updated>2011-03-17</updated> + </person> + <person id="LME_Networks"> + <name>LME Networks</name> + <org>London Metal Exchange</org> + <uri>mailto:LME.Network&lme.com</uri> + <updated>2023-04-27</updated> + </person> + <person id="London_Metal_Exchange"> + <org>London Metal Exchange</org> + <uri>mailto:LME.Network&lme.com</uri> + <updated>2023-04-27</updated> + </person> + <person id="London_Stock_Exchange_Group"> + <org>London Stock Exchange Group</org> + <uri>https://www.lseg.com</uri> + <updated>2021-09-21</updated> + </person> + <person id="LonMark_International"> + <org>LonMark International</org> + <uri>mailto:tech&lonmark.org</uri> + <updated>2018-11-19</updated> + </person> + <person id="Louis_Mamakos"> + <name>Louis Mamakos</name> + <uri>mailto:louie&uu.net</uri> + <updated>1997-03-01</updated> + </person> + <person id="Lucera_Financial_Infrastructures"> + <org>Lucera Financial Infrastructures</org> + <uri>mailto:support&lucera.com</uri> + <updated>2022-02-17</updated> + </person> + <person id="Madhav_Karhade"> + <name>Madhav Karhade</name> + <uri>mailto:Madhav.Karhade&wibhu.com</uri> + <updated>2003-05-01</updated> + </person> + <person id="Mark_Armstrong"> + <name>Mark Armstrong</name> + <uri>mailto:Mark.Armstrong&soleratec.com</uri> + <updated>2006-02-09</updated> + </person> + <person id="Mark_Bakke"> + <name>Mark Bakke</name> + <uri>mailto:mbakke&cisco.com</uri> + <updated>2001-12-01</updated> + </person> + <person id="Mark_Hamilton"> + <name>Mark Hamilton</name> + <uri>mailto:mah&spectralink.com</uri> + <updated>1998-11-01</updated> + </person> + <person id="Mark_Handley"> + <name>Mark Handley</name> + <uri>mailto:mjh&isi.edu</uri> + <updated>1998-12-01</updated> + </person> + <person id="Mark_Lewis"> + <name>Mark Lewis</name> + <uri>mailto:Mark_Lewis&ccm.jf.intel.com</uri> + <updated>1995-10-01</updated> + </person> + <person id="Mark_Lipford"> + <name>Mark Lipford</name> + <uri>mailto:mark.a.lipford&sprint.com</uri> + <updated>2006-07-11</updated> + </person> + <person id="Marlon_Berlin"> + <name>Marlon Berlin</name> + <uri>mailto:marlon.berlin&dns-net.de</uri> + <updated>2013-05-25</updated> + </person> + <person id="Martin_Forssen"> + <name>Martin Forssen</name> + <uri>mailto:maf&dtek.chalmers.se</uri> + </person> + <person id="Mary_Timm"> + <name>Mary Timm</name> + <uri>mailto:mary&xenoscience.com</uri> + <updated>1998-07-01</updated> + </person> + <person id="Masato_Shindoh"> + <name>Masato Shindoh</name> + <uri>mailto:jl11456&yamato.ibm.co.jp</uri> + <updated>1997-08-01</updated> + </person> + <person id="Matthew_Straight"> + <name>Matthew Straight</name> + <uri>mailto:matt_straight&yahoo.com</uri> + <updated>2007-03-01</updated> + </person> + <person id="Maurice_Robberson"> + <name>Maurice Robberson</name> + <uri>mailto:ceo&mediastreamusa.com</uri> + <updated>2006-09-15</updated> + </person> + <person id="Media_Systems_OOO"> + <org>Media Systems OOO</org> + <uri>mailto:noc&n3.ru</uri> + <updated>2021-10-22</updated> + </person> + <person id="Mellanox"> + <org>Mellanox Technologies, Inc.</org> + <uri>mailto:info&mellanox.com</uri> + <updated>2019-07-01</updated> + </person> + <person id="Meridian_Labs_LTD"> + <org>Meridian Labs LTD.</org> + <uri>mailto:mark.wood&meridianlabs.org</uri> + <updated>2020-10-07</updated> + </person> + <person id="MIAX"> + <org>Miami International Security Exchange</org> + <uri>mailto:networking&miami-holdings.com</uri> + <updated>2023-05-24</updated> + </person> + <person id="Michael_Caravetta"> + <name>Michael Caravetta</name> + <uri>mailto:Network_Reps&tsx.com</uri> + <updated>2013-06-03</updated> + </person> + <person id="Michael_DeMoney"> + <name>Michael DeMoney</name> + <uri>mailto:demoney&eng.sun.com</uri> + <updated>1997-04-01</updated> + </person> + <person id="Michael_Dolan"> + <name>Michael Dolan</name> + <uri>mailto:miked&tbt.com</uri> + <updated>2003-10-01</updated> + </person> + <person id="Michael_Lyle"> + <name>Michael Lyle</name> + <uri>mailto:protocols&translattice.com</uri> + <updated>2009-11-11</updated> + </person> + <person id="Michael_Rosenberg"> + <name>Michael Rosenberg</name> + <uri>mailto:michael.rosenberg&nasdaqomx.com</uri> + <updated>2012-03-15</updated> + </person> + <person id="Michael_Wang"> + <name>Michael Wang</name> + <uri>mailto:Michael.Wang&usa.xerox.com</uri> + <updated>1999-03-01</updated> + </person> + <person id="Midwest_Video_Solutions"> + <org>Midwest Video Solutions</org> + <uri>mailto:support&midwestvideosolutions.com</uri> + <updated>2019-11-13</updated> + </person> + <person id="Mika_Uusitalo"> + <name>Mika Uusitalo</name> + <uri>mailto:msu&xingtech.com</uri> + <updated>1997-04-01</updated> + </person> + <person id="Mike_King"> + <name>Mike King</name> + <uri>mailto:mike.king&philips.com</uri> + <updated>2019-02-07</updated> + </person> + <person id="Mike_Pontillo"> + <name>Mike Pontillo</name> + <uri>mailto:mike.pontillo&canonical.com</uri> + <updated>2017-05-19</updated> + </person> + <person id="Mike_Rodbell"> + <name>Mike Rodbell</name> + <uri>mailto:mrodbell&ciena.com</uri> + <updated>1997-01-01</updated> + </person> + <person id="Mike_Roper"> + <name>Mike Roper</name> + <uri>mailto:mroper&8x8.com</uri> + <updated>1999-09-01</updated> + </person> + <person id="Mike_Velten"> + <name>Mike Velten</name> + <uri>mailto:mike_velten&liebert.com</uri> + <updated>1999-01-01</updated> + </person> + <person id="Moe_Singh"> + <name>Moe Singh</name> + <uri>mailto:moesingh&hotmail.com</uri> + <updated>2009-09-24</updated> + </person> + <person id="Mohammed_Raoof_Fadda"> + <name>Mohammed Raoof Fadda</name> + <uri>mailto:raoof_fadda&hotmail.com</uri> + <updated>2023-06-09</updated> + </person> + <person id="Morten_Lindeman"> + <name>Morten Lindeman</name> + <uri>mailto:Morten.Lindeman&os.telia.no</uri> + <updated>1999-03-01</updated> + </person> + <person id="Morteza_Kalhour"> + <name>Morteza Kalhour</name> + <uri>mailto:morteza.kalhour&nokia.com</uri> + <updated>2002-10-01</updated> + </person> + <person id="Nadine_Guillaume"> + <name>Nadine Guillaume</name> + <uri>mailto:nadine.guillaume&sciatl.com</uri> + <updated>2005-02-01</updated> + </person> + <person id="Neal_Lawrence"> + <name>Neal Lawrence</name> + <uri>mailto:neal.lawrence&a2x.co.za</uri> + <updated>2017-06-02</updated> + </person> + <person id="Nedelcho_Stanev"> + <name>Nedelcho Stanev</name> + <uri>mailto:nstanev&csoft.bg</uri> + <updated>1999-05-01</updated> + </person> + <person id="NE-TEAM_at_telecomsys.com"> + <name>NE-TEAM_at_telecomsys.com</name> + <uri>mailto:NE-TEAM&telecomsys.com</uri> + <updated>2014-11-07</updated> + </person> + <person id="Nick_Barendt"> + <name>Nick Barendt</name> + <uri>mailto:nbarendt&vxitech.com</uri> + <updated>2005-11-01</updated> + </person> + <person id="Nigel_Thompson"> + <name>Nigel Thompson</name> + <uri>mailto:nigelt&tribal.com</uri> + <updated>1999-01-01</updated> + </person> + <person id="OCX_Group_Inc"> + <org>OCX Group Inc</org> + <uri>mailto:noc&onechronos.com</uri> + <updated>2023-08-29</updated> + </person> + <person id="Oliver_Lewis"> + <name>Oliver Lewis</name> + <uri>mailto:o.lewis&icerobotics.co.uk</uri> + <updated>2006-07-11</updated> + </person> + <person id="OPC_Foundation"> + <org>OPC Foundation</org> + <uri>mailto:sysadmin&opcfoundation.org</uri> + <updated>2019-08-19</updated> + </person> + <person id="OSPF_WG_Chairs"> + <name>OSPF WG Chairs</name> + <uri>mailto:ospf-chairs&ietf.org</uri> + </person> + <person id="Oyvind_H_Olsen"> + <name>Oyvind H. Olsen</name> + <uri>mailto:oyvind-hollup.olsen&canaldigital.com</uri> + <updated>2007-09-12</updated> + </person> + <person id="Paolo_Strazzera"> + <name>Paolo Strazzera</name> + <uri>mailto:p.strazzera&telematica.it</uri> + <updated>1999-06-01</updated> + </person> + <person id="Patrick_Cipiere"> + <name>Patrick Cipiere</name> + <uri>mailto:Patrick.Cipiere&udcast.com</uri> + <updated>2001-01-01</updated> + </person> + <person id="Paul_Langille"> + <name>Paul Langille</name> + <uri>mailto:plangille&dnpg.com</uri> + <updated>2007-01-17</updated> + </person> + <person id="Paul_Roberts"> + <name>Paul Roberts</name> + <uri>mailto:networks&aquis.eu</uri> + <updated>2021-12-21</updated> + </person> + <person id="Paul_Suhler"> + <name>Paul Suhler</name> + <uri>mailto:paul.suhler&quantum.com</uri> + <updated>2009-05-12</updated> + </person> + <person id="Paul_Wallner"> + <name>Paul Wallner</name> + <uri>mailto:paul.wallner&wienstrom.at</uri> + <updated>2010-09-14</updated> + </person> + <person id="Paul_Wissenbach"> + <name>Paul Wissenbach</name> + <uri>mailto:paulwi&vnd.tek.com</uri> + <updated>1997-06-01</updated> + </person> + <person id="Peter_Aronson"> + <name>Peter Aronson</name> + <uri>mailto:paronson&esri.com</uri> + <updated>1998-08-01</updated> + </person> + <person id="Peter_Parnes"> + <name>Peter Parnes</name> + <uri>mailto:peppar&marratech.com</uri> + <updated>2000-02-01</updated> + </person> + <person id="Peter_White"> + <name>Peter White</name> + <uri>mailto:peter_white&3com.com</uri> + <updated>1999-04-01</updated> + </person> + <person id="Philips_Healthcare"> + <org>Philips Healthcare</org> + <uri>mailto:bill.holden&philips.com</uri> + <updated>2019-02-07</updated> + </person> + <person id="Pico"> + <org>Pico</org> + <uri>mailto:sales&pico.net</uri> + <updated>2020-07-22</updated> + </person> + <person id="Pico_Sales"> + <name>Pico Sales</name> + <uri>mailto:sales&pico.net</uri> + <updated>2020-07-22</updated> + </person> + <person id="Pierre_Oliver"> + <name>Pierre Oliver</name> + <uri>mailto:polivier&calamp.com</uri> + <updated>2011-06-06</updated> + </person> + <person id="Piers_Scannell"> + <name>Piers Scannell</name> + <uri>mailto:piers&globecastne.com</uri> + <updated>2000-03-01</updated> + </person> + <person id="Pilz"> + <org>Pilz GmbH and Co. KG</org> + <uri>mailto:pilz.gmbh&pilz.de</uri> + <updated>2009-03-17</updated> + </person> + <person id="Prakash_Banthia"> + <name>Prakash Banthia</name> + <uri>mailto:prakash_banthia&3com.com</uri> + <updated>1998-09-01</updated> + </person> + <person id="Ralph_Kammerlander"> + <name>Ralph Kammerlander</name> + <uri>mailto:ralph.kammerlander&khe.siemens.de</uri> + <updated>2000-06-01</updated> + </person> + <person id="Ram_Iyer"> + <name>Ram Iyer</name> + <uri>mailto:ram&aaccorp.com</uri> + <updated>1998-03-01</updated> + </person> + <person id="Rami_Chalhoub"> + <name>Rami Chalhoub</name> + <uri>mailto:itd&bse.com.lb</uri> + <updated>2019-01-17</updated> + </person> + <person id="Ramp_Holdings"> + <org>Ramp Holdings</org> + <uri>mailto:ops&ramp.com</uri> + <updated>2019-03-28</updated> + </person> + <person id="Raymond_Shum"> + <name>Raymond Shum</name> + <uri>mailto:rshum&ms.com</uri> + <updated>1998-04-01</updated> + </person> + <person id="Richard_Hodges"> + <name>Richard Hodges</name> + <uri>mailto:rh&source.net</uri> + <updated>1999-03-01</updated> + </person> + <person id="Richard_Zulch"> + <name>Richard Zulch</name> + <uri>mailto:richard_zulch&dantz.com</uri> + <updated>2004-05-01</updated> + </person> + <person id="RIR_Admin"> + <name>RIR Admin</name> + <uri>mailto:riradmin&theice.com</uri> + <updated>2023-04-10</updated> + </person> + <person id="Rob_Janssen"> + <name>Rob Janssen</name> + <uri>mailto:rob&pe1chl.ampr.org</uri> + <updated>1995-01-01</updated> + </person> + <person id="Robert_Hodgson"> + <name>Robert Hodgson</name> + <uri>mailto:robert&paratek.co.uk</uri> + <updated>2001-12-01</updated> + </person> + <person id="Robert_Sautter"> + <name>Robert Sautter</name> + <uri>mailto:rsautter&acdnj.itt.com</uri> + <updated>1999-08-01</updated> + </person> + <person id="Robert_Sliwinski"> + <name>Robert Sliwinski</name> + <uri>mailto:sliwinre&mail1st.com</uri> + <updated>2000-02-01</updated> + </person> + <person id="Robert_Taylor"> + <name>Robert Taylor</name> + <uri>mailto:rtaylor&digicelgroup.com</uri> + <updated>2016-09-29</updated> + </person> + <person id="Roberto_Costa_Simoes"> + <name>Roberto Costa Simoes</name> + <uri>mailto:rcosta&bvmf.com.br</uri> + <updated>2010-08-18</updated> + </person> + <person id="RTP_Media"> + <org>RTP Media</org> + <uri>mailto:cgs&rtp.media</uri> + <updated>2021-07-30</updated> + </person> + <person id="Ruben_Hernandez"> + <name>Ruben Hernandez</name> + <uri>mailto:ruben.hernandez&tradeweb.com</uri> + <updated>2022-01-06</updated> + </person> + <person id="Ryon_Coleman"> + <name>Ryon Coleman</name> + <uri>mailto:rcoleman&3eti.com</uri> + <updated>2006-04-11</updated> + </person> + <person id="SEIKO_EPSON_Corp"> + <org>SEIKO EPSON Corp</org> + <uri>mailto:ogata.hideaki&exc.epson.co.jp</uri> + <updated>2005-01-01</updated> + </person> + <person id="Sakon_Kittivatcharapong"> + <name>Sakon Kittivatcharapong</name> + <uri>mailto:sakonk&cscoms.net</uri> + <updated>2000-05-01</updated> + </person> + <person id="Sarunas_Brakauskas"> + <name>Sarunas Brakauskas</name> + <uri>mailto:sbrakaus&cme.com</uri> + <updated>2007-07-17</updated> + </person> + <person id="Scott_Watson"> + <name>Scott Watson</name> + <uri>mailto:scott&disney.com</uri> + <updated>1997-08-01</updated> + </person> + <person id="Semtech_Corporation"> + <org>Semtech Corporation</org> + <uri>mailto:aptovision_support&semtech.com</uri> + <updated>2019-02-22</updated> + </person> + <person id="Sergey_Shulgin"> + <name>Sergey Shulgin</name> + <uri>mailto:sshulgin&pinkotc.com</uri> + <updated>2008-08-12</updated> + </person> + <person id="Shachar_Dor"> + <name>Shachar Dor</name> + <uri>mailto:shachard&mellanox.com</uri> + <updated>2019-07-01</updated> + </person> + <person id="Shai_Revzen"> + <name>Shai Revzen</name> + <uri>mailto:shai.revzen&harmonicinc.com</uri> + <updated>1999-04-01</updated> + </person> + <person id="Shane_Rowatt"> + <name>Shane Rowatt</name> + <uri>mailto:shane.rowatt&star.com.au</uri> + <updated>1997-03-01</updated> + </person> + <person id="Shivaun_Albright"> + <name>Shivaun Albright</name> + <uri>mailto:shivaun_albright&hp.com</uri> + <updated>1997-07-01</updated> + </person> + <person id="Simon_Barber"> + <name>Simon Barber</name> + <uri>mailto:simon.barber&parc.com</uri> + <updated>2009-09-24</updated> + </person> + <person id="Soren_Martin_Sorensen"> + <name>Soren Martin Sorensen</name> + <uri>mailto:sms&energimidt.dk</uri> + <updated>2006-08-07</updated> + </person> + <person id="Stacey_O_Rourke"> + <name>Stacey O'Rourke</name> + <uri>mailto:stacey&network-alchemy.com</uri> + <updated>1999-08-01</updated> + </person> + <person id="Stacey_O_Rourke_2"> + <name>Stacey O'Rourke</name> + <uri>mailto:stacey&cips.nokia.com</uri> + <updated>2001-01-01</updated> + </person> + <person id="Stephan_Wasserroth"> + <name>Stephan Wasserroth</name> + <uri>mailto:wasserroth&fokus.gmd.de</uri> + <updated>2000-07-01</updated> + </person> + <person id="Stephen_Dunne"> + <name>Stephen Dunne</name> + <uri>mailto:sdun&isma.co.uk</uri> + <updated>1997-01-01</updated> + </person> + <person id="Stephen_Hanna"> + <name>Stephen Hanna</name> + <uri>mailto:steve.hanna&sun.com</uri> + <updated>2000-07-01</updated> + </person> + <person id="Stephen_Ray_Middleton"> + <name>Stephen Ray Middleton</name> + <uri>mailto:stephen.r.middleton&verizon.com</uri> + <updated>2015-03-23</updated> + </person> + <person id="Stephen_T_Lyda"> + <name>Stephen T. Lyda</name> + <uri>mailto:slyda&emsg.com</uri> + <updated>2000-02-01</updated> + </person> + <person id="Steve_Casner"> + <name>Steve Casner</name> + <uri>mailto:casner&precept.com</uri> + </person> + <person id="Steve_Casner_2"> + <name>Steve Casner</name> + <uri>mailto:casner&isi.edu</uri> + <updated>1995-01-01</updated> + </person> + <person id="Steve_Deering"> + <name>Steve Deering</name> + <uri>mailto:deering&cisco.com</uri> + <updated>1999-10-01</updated> + </person> + <person id="Steve_Deering_2"> + <name>Steve Deering</name> + <uri>mailto:deering&parc.xerox.com</uri> + </person> + <person id="Steve_Loizou"> + <name>Steve Loizou</name> + <uri>mailto:steve.loizou&bgcpartners.com</uri> + <updated>2023-01-18</updated> + </person> + <person id="Steve_Polishinski"> + <name>Steve Polishinski</name> + <uri>mailto:spolishinski&etcconnect.com</uri> + <updated>2000-03-01</updated> + </person> + <person id="Stuart_Kerry"> + <name>Stuart Kerry</name> + <uri>mailto:stuart.kerry&philips.com</uri> + <updated>2003-01-01</updated> + </person> + <person id="Svetlana_Kachintseva"> + <name>Svetlana Kachintseva</name> + <uri>mailto:skachintseva&hanweck.com</uri> + <updated>2019-09-12</updated> + </person> + <person id="Susie_Armstrong"> + <name>Susie Armstrong</name> + <uri>mailto:Armstrong.wbst128&xerox.com</uri> + </person> + <person id="Takeshi_Saito"> + <name>Takeshi Saito</name> + <uri>mailto:takeshi.saito&toshiba.co.jp</uri> + <updated>2003-02-01</updated> + </person> + <person id="Technicolor_NL_NOC"> + <name>Technicolor NL NOC</name> + <uri>mailto:noc&technicolor.com</uri> + <updated>2009-12-23</updated> + </person> + <person id="Telia-Norway-Get-NOC"> + <name>Telia-Norway-Get-NOC</name> + <uri>mailto:noc&get.no</uri> + <updated>2019-08-28</updated> + </person> + <person id="Terry_Gibson"> + <name>Terry Gibson</name> + <uri>mailto:terry.gibson&sun.com</uri> + <updated>1997-08-01</updated> + </person> + <person id="Tetsuo_Hoshi"> + <name>Tetsuo Hoshi</name> + <uri>mailto:tetsuo.hoshi&jp.yokogawa.com</uri> + <updated>2004-06-01</updated> + </person> + <person id="Thomas_Sörlin"> + <name>Thomas Sörlin</name> + <uri>mailto:ts&pergas.se</uri> + <updated>2022-08-31</updated> + </person> + <person id="Tim_DeBaillie"> + <name>Tim DeBaillie</name> + <uri>mailto:debaillie&ciholas.com</uri> + <updated>2006-11-30</updated> + </person> + <person id="Tim_Gorsline"> + <name>Tim Gorsline</name> + <uri>mailto:tgorsline&bats.com</uri> + <updated>2017-06-23</updated> + </person> + <person id="TMX"> + <name>TMX</name> + <uri>mailto:shelley.lindsay&tmx.com</uri> + <updated>2023-04-14</updated> + </person> + <person id="TMX_Network_Engineering"> + <name>TMX Network Engineering</name> + <uri>mailto:network.engineering&tmx.com</uri> + <updated>2023-04-14</updated> + </person> + <person id="Tom_Ballister"> + <name>Tom Ballister</name> + <uri>mailto:tom&ballister.com</uri> + <updated>2021-06-11</updated> + </person> + <person id="Tom_Blank"> + <name>Tom Blank</name> + <uri>mailto:tomblank&microsoft.com</uri> + <updated>1996-11-01</updated> + </person> + <person id="Tom_White"> + <name>Tom White</name> + <uri>mailto:info&midi.org</uri> + <updated>2011-11-02</updated> + </person> + <person id="Tony_Ballardie"> + <name>Tony Ballardie</name> + <uri>mailto:A.Ballardie&cs.ucl.ac.uk</uri> + <updated>1997-02-01</updated> + </person> + <person id="Tony_Barber"> + <name>Tony Barber</name> + <uri>mailto:tony.barber&wcom.com</uri> + <updated>1997-01-01</updated> + </person> + <person id="Tony_Przygienda"> + <name>Tony Przygienda</name> + <uri>mailto:prz&siara.com</uri> + <updated>1999-10-01</updated> + </person> + <person id="Tony_Wong"> + <name>Tony Wong</name> + <uri>mailto:wongt&ms.com</uri> + <updated>1998-07-01</updated> + </person> + <person id="Tradeweb_Markets_Inc"> + <name>Tradeweb Markets Inc</name> + <uri>mailto:usnetworkoperations&tradeweb.com</uri> + <updated>2022-01-19</updated> + </person> + <person id="Tradition_Network_Operations_and_Command_Center"> + <name>Tradition Network Operations and Command Center</name> + <uri>mailto:SH-Networking&tradition.com</uri> + <updated>2010-09-22</updated> + </person> + <person id="TV_System_Administrators"> + <name>TV System Administrators</name> + <org>Ålands Telekommunikation Ab</org> + <uri>mailto:tv-noc&alcom.ax</uri> + <updated>2019-02-28</updated> + </person> + <person id="UPnP_Forum"> + <org>UPnP Forum</org> + <uri>mailto:upnpadmin&forum.upnp.org</uri> + <updated>2006-06-27</updated> + </person> + <person id="Vadim_B._Kantor"> + <name>Vadim B. Kantor</name> + <uri>mailto:v.kantor&gksks.ru</uri> + <updated>2021-07-30</updated> + </person> + <person id="Vanya_Levy"> + <name>Vanya Levy</name> + <uri>mailto:vlevy&semtech.com</uri> + <updated>2019-02-20</updated> + </person> + <person id="Victor_Volpe"> + <name>Victor Volpe</name> + <uri>mailto:vvolpe&smtp.microcom.com</uri> + <updated>1997-10-01</updated> + </person> + <person id="Vivoh"> + <org>Vivoh</org> + <uri>mailto:gmarzot&vivoh.com</uri> + <updated>2023-10-16</updated> + </person> + <person id="Vladimir_Shishkov"> + <name>Vladimir Shishkov</name> + <uri>mailto:v.shishkov&vconnect.ru</uri> + <updated>2017-02-17</updated> + </person> + <person id="Wally_Beddoe"> + <name>Wally Beddoe</name> + <uri>mailto:WBeddoe&tkusa.com</uri> + <updated>2003-04-01</updated> + </person> + <person id="Walter_Wallach"> + <name>Walter Wallach</name> + <uri>mailto:walt&sumatech.com</uri> + <updated>1999-07-01</updated> + </person> + <person id="Wayne_Carr"> + <name>Wayne Carr</name> + <uri>mailto:Wayne_Carr&ccm.intel.com</uri> + <updated>1997-12-01</updated> + </person> + <person id="Wayne_Wenyu_Liu"> + <name>Wayne Wenyu Liu</name> + <uri>mailto:wayne.wenyu.liu&gmail.com</uri> + <updated>2012-06-12</updated> + </person> + <person id="Wenjie_Peng"> + <name>Wenjie Peng</name> + <uri>mailto:wpeng&tts.telerate.com</uri> + <updated>1997-01-01</updated> + </person> + <person id="Werner_Vogels"> + <name>Werner Vogels</name> + <uri>mailto:vogels&rnets.com</uri> + <updated>1998-08-01</updated> + </person> + <person id="Wieland_Holdfelder"> + <name>Wieland Holdfelder</name> + <uri>mailto:whd&pi4.informatik.uni-mannheim.de</uri> + <updated>1997-01-01</updated> + </person> + <person id="Xiaoyu_Zhou"> + <name>Xiaoyu Zhou</name> + <uri>mailto:zhouxyi&lenovo.com</uri> + <updated>2009-01-20</updated> + </person> + <person id="Xie_Shao"> + <name>Xie Shao</name> + <uri>mailto:xieshao&tnn.cc</uri> + <updated>2023-01-18</updated> + </person> + <person id="Yea_Uang"> + <name>Yea Uang</name> + <uri>mailto:uang&force.decnet.lockheed.com</uri> + <updated>1994-11-01</updated> + </person> + <person id="Yossi_Gal"> + <name>Yossi Gal</name> + <uri>mailto:yossi&gilat.com</uri> + <updated>1998-02-01</updated> + </person> + <person id="Zaklina_Petkovic"> + <name>Zaklina Petkovic</name> + <uri>mailto:zaklina.petkovic&aequin.com</uri> + <updated>2014-05-16</updated> + </person> + <person id="Zia_Bhatti"> + <name>Zia Bhatti</name> + <uri>mailto:zia&netright.com</uri> + <updated>1998-09-01</updated> + </person> + </people> +</registry> diff --git a/netaddr/ip/nmap.py b/netaddr/ip/nmap.py new file mode 100644 index 0000000..8e9e0c1 --- /dev/null +++ b/netaddr/ip/nmap.py @@ -0,0 +1,117 @@ +#----------------------------------------------------------------------------- +# Copyright (c) 2008 by David P. D. Moss. All rights reserved. +# +# Released under the BSD license. See the LICENSE file for details. +#----------------------------------------------------------------------------- +""" +Routines for dealing with nmap-style IPv4 address ranges. + +Based on nmap's Target Specification :- + + http://nmap.org/book/man-target-specification.html +""" + +from netaddr.core import AddrFormatError +from netaddr.ip import IPAddress, IPNetwork +from netaddr.compat import _iter_range, _is_str, _iter_next + + +def _nmap_octet_target_values(spec): + # Generates sequence of values for an individual octet as defined in the + # nmap Target Specification. + values = set() + + for element in spec.split(','): + if '-' in element: + left, right = element.split('-', 1) + if not left: + left = 0 + if not right: + right = 255 + low = int(left) + high = int(right) + if not ((0 <= low <= 255) and (0 <= high <= 255)): + raise ValueError('octet value overflow for spec %s!' % (spec,)) + if low > high: + raise ValueError('left side of hyphen must be <= right %r' % (element,)) + for octet in _iter_range(low, high + 1): + values.add(octet) + else: + octet = int(element) + if not (0 <= octet <= 255): + raise ValueError('octet value overflow for spec %s!' % (spec,)) + values.add(octet) + + return sorted(values) + + +def _generate_nmap_octet_ranges(nmap_target_spec): + # Generate 4 lists containing all octets defined by a given nmap Target + # specification. + if not _is_str(nmap_target_spec): + raise TypeError('string expected, not %s' % type(nmap_target_spec)) + + if not nmap_target_spec: + raise ValueError('nmap target specification cannot be blank!') + + tokens = nmap_target_spec.split('.') + + if len(tokens) != 4: + raise AddrFormatError('invalid nmap range: %s' % (nmap_target_spec,)) + + return (_nmap_octet_target_values(tokens[0]), + _nmap_octet_target_values(tokens[1]), + _nmap_octet_target_values(tokens[2]), + _nmap_octet_target_values(tokens[3])) + + +def _parse_nmap_target_spec(target_spec): + if '/' in target_spec: + _, prefix = target_spec.split('/', 1) + if not (0 < int(prefix) < 33): + raise AddrFormatError('CIDR prefix expected, not %s' % (prefix,)) + net = IPNetwork(target_spec) + if net.version != 4: + raise AddrFormatError('CIDR only support for IPv4!') + for ip in net: + yield ip + elif ':' in target_spec: + # nmap only currently supports IPv6 addresses without prefixes. + yield IPAddress(target_spec) + else: + octet_ranges = _generate_nmap_octet_ranges(target_spec) + for w in octet_ranges[0]: + for x in octet_ranges[1]: + for y in octet_ranges[2]: + for z in octet_ranges[3]: + yield IPAddress("%d.%d.%d.%d" % (w, x, y, z), 4) + + +def valid_nmap_range(target_spec): + """ + :param target_spec: an nmap-style IP range target specification. + + :return: ``True`` if IP range target spec is valid, ``False`` otherwise. + """ + try: + _iter_next(_parse_nmap_target_spec(target_spec)) + return True + except (TypeError, ValueError, AddrFormatError): + pass + return False + + +def iter_nmap_range(*nmap_target_spec): + """ + An generator that yields IPAddress objects from defined by nmap target + specifications. + + See https://nmap.org/book/man-target-specification.html for details. + + :param \\*nmap_target_spec: one or more nmap IP range target specification. + + :return: an iterator producing IPAddress objects for each IP in the target spec(s). + """ + for target_spec in nmap_target_spec: + for addr in _parse_nmap_target_spec(target_spec): + yield addr diff --git a/netaddr/ip/rfc1924.py b/netaddr/ip/rfc1924.py new file mode 100644 index 0000000..54fb96c --- /dev/null +++ b/netaddr/ip/rfc1924.py @@ -0,0 +1,61 @@ +#----------------------------------------------------------------------------- +# Copyright (c) 2008 by David P. D. Moss. All rights reserved. +# +# Released under the BSD license. See the LICENSE file for details. +#----------------------------------------------------------------------------- +"""A basic implementation of RFC 1924 ;-)""" + +from netaddr.core import AddrFormatError +from netaddr.ip import IPAddress + +from netaddr.compat import _zip + + +def chr_range(low, high): + """Returns all characters between low and high chars.""" + return [chr(i) for i in range(ord(low), ord(high) + 1)] + +#: Base 85 integer index to character lookup table. +BASE_85 = ( + chr_range('0', '9') + chr_range('A', 'Z') + + chr_range('a', 'z') + + ['!', '#', '$', '%', '&', '(', ')', '*', '+', '-', ';', '<', '=', '>', + '?', '@', '^', '_', '`', '{', '|', '}', '~'] +) + +#: Base 85 digit to integer lookup table. +BASE_85_DICT = dict(_zip(BASE_85, range(0, 86))) + + +def ipv6_to_base85(addr): + """Convert a regular IPv6 address to base 85.""" + ip = IPAddress(addr) + int_val = int(ip) + + remainder = [] + while int_val > 0: + remainder.append(int_val % 85) + int_val //= 85 + + encoded = ''.join([BASE_85[w] for w in reversed(remainder)]) + leading_zeroes = (20 - len(encoded)) * "0" + return leading_zeroes + encoded + + +def base85_to_ipv6(addr): + """ + Convert a base 85 IPv6 address to its hexadecimal format. + """ + tokens = list(addr) + + if len(tokens) != 20: + raise AddrFormatError('Invalid base 85 IPv6 address: %r' % (addr,)) + + result = 0 + for i, num in enumerate(reversed(tokens)): + num = BASE_85_DICT[num] + result += (num * 85 ** i) + + ip = IPAddress(result, 6) + + return str(ip) diff --git a/netaddr/ip/sets.py b/netaddr/ip/sets.py new file mode 100644 index 0000000..6db896d --- /dev/null +++ b/netaddr/ip/sets.py @@ -0,0 +1,748 @@ +#----------------------------------------------------------------------------- +# Copyright (c) 2008 by David P. D. Moss. All rights reserved. +# +# Released under the BSD license. See the LICENSE file for details. +#----------------------------------------------------------------------------- +"""Set based operations for IP addresses and subnets.""" + +import itertools as _itertools + +from netaddr.ip import (IPNetwork, IPAddress, IPRange, cidr_merge, + cidr_exclude, iprange_to_cidrs) + +from netaddr.compat import _sys_maxint, _dict_keys, _int_type + + +def _subtract(supernet, subnets, subnet_idx, ranges): + """Calculate IPSet([supernet]) - IPSet(subnets). + + Assumptions: subnets is sorted, subnet_idx points to the first + element in subnets that is a subnet of supernet. + + Results are appended to the ranges parameter as tuples of in format + (version, first, last). Return value is the first subnet_idx that + does not point to a subnet of supernet (or len(subnets) if all + subsequents items are a subnet of supernet). + """ + version = supernet._module.version + subnet = subnets[subnet_idx] + if subnet.first > supernet.first: + ranges.append((version, supernet.first, subnet.first - 1)) + + subnet_idx += 1 + prev_subnet = subnet + while subnet_idx < len(subnets): + cur_subnet = subnets[subnet_idx] + + if cur_subnet not in supernet: + break + if prev_subnet.last + 1 == cur_subnet.first: + # two adjacent, non-mergable IPNetworks + pass + else: + ranges.append((version, prev_subnet.last + 1, cur_subnet.first - 1)) + + subnet_idx += 1 + prev_subnet = cur_subnet + + first = prev_subnet.last + 1 + last = supernet.last + if first <= last: + ranges.append((version, first, last)) + + return subnet_idx + + +def _iter_merged_ranges(sorted_ranges): + """Iterate over sorted_ranges, merging where possible + + Sorted ranges must be a sorted iterable of (version, first, last) tuples. + Merging occurs for pairs like [(4, 10, 42), (4, 43, 100)] which is merged + into (4, 10, 100), and leads to return value + ( IPAddress(10, 4), IPAddress(100, 4) ), which is suitable input for the + iprange_to_cidrs function. + """ + if not sorted_ranges: + return + + current_version, current_start, current_stop = sorted_ranges[0] + + for next_version, next_start, next_stop in sorted_ranges[1:]: + if next_start == current_stop + 1 and next_version == current_version: + # Can be merged. + current_stop = next_stop + continue + # Cannot be merged. + yield (IPAddress(current_start, current_version), + IPAddress(current_stop, current_version)) + current_start = next_start + current_stop = next_stop + current_version = next_version + yield (IPAddress(current_start, current_version), + IPAddress(current_stop, current_version)) + + +class IPSet(object): + """ + Represents an unordered collection (set) of unique IP addresses and + subnets. + + """ + __slots__ = ('_cidrs', '__weakref__') + + def __init__(self, iterable=None, flags=0): + """ + Constructor. + + :param iterable: (optional) an iterable containing IP addresses, + subnets or ranges. + + :param flags: decides which rules are applied to the interpretation + of the addr value. See the :class:`IPAddress` documentation + for supported constant values. + + """ + if isinstance(iterable, IPNetwork): + self._cidrs = {iterable.cidr: True} + elif isinstance(iterable, IPRange): + self._cidrs = dict.fromkeys( + iprange_to_cidrs(iterable[0], iterable[-1]), True) + elif isinstance(iterable, IPSet): + self._cidrs = dict.fromkeys(iterable.iter_cidrs(), True) + else: + self._cidrs = {} + if iterable is not None: + mergeable = [] + for addr in iterable: + if isinstance(addr, _int_type): + addr = IPAddress(addr, flags=flags) + mergeable.append(addr) + + for cidr in cidr_merge(mergeable): + self._cidrs[cidr] = True + + def __getstate__(self): + """:return: Pickled state of an ``IPSet`` object.""" + return tuple([cidr.__getstate__() for cidr in self._cidrs]) + + def __setstate__(self, state): + """ + :param state: data used to unpickle a pickled ``IPSet`` object. + + """ + self._cidrs = dict.fromkeys( + (IPNetwork((value, prefixlen), version=version) + for value, prefixlen, version in state), + True) + + def _compact_single_network(self, added_network): + """ + Same as compact(), but assume that added_network is the only change and + that this IPSet was properly compacted before added_network was added. + This allows to perform compaction much faster. added_network must + already be present in self._cidrs. + """ + added_first = added_network.first + added_last = added_network.last + added_version = added_network.version + + # Check for supernets and subnets of added_network. + if added_network._prefixlen == added_network._module.width: + # This is a single IP address, i.e. /32 for IPv4 or /128 for IPv6. + # It does not have any subnets, so we only need to check for its + # potential supernets. + for potential_supernet in added_network.supernet(): + if potential_supernet in self._cidrs: + del self._cidrs[added_network] + return + else: + # IPNetworks from self._cidrs that are subnets of added_network. + to_remove = [] + for cidr in self._cidrs: + if (cidr._module.version != added_version or cidr == added_network): + # We found added_network or some network of a different version. + continue + first = cidr.first + last = cidr.last + if first >= added_first and last <= added_last: + # cidr is a subnet of added_network. Remember to remove it. + to_remove.append(cidr) + elif first <= added_first and last >= added_last: + # cidr is a supernet of added_network. Remove added_network. + del self._cidrs[added_network] + # This IPSet was properly compacted before. Since added_network + # is removed now, it must again be properly compacted -> done. + assert (not to_remove) + return + for item in to_remove: + del self._cidrs[item] + + # Check if added_network can be merged with another network. + + # Note that merging can only happen between networks of the same + # prefixlen. This just leaves 2 candidates: The IPNetworks just before + # and just after the added_network. + # This can be reduced to 1 candidate: 10.0.0.0/24 and 10.0.1.0/24 can + # be merged into into 10.0.0.0/23. But 10.0.1.0/24 and 10.0.2.0/24 + # cannot be merged. With only 1 candidate, we might as well make a + # dictionary lookup. + shift_width = added_network._module.width - added_network.prefixlen + while added_network.prefixlen != 0: + # figure out if the least significant bit of the network part is 0 or 1. + the_bit = (added_network._value >> shift_width) & 1 + if the_bit: + candidate = added_network.previous() + else: + candidate = added_network.next() + + if candidate not in self._cidrs: + # The only possible merge does not work -> merge done + return + # Remove added_network&candidate, add merged network. + del self._cidrs[candidate] + del self._cidrs[added_network] + added_network.prefixlen -= 1 + # Be sure that we set the host bits to 0 when we move the prefixlen. + # Otherwise, adding 255.255.255.255/32 will result in a merged + # 255.255.255.255/24 network, but we want 255.255.255.0/24. + shift_width += 1 + added_network._value = (added_network._value >> shift_width) << shift_width + self._cidrs[added_network] = True + + def compact(self): + """ + Compact internal list of `IPNetwork` objects using a CIDR merge. + """ + cidrs = cidr_merge(self._cidrs) + self._cidrs = dict.fromkeys(cidrs, True) + + def __hash__(self): + """ + Raises ``TypeError`` if this method is called. + + .. note:: IPSet objects are not hashable and cannot be used as \ + dictionary keys or as members of other sets. \ + """ + raise TypeError('IP sets are unhashable!') + + def __contains__(self, ip): + """ + :param ip: An IP address or subnet. + + :return: ``True`` if IP address or subnet is a member of this IP set. + """ + # Iterating over self._cidrs is an O(n) operation: 1000 items in + # self._cidrs would mean 1000 loops. Iterating over all possible + # supernets loops at most 32 times for IPv4 or 128 times for IPv6, + # no matter how many CIDRs this object contains. + supernet = IPNetwork(ip) + if supernet in self._cidrs: + return True + while supernet._prefixlen: + supernet._prefixlen -= 1 + if supernet in self._cidrs: + return True + return False + + def __nonzero__(self): + """Return True if IPSet contains at least one IP, else False""" + return bool(self._cidrs) + + __bool__ = __nonzero__ # Python 3.x. + + def __iter__(self): + """ + :return: an iterator over the IP addresses within this IP set. + """ + return _itertools.chain(*sorted(self._cidrs)) + + def iter_cidrs(self): + """ + :return: an iterator over individual IP subnets within this IP set. + """ + return sorted(self._cidrs) + + def add(self, addr, flags=0): + """ + Adds an IP address or subnet or IPRange to this IP set. Has no effect if + it is already present. + + Note that where possible the IP address or subnet is merged with other + members of the set to form more concise CIDR blocks. + + :param addr: An IP address or subnet in either string or object form, or + an IPRange object. + + :param flags: decides which rules are applied to the interpretation + of the addr value. See the :class:`IPAddress` documentation + for supported constant values. + + """ + if isinstance(addr, IPRange): + new_cidrs = dict.fromkeys( + iprange_to_cidrs(addr[0], addr[-1]), True) + self._cidrs.update(new_cidrs) + self.compact() + return + if isinstance(addr, IPNetwork): + # Networks like 10.1.2.3/8 need to be normalized to 10.0.0.0/8 + addr = addr.cidr + elif isinstance(addr, _int_type): + addr = IPNetwork(IPAddress(addr, flags=flags)) + else: + addr = IPNetwork(addr) + + self._cidrs[addr] = True + self._compact_single_network(addr) + + def remove(self, addr, flags=0): + """ + Removes an IP address or subnet or IPRange from this IP set. Does + nothing if it is not already a member. + + Note that this method behaves more like discard() found in regular + Python sets because it doesn't raise KeyError exceptions if the + IP address or subnet is question does not exist. It doesn't make sense + to fully emulate that behaviour here as IP sets contain groups of + individual IP addresses as individual set members using IPNetwork + objects. + + :param addr: An IP address or subnet, or an IPRange. + + :param flags: decides which rules are applied to the interpretation + of the addr value. See the :class:`IPAddress` documentation + for supported constant values. + + """ + if isinstance(addr, IPRange): + cidrs = iprange_to_cidrs(addr[0], addr[-1]) + for cidr in cidrs: + self.remove(cidr) + return + + if isinstance(addr, _int_type): + addr = IPAddress(addr, flags=flags) + else: + addr = IPNetwork(addr) + + # This add() is required for address blocks provided that are larger + # than blocks found within the set but have overlaps. e.g. :- + # + # >>> IPSet(['192.0.2.0/24']).remove('192.0.2.0/23') + # IPSet([]) + # + self.add(addr) + + remainder = None + matching_cidr = None + + # Search for a matching CIDR and exclude IP from it. + for cidr in self._cidrs: + if addr in cidr: + remainder = cidr_exclude(cidr, addr) + matching_cidr = cidr + break + + # Replace matching CIDR with remaining CIDR elements. + if remainder is not None: + del self._cidrs[matching_cidr] + for cidr in remainder: + self._cidrs[cidr] = True + # No call to self.compact() is needed. Removing an IPNetwork cannot + # create mergeable networks. + + def pop(self): + """ + Removes and returns an arbitrary IP address or subnet from this IP + set. + + :return: An IP address or subnet. + """ + return self._cidrs.popitem()[0] + + def isdisjoint(self, other): + """ + :param other: an IP set. + + :return: ``True`` if this IP set has no elements (IP addresses + or subnets) in common with other. Intersection *must* be an + empty set. + """ + result = self.intersection(other) + return not result + + def copy(self): + """:return: a shallow copy of this IP set.""" + obj_copy = self.__class__() + obj_copy._cidrs.update(self._cidrs) + return obj_copy + + def update(self, iterable, flags=0): + """ + Update the contents of this IP set with the union of itself and + other IP set. + + :param iterable: an iterable containing IP addresses, subnets or ranges. + + :param flags: decides which rules are applied to the interpretation + of the addr value. See the :class:`IPAddress` documentation + for supported constant values. + + """ + if isinstance(iterable, IPSet): + self._cidrs = dict.fromkeys( + (ip for ip in cidr_merge(_dict_keys(self._cidrs) + + _dict_keys(iterable._cidrs))), True) + return + elif isinstance(iterable, (IPNetwork, IPRange)): + self.add(iterable) + return + + if not hasattr(iterable, '__iter__'): + raise TypeError('an iterable was expected!') + # An iterable containing IP addresses or subnets. + mergeable = [] + for addr in iterable: + if isinstance(addr, _int_type): + addr = IPAddress(addr, flags=flags) + mergeable.append(addr) + + for cidr in cidr_merge(_dict_keys(self._cidrs) + mergeable): + self._cidrs[cidr] = True + + self.compact() + + def clear(self): + """Remove all IP addresses and subnets from this IP set.""" + self._cidrs = {} + + def __eq__(self, other): + """ + :param other: an IP set + + :return: ``True`` if this IP set is equivalent to the ``other`` IP set, + ``False`` otherwise. + """ + try: + return self._cidrs == other._cidrs + except AttributeError: + return NotImplemented + + def __ne__(self, other): + """ + :param other: an IP set + + :return: ``False`` if this IP set is equivalent to the ``other`` IP set, + ``True`` otherwise. + """ + try: + return self._cidrs != other._cidrs + except AttributeError: + return NotImplemented + + def __lt__(self, other): + """ + :param other: an IP set + + :return: ``True`` if this IP set is less than the ``other`` IP set, + ``False`` otherwise. + """ + if not hasattr(other, '_cidrs'): + return NotImplemented + + return self.size < other.size and self.issubset(other) + + def issubset(self, other): + """ + :param other: an IP set. + + :return: ``True`` if every IP address and subnet in this IP set + is found within ``other``. + """ + for cidr in self._cidrs: + if cidr not in other: + return False + return True + + __le__ = issubset + + def __gt__(self, other): + """ + :param other: an IP set. + + :return: ``True`` if this IP set is greater than the ``other`` IP set, + ``False`` otherwise. + """ + if not hasattr(other, '_cidrs'): + return NotImplemented + + return self.size > other.size and self.issuperset(other) + + def issuperset(self, other): + """ + :param other: an IP set. + + :return: ``True`` if every IP address and subnet in other IP set + is found within this one. + """ + if not hasattr(other, '_cidrs'): + return NotImplemented + + for cidr in other._cidrs: + if cidr not in self: + return False + return True + + __ge__ = issuperset + + def union(self, other): + """ + :param other: an IP set. + + :return: the union of this IP set and another as a new IP set + (combines IP addresses and subnets from both sets). + """ + ip_set = self.copy() + ip_set.update(other) + return ip_set + + __or__ = union + + def intersection(self, other): + """ + :param other: an IP set. + + :return: the intersection of this IP set and another as a new IP set. + (IP addresses and subnets common to both sets). + """ + result_cidrs = {} + + own_nets = sorted(self._cidrs) + other_nets = sorted(other._cidrs) + own_idx = 0 + other_idx = 0 + own_len = len(own_nets) + other_len = len(other_nets) + while own_idx < own_len and other_idx < other_len: + own_cur = own_nets[own_idx] + other_cur = other_nets[other_idx] + + if own_cur == other_cur: + result_cidrs[own_cur] = True + own_idx += 1 + other_idx += 1 + elif own_cur in other_cur: + result_cidrs[own_cur] = True + own_idx += 1 + elif other_cur in own_cur: + result_cidrs[other_cur] = True + other_idx += 1 + else: + # own_cur and other_cur have nothing in common + if own_cur < other_cur: + own_idx += 1 + else: + other_idx += 1 + + # We ran out of networks in own_nets or other_nets. Either way, there + # can be no further result_cidrs. + result = IPSet() + result._cidrs = result_cidrs + return result + + __and__ = intersection + + def symmetric_difference(self, other): + """ + :param other: an IP set. + + :return: the symmetric difference of this IP set and another as a new + IP set (all IP addresses and subnets that are in exactly one + of the sets). + """ + # In contrast to intersection() and difference(), we cannot construct + # the result_cidrs easily. Some cidrs may have to be merged, e.g. for + # IPSet(["10.0.0.0/32"]).symmetric_difference(IPSet(["10.0.0.1/32"])). + result_ranges = [] + + own_nets = sorted(self._cidrs) + other_nets = sorted(other._cidrs) + own_idx = 0 + other_idx = 0 + own_len = len(own_nets) + other_len = len(other_nets) + while own_idx < own_len and other_idx < other_len: + own_cur = own_nets[own_idx] + other_cur = other_nets[other_idx] + + if own_cur == other_cur: + own_idx += 1 + other_idx += 1 + elif own_cur in other_cur: + own_idx = _subtract(other_cur, own_nets, own_idx, result_ranges) + other_idx += 1 + elif other_cur in own_cur: + other_idx = _subtract(own_cur, other_nets, other_idx, result_ranges) + own_idx += 1 + else: + # own_cur and other_cur have nothing in common + if own_cur < other_cur: + result_ranges.append((own_cur._module.version, + own_cur.first, own_cur.last)) + own_idx += 1 + else: + result_ranges.append((other_cur._module.version, + other_cur.first, other_cur.last)) + other_idx += 1 + + # If the above loop terminated because it processed all cidrs of + # "other", then any remaining cidrs in self must be part of the result. + while own_idx < own_len: + own_cur = own_nets[own_idx] + result_ranges.append((own_cur._module.version, + own_cur.first, own_cur.last)) + own_idx += 1 + + # If the above loop terminated because it processed all cidrs of + # self, then any remaining cidrs in "other" must be part of the result. + while other_idx < other_len: + other_cur = other_nets[other_idx] + result_ranges.append((other_cur._module.version, + other_cur.first, other_cur.last)) + other_idx += 1 + + result = IPSet() + for start, stop in _iter_merged_ranges(result_ranges): + cidrs = iprange_to_cidrs(start, stop) + for cidr in cidrs: + result._cidrs[cidr] = True + return result + + __xor__ = symmetric_difference + + def difference(self, other): + """ + :param other: an IP set. + + :return: the difference between this IP set and another as a new IP + set (all IP addresses and subnets that are in this IP set but + not found in the other.) + """ + result_ranges = [] + result_cidrs = {} + + own_nets = sorted(self._cidrs) + other_nets = sorted(other._cidrs) + own_idx = 0 + other_idx = 0 + own_len = len(own_nets) + other_len = len(other_nets) + while own_idx < own_len and other_idx < other_len: + own_cur = own_nets[own_idx] + other_cur = other_nets[other_idx] + + if own_cur == other_cur: + own_idx += 1 + other_idx += 1 + elif own_cur in other_cur: + own_idx += 1 + elif other_cur in own_cur: + other_idx = _subtract(own_cur, other_nets, other_idx, + result_ranges) + own_idx += 1 + else: + # own_cur and other_cur have nothing in common + if own_cur < other_cur: + result_cidrs[own_cur] = True + own_idx += 1 + else: + other_idx += 1 + + # If the above loop terminated because it processed all cidrs of + # "other", then any remaining cidrs in self must be part of the result. + while own_idx < own_len: + result_cidrs[own_nets[own_idx]] = True + own_idx += 1 + + for start, stop in _iter_merged_ranges(result_ranges): + for cidr in iprange_to_cidrs(start, stop): + result_cidrs[cidr] = True + + result = IPSet() + result._cidrs = result_cidrs + return result + + __sub__ = difference + + def __len__(self): + """ + :return: the cardinality of this IP set (i.e. sum of individual IP \ + addresses). Raises ``IndexError`` if size > maxint (a Python \ + limitation). Use the .size property for subnets of any size. + """ + size = self.size + if size > _sys_maxint: + raise IndexError( + "range contains more than %d (sys.maxint) IP addresses!" + "Use the .size property instead." % _sys_maxint) + return size + + @property + def size(self): + """ + The cardinality of this IP set (based on the number of individual IP + addresses including those implicitly defined in subnets). + """ + return sum([cidr.size for cidr in self._cidrs]) + + def __repr__(self): + """:return: Python statement to create an equivalent object""" + return 'IPSet(%r)' % [str(c) for c in sorted(self._cidrs)] + + __str__ = __repr__ + + def iscontiguous(self): + """ + Returns True if the members of the set form a contiguous IP + address range (with no gaps), False otherwise. + + :return: ``True`` if the ``IPSet`` object is contiguous. + """ + cidrs = self.iter_cidrs() + if len(cidrs) > 1: + previous = cidrs[0][0] + for cidr in cidrs: + if cidr[0] != previous: + return False + previous = cidr[-1] + 1 + return True + + def iprange(self): + """ + Generates an IPRange for this IPSet, if all its members + form a single contiguous sequence. + + Raises ``ValueError`` if the set is not contiguous. + + :return: An ``IPRange`` for all IPs in the IPSet. + """ + if self.iscontiguous(): + cidrs = self.iter_cidrs() + if not cidrs: + return None + return IPRange(cidrs[0][0], cidrs[-1][-1]) + else: + raise ValueError("IPSet is not contiguous") + + def iter_ipranges(self): + """Generate the merged IPRanges for this IPSet. + + In contrast to self.iprange(), this will work even when the IPSet is + not contiguous. Adjacent IPRanges will be merged together, so you + get the minimal number of IPRanges. + """ + sorted_ranges = [(cidr._module.version, cidr.first, cidr.last) for + cidr in self.iter_cidrs()] + + for start, stop in _iter_merged_ranges(sorted_ranges): + yield IPRange(start, stop) |