ipaddress
— Biblioteca de manipulación IPv4 / IPv6¶
Source code: Lib/ipaddress.py
ipaddress
proporciona las capacidades para crear, manipular y operar en redes y direcciones IPv4 e IPv6.
Las funciones y clases de este módulo facilitan el manejo de varias tareas relacionadas con las direcciones IP, incluida la verificación de si dos hosts están en la misma subred, la iteración sobre todos los hosts de una subred en particular, la verificación de si una cadena representa un valor válido o no. Dirección IP o definición de red, etc.
Esta es la referencia completa de la API del módulo; para obtener una descripción general y una introducción, consulte Introducción al modulo ipaddress.
Nuevo en la versión 3.3.
Funciones de fábrica de conveniencia¶
El módulo ipaddress
proporciona funciones de fábrica para crear cómodamente direcciones IP, redes e interfaces:
-
ipaddress.
ip_address
(address)¶ Retorna un objeto
IPv4Address
oIPv6Address
según la dirección IP pasada como argumento. Se pueden proporcionar direcciones IPv4 o IPv6; los enteros menores que2**32
se considerarán IPv4 de forma predeterminada. Se lanza unValueError
si address no representa una dirección IPv4 o IPv6 válida.>>> ipaddress.ip_address('192.168.0.1') IPv4Address('192.168.0.1') >>> ipaddress.ip_address('2001:db8::') IPv6Address('2001:db8::')
-
ipaddress.
ip_network
(address, strict=True)¶ Retorna un objeto
IPv4Network
oIPv6Network
dependiendo de la dirección IP pasada como argumento. address es una cadena o entero que representa la red IP. Se pueden suministrar redes IPv4 o IPv6; los enteros menores que2**32
se considerarán IPv4 de forma predeterminada. strict se pasa aIPv4Network
oIPv6Network
constructor. Se genera unValueError
si address no representa una dirección IPv4 o IPv6 válida, o si la red tiene bits de host establecidos.>>> ipaddress.ip_network('192.168.0.0/28') IPv4Network('192.168.0.0/28')
-
ipaddress.
ip_interface
(address)¶ Retorna un objeto
IPv4Interface
oIPv6Interface
dependiendo de la dirección IP pasada como argumento. address es una cadena o entero que representa la dirección IP. Se pueden proporcionar direcciones IPv4 o IPv6; los enteros menores que2**32
se considerarán IPv4 de forma predeterminada. Se genera unValueError
si address no representa una dirección IPv4 o IPv6 válida.
Una desventaja de estas funciones de conveniencia es que la necesidad de manejar los formatos IPv4 e IPv6 significa que los mensajes de error brindan información mínima sobre el error exacto, ya que las funciones no saben si se pretendía usar el formato IPv4 o IPv6. Se pueden obtener informes de errores más detallados llamando directamente a los constructores de clases específicos de la versión adecuada.
Direcciones IP¶
Objetos de dirección¶
Los objetos IPv4Address
y IPv6Address
comparten muchos atributos comunes. Algunos atributos que solo son significativos para direcciones IPv6 también son implementados por objetos IPv4Address
, a fin de facilitar la escritura de código que maneje ambas versiones de IP correctamente. Los objetos de dirección son hashable, por lo que se pueden usar como claves en diccionarios.
-
class
ipaddress.
IPv4Address
(address)¶ Construya una dirección IPv4. Se genera un
AddressValueError
si address no es una dirección IPv4 válida.Lo siguiente constituye una dirección IPv4 válida:
Una cadena en notación de punto decimal, que consta de cuatro enteros decimales en el rango inclusivo 0-255, separados por puntos (por ejemplo,
192.168.0.1
). Cada entero representa un octeto (byte) en la dirección. No se toleran ceros iniciales para evitar confusiones con la notación octal.Un número entero que cabe en 32 bits.
Un entero empaquetado en un objeto
bytes
de longitud 4 (primero el octeto más significativo).
>>> ipaddress.IPv4Address('192.168.0.1') IPv4Address('192.168.0.1') >>> ipaddress.IPv4Address(3232235521) IPv4Address('192.168.0.1') >>> ipaddress.IPv4Address(b'\xC0\xA8\x00\x01') IPv4Address('192.168.0.1')
Distinto en la versión 3.8: Se toleran los ceros iniciales, incluso en casos ambiguos que parecen notación octal.
Distinto en la versión 3.10: Los ceros iniciales ya no se toleran y se tratan como un error. Las cadenas de direcciones IPv4 ahora se analizan tan estrictamente como glibc
inet_pton()
.Distinto en la versión 3.9.5: El cambio anterior también se incluyó en Python 3.9 a partir de la versión 3.9.5.
Distinto en la versión 3.8.12: El cambio anterior también se incluyó en Python 3.8 a partir de la versión 3.8.12.
-
version
¶ El número de versión apropiado:
4
para IPv4,6
para IPv6.
-
max_prefixlen
¶ El número total de bits en la representación de direcciones para esta versión:
32
para IPv4,128
para IPv6.El prefijo define el número de bits iniciales en una dirección que se comparan para determinar si una dirección es parte de una red o no.
-
compressed
¶
-
exploded
¶ Representación de cadena en notación decimal con puntos. Los ceros iniciales nunca se incluyen en la representación.
Como IPv4 no define una notación abreviada para direcciones con octetos establecidos en cero, estos dos atributos son siempre los mismos que
str(addr)
para direcciones IPv4. La exposición de estos atributos facilita la escritura de código de visualización que pueda manejar direcciones IPv4 e IPv6.
-
packed
¶ La representación binaria de esta dirección: un objeto
bytes
de la longitud adecuada (primero el octeto más significativo). Son 4 bytes para IPv4 y 16 bytes para IPv6.
-
reverse_pointer
¶ El nombre del registro PTR de DNS inverso para la dirección IP, por ejemplo:
>>> ipaddress.ip_address("127.0.0.1").reverse_pointer '1.0.0.127.in-addr.arpa' >>> ipaddress.ip_address("2001:db8::1").reverse_pointer '1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa'
Este es el nombre que podría usarse para realizar una búsqueda PTR, no el nombre de host resuelto en sí.
Nuevo en la versión 3.5.
-
is_multicast
¶ True
si la dirección está reservada para uso de multidifusión. Consulte RFC 3171 (para IPv4) o RFC 2373 (para IPv6).
-
is_private
¶ True
if the address is defined as not globally reachable by iana-ipv4-special-registry (for IPv4) or iana-ipv6-special-registry (for IPv6) with the following exceptions:is_private
isFalse
for the shared address space (100.64.0.0/10
)For IPv4-mapped IPv6-addresses the
is_private
value is determined by the semantics of the underlying IPv4 addresses and the following condition holds (seeIPv6Address.ipv4_mapped
):address.is_private == address.ipv4_mapped.is_private
is_private
has value opposite tois_global
, except for the shared address space (100.64.0.0/10
range) where they are bothFalse
.Distinto en la versión 3.10.15: Fixed some false positives and false negatives.
192.0.0.0/24
is considered private with the exception of192.0.0.9/32
and192.0.0.10/32
(previously: only the192.0.0.0/29
sub-range was considered private).64:ff9b:1::/48
is considered private.2002::/16
is considered private.There are exceptions within
2001::/23
(otherwise considered private):2001:1::1/128
,2001:1::2/128
,2001:3::/32
,2001:4:112::/48
,2001:20::/28
,2001:30::/28
. The exceptions are not considered private.
-
is_global
¶ True
if the address is defined as globally reachable by iana-ipv4-special-registry (for IPv4) or iana-ipv6-special-registry (for IPv6) with the following exception:For IPv4-mapped IPv6-addresses the
is_private
value is determined by the semantics of the underlying IPv4 addresses and the following condition holds (seeIPv6Address.ipv4_mapped
):address.is_global == address.ipv4_mapped.is_global
is_global
has value opposite tois_private
, except for the shared address space (100.64.0.0/10
range) where they are bothFalse
.Nuevo en la versión 3.4.
Distinto en la versión 3.10.15: Fixed some false positives and false negatives, see
is_private
for details.
-
is_unspecified
¶ True
si la dirección no está especificada. Consulte RFC 5735 (para IPv4) o RFC 2373 (para IPv6).
-
is_reserved
¶ True
si la dirección está reservada IETF.
-
IPv4Address.
__format__
(fmt)¶ Devuelve una representación de cadena de la dirección IP, controlada por una cadena de formato explícito. fmt puede ser uno de los siguientes:
's'
, la opción predeterminada, equivalente astr()
,` “b”` para una cadena binaria con relleno de ceros,'X'
o'x'
para una representación hexadecimal en mayúsculas o minúsculas, o'n'
, que es equivalente a'b'
para direcciones IPv4 y'x'
para IPv6. Para representaciones binarias y hexadecimales, el especificador de formulario'#'
y la opción de agrupación `` “_”`` están disponibles.__format__
es utilizado porformat
,str.format
y f-strings.>>> format(ipaddress.IPv4Address('192.168.0.1')) '192.168.0.1' >>> '{:#b}'.format(ipaddress.IPv4Address('192.168.0.1')) '0b11000000101010000000000000000001' >>> f'{ipaddress.IPv6Address("2001:db8::1000"):s}' '2001:db8::1000' >>> format(ipaddress.IPv6Address('2001:db8::1000'), '_X') '2001_0DB8_0000_0000_0000_0000_0000_1000' >>> '{:#_n}'.format(ipaddress.IPv6Address('2001:db8::1000')) '0x2001_0db8_0000_0000_0000_0000_0000_1000'
Nuevo en la versión 3.9.
-
class
ipaddress.
IPv6Address
(address)¶ Construya una dirección IPv6. Se genera un
AddressValueError
si address no es una dirección IPv6 válida.Lo siguiente constituye una dirección IPv6 válida:
Una cadena que consta de ocho grupos de cuatro dígitos hexadecimales, cada grupo representa 16 bits. Los grupos están separados por dos puntos. Esto describe una notación explotada (a mano). La cadena también se puede comprimir (notación abreviada) por varios medios. Consulte RFC 4291 para obtener más detalles. Por ejemplo,
"0000:0000:0000:0000:0000:0abc:0007:0def"
se puede comprimir en"::abc:7:def"
.Opcionalmente, la cadena también puede tener un ID de zona de alcance, expresado con un sufijo
%scope_id
. Si está presente, el ID de alcance no debe estar vacío y no puede contener%
. Consulte RFC 4007 para obtener más detalles. Por ejemplo,fe80::1234%1
podría identificar la direcciónfe80::1234
en el primer enlace del nodo.Un número entero que cabe en 128 bits.
Un entero empaquetado en un objeto
bytes
de longitud 16, big-endian.
>>> ipaddress.IPv6Address('2001:db8::1000') IPv6Address('2001:db8::1000') >>> ipaddress.IPv6Address('ff02::5678%1') IPv6Address('ff02::5678%1')
-
compressed
¶
La forma corta de la representación de la dirección, con ceros a la izquierda en los grupos omitidos y la secuencia más larga de grupos que consta completamente de ceros colapsó en un solo grupo vacío.
Este también es el valor devuelto por
str(addr)
para las direcciones IPv6.-
exploded
¶
La forma larga de la representación de la dirección, con todos los ceros a la izquierda y los grupos que constan completamente de ceros incluidos.
Para los siguientes atributos y métodos, consulte la documentación correspondiente de la clase
IPv4Address
:-
packed
¶
-
reverse_pointer
¶
-
version
¶
-
max_prefixlen
¶
-
is_multicast
¶
-
is_private
¶
-
is_global
¶
-
is_unspecified
¶
-
is_reserved
¶
-
is_loopback
¶
-
is_link_local
¶ Nuevo en la versión 3.4: is_global
-
is_site_local
¶ True
si la dirección está reservada para uso local del sitio. Tenga en cuenta que el espacio de direcciones local del sitio ha quedado obsoleto por RFC 3879. Utiliceis_private
para probar si esta dirección está en el espacio de direcciones locales únicas como se define en RFC 4193.
-
ipv4_mapped
¶ Para las direcciones que parecen ser direcciones IPv4 asignadas (que comienzan con
::FFFF/96
), esta propiedad informará la dirección IPv4 incrustada. Para cualquier otra dirección, esta propiedad seráNone
.
-
scope_id
¶ Para las direcciones de ámbito definido por RFC 4007, esta propiedad identifica la zona particular del ámbito de la dirección a la que pertenece la dirección, como una cadena. Cuando no se especifica ninguna zona de alcance, esta propiedad será
None
.
-
IPv6Address.
__format__
(fmt)¶ Consulte la documentación del método correspondiente en
IPv4Address
.Nuevo en la versión 3.9.
Conversión a cadenas y enteros¶
Para interoperar con interfaces de red como el módulo de socket, las direcciones deben convertirse en cadenas o números enteros. Esto se maneja usando las funciones integradas str()
y int()
>>> str(ipaddress.IPv4Address('192.168.0.1'))
'192.168.0.1'
>>> int(ipaddress.IPv4Address('192.168.0.1'))
3232235521
>>> str(ipaddress.IPv6Address('::1'))
'::1'
>>> int(ipaddress.IPv6Address('::1'))
1
Tenga en cuenta que las direcciones de ámbito IPv6 se convierten en números enteros sin ID de zona de ámbito.
Operadores¶
Los objetos de dirección admiten algunos operadores. A menos que se indique lo contrario, los operadores solo se pueden aplicar entre objetos compatibles (es decir, IPv4 con IPv4, IPv6 con IPv6).
Operadores de comparación¶
Los objetos de dirección se pueden comparar con el conjunto habitual de operadores de comparación. Las mismas direcciones IPv6 con diferentes ID de zona de alcance no son iguales. Algunos ejemplos:
>>> IPv4Address('127.0.0.2') > IPv4Address('127.0.0.1')
True
>>> IPv4Address('127.0.0.2') == IPv4Address('127.0.0.1')
False
>>> IPv4Address('127.0.0.2') != IPv4Address('127.0.0.1')
True
>>> IPv6Address('fe80::1234') == IPv6Address('fe80::1234%1')
False
>>> IPv6Address('fe80::1234%1') != IPv6Address('fe80::1234%2')
True
Operadores aritméticos¶
Los números enteros se pueden sumar o restar de los objetos de dirección. Algunos ejemplos:
>>> IPv4Address('127.0.0.2') + 3
IPv4Address('127.0.0.5')
>>> IPv4Address('127.0.0.2') - 3
IPv4Address('126.255.255.255')
>>> IPv4Address('255.255.255.255') + 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ipaddress.AddressValueError: 4294967296 (>= 2**32) is not permitted as an IPv4 address
Definiciones de red IP¶
Los objetos IPv4Network
y IPv6Network
proporcionan un mecanismo para definir e inspeccionar las definiciones de red IP. Una definición de red consta de una * máscara * y una * dirección de red * y, como tal, define un rango de direcciones IP que son iguales a la dirección de red cuando están enmascaradas (Y binario) con la máscara. Por ejemplo, una definición de red con la máscara 255.255.255.0
y la dirección de red 192.168.1.0
consta de direcciones IP en el rango inclusivo de 192.168.1.0
a 192.168.1.255
.
Prefijo, máscara de red y máscara de host¶
Hay varias formas equivalentes de especificar máscaras de red IP. Un prefix /<nbits>
es una notación que indica cuántos bits de orden superior se establecen en la máscara de red. Una máscara de red (mask) es una dirección IP con una cierta cantidad de bits de orden superior establecidos. Por lo tanto, el prefijo /24
es equivalente a la máscara de red 255.255.255.0
en IPv4, o ffff:ff00::
en IPv6. Además, una * máscara de host * es el inverso lógico de una * máscara de red * y, a veces, se utiliza (por ejemplo, en las listas de control de acceso de Cisco) para indicar una máscara de red. La máscara de host equivalente a /24
en IPv4 es 0.0.0.255
.
Objetos de red¶
Todos los atributos implementados por objetos de dirección también son implementados por objetos de red. Además, los objetos de red implementan atributos adicionales. Todos estos son comunes entre IPv4Network
y IPv6Network
, por lo que para evitar la duplicación solo se documentan para IPv4Network
. Los objetos de red son hashable, por lo que se pueden usar como claves en diccionarios.
-
class
ipaddress.
IPv4Network
(address, strict=True)¶ Construya una definición de red IPv4. address puede ser una de las siguientes:
Una cadena que consta de una dirección IP y una máscara opcional, separadas por una barra (
/
). La dirección IP es la dirección de red y la máscara puede ser un solo número, lo que significa que es un prefix, o una representación de cadena de caracteres de una dirección IPv4. Si es la última, la máscara es interpretada como una net mask si comienza con un campo no nulo, o como una host mask si comienza con un campo cero, con la excepción de una máscara de solo ceros la cual es tratada como una net mask. Si no se proporciona una máscara, se considera/32
.Por ejemplo, las siguientes especificaciones de address son equivalentes:
192.168.1.0/24
,192.168.1.0/255.255.255.0
y192.168.1.0/0.0.0.255
.Un número entero que cabe en 32 bits. Esto es equivalente a una red de una sola dirección, con la dirección de red address y la máscara
/32
.Un entero empaquetado en un objeto
bytes
de longitud 4, big-endian. La interpretación es similar a una address entera.Dos tuplas de una descripción de dirección y una máscara de red, donde la descripción de la dirección es una cadena, un entero de 32 bits, un entero empaquetado de 4 bytes o un objeto IPv4Address existente; y la máscara de red es un número entero que representa la longitud del prefijo (por ejemplo,
24
) o una cadena que representa la máscara de prefijo (por ejemplo,255.255.255.0
).
Se genera un
AddressValueError
si address no es una dirección IPv4 válida. ANetmaskValueError
se genera si la máscara no es válida para una dirección IPv4.Si strict es
True
y los bits de host están configurados en la dirección proporcionada, entoncesValueError
se genera. De lo contrario, los bits del host se enmascaran para determinar la dirección de red adecuada.A menos que se indique lo contrario, todos los métodos de red que acepten otros objetos de red / dirección generarán
TypeError
si la versión de IP del argumento es incompatible conself
.Distinto en la versión 3.5: Se agregó la forma de dos tuplas para el parámetro de constructor address.
-
version
¶
-
max_prefixlen
¶ Consulte la documentación del atributo correspondiente en
IPv4Address
.
-
is_multicast
¶
-
is_private
¶
-
is_unspecified
¶
-
is_reserved
¶
-
is_loopback
¶
-
is_link_local
¶ Estos atributos son verdaderos para la red en su conjunto si lo son tanto para la dirección de red como para la dirección de transmisión.
-
network_address
¶ La dirección de red de la red. La dirección de red y la longitud del prefijo juntos definen de forma única una red.
-
broadcast_address
¶ La dirección de transmisión de la red. Todos los hosts de la red deben recibir los paquetes enviados a la dirección de transmisión.
-
hostmask
¶ La máscara de host, como un objeto
IPv4Address
.
-
netmask
¶ La máscara de red, como un objeto
IPv4Address
.
-
with_prefixlen
¶
-
compressed
¶
-
exploded
¶ Una representación de cadena de la red, con la máscara en notación de prefijo.
with_prefixlen
ycompressed
son siempre lo mismo questr(red)
.exploded
utiliza la forma explosionada de la dirección de red.
-
with_netmask
¶ Una representación de cadena de la red, con la máscara en notación de máscara de red.
-
with_hostmask
¶ Una representación de cadena de la red, con la máscara en notación de máscara de host.
-
num_addresses
¶ El número total de direcciones en la red.
-
prefixlen
¶ Longitud del prefijo de red, en bits.
-
hosts
()¶ Longitud de Devuelve un iterador sobre los hosts utilizables en la red. Los hosts utilizables son todas las direcciones IP que pertenecen a la red, excepto la dirección de red en sí y la dirección de transmisión de la red. Para redes con una longitud de máscara de 31, la dirección de red y la dirección de transmisión de red también se incluyen en el resultado. Las redes con una máscara de 32 devolverán una lista que contiene la dirección de host única, el prefijo de red, en bits.
>>> list(ip_network('192.0.2.0/29').hosts()) [IPv4Address('192.0.2.1'), IPv4Address('192.0.2.2'), IPv4Address('192.0.2.3'), IPv4Address('192.0.2.4'), IPv4Address('192.0.2.5'), IPv4Address('192.0.2.6')] >>> list(ip_network('192.0.2.0/31').hosts()) [IPv4Address('192.0.2.0'), IPv4Address('192.0.2.1')] >>> list(ip_network('192.0.2.1/32').hosts()) [IPv4Address('192.0.2.1')]
-
overlaps
(other)¶ True
si esta red está total o parcialmente contenida en other o other está completamente contenido en esta red.
-
address_exclude
(network)¶ Calcula las definiciones de red resultantes de eliminar la network dada de esta. Devuelve un iterador de objetos de red. Genera
ValueError
si network no está completamente contenido en esta red.>>> n1 = ip_network('192.0.2.0/28') >>> n2 = ip_network('192.0.2.1/32') >>> list(n1.address_exclude(n2)) [IPv4Network('192.0.2.8/29'), IPv4Network('192.0.2.4/30'), IPv4Network('192.0.2.2/31'), IPv4Network('192.0.2.0/32')]
-
subnets
(prefixlen_diff=1, new_prefix=None)¶ Las subredes que se unen para crear la definición de red actual, según los valores de los argumentos. prefixlen_diff es la cantidad en la que se debe aumentar la longitud de nuestro prefijo. new_prefix es el nuevo prefijo deseado de las subredes; debe ser más grande que nuestro prefijo. Se debe establecer uno y solo uno de prefixlen_diff y new_prefix. Devuelve un iterador de objetos de red.
>>> list(ip_network('192.0.2.0/24').subnets()) [IPv4Network('192.0.2.0/25'), IPv4Network('192.0.2.128/25')] >>> list(ip_network('192.0.2.0/24').subnets(prefixlen_diff=2)) [IPv4Network('192.0.2.0/26'), IPv4Network('192.0.2.64/26'), IPv4Network('192.0.2.128/26'), IPv4Network('192.0.2.192/26')] >>> list(ip_network('192.0.2.0/24').subnets(new_prefix=26)) [IPv4Network('192.0.2.0/26'), IPv4Network('192.0.2.64/26'), IPv4Network('192.0.2.128/26'), IPv4Network('192.0.2.192/26')] >>> list(ip_network('192.0.2.0/24').subnets(new_prefix=23)) Traceback (most recent call last): File "<stdin>", line 1, in <module> raise ValueError('new prefix must be longer') ValueError: new prefix must be longer >>> list(ip_network('192.0.2.0/24').subnets(new_prefix=25)) [IPv4Network('192.0.2.0/25'), IPv4Network('192.0.2.128/25')]
-
supernet
(prefixlen_diff=1, new_prefix=None)¶ La superred que contiene esta definición de red, según los valores de los argumentos. prefixlen_diff es la cantidad en la que se debe reducir la longitud de nuestro prefijo. new_prefix es el nuevo prefijo deseado de la superred; debe ser más pequeño que nuestro prefijo. Se debe establecer uno y solo uno de prefixlen_diff y new_prefix. Devuelve un solo objeto de red.
>>> ip_network('192.0.2.0/24').supernet() IPv4Network('192.0.2.0/23') >>> ip_network('192.0.2.0/24').supernet(prefixlen_diff=2) IPv4Network('192.0.0.0/22') >>> ip_network('192.0.2.0/24').supernet(new_prefix=20) IPv4Network('192.0.0.0/20')
-
subnet_of
(other)¶ Devuelve
True
si esta red es una subred de other.>>> a = ip_network('192.168.1.0/24') >>> b = ip_network('192.168.1.128/30') >>> b.subnet_of(a) True
Nuevo en la versión 3.7.
-
supernet_of
(other)¶ Devuelve
True
si esta red es una superred de other.>>> a = ip_network('192.168.1.0/24') >>> b = ip_network('192.168.1.128/30') >>> a.supernet_of(b) True
Nuevo en la versión 3.7.
-
compare_networks
(other)¶ Compare esta red con other. En esta comparación solo se consideran las direcciones de red; los bits de host no lo son. Devuelve
-1
,0
o1
.>>> ip_network('192.0.2.1/32').compare_networks(ip_network('192.0.2.2/32')) -1 >>> ip_network('192.0.2.1/32').compare_networks(ip_network('192.0.2.0/32')) 1 >>> ip_network('192.0.2.1/32').compare_networks(ip_network('192.0.2.1/32')) 0
Obsoleto desde la versión 3.7: Utiliza el mismo algoritmo de ordenación y comparación que «<», «==» y «>»
-
class
ipaddress.
IPv6Network
(address, strict=True)¶ Construya una definición de red IPv6. address puede ser una de las siguientes:
Una cadena que consta de una dirección IP y una longitud de prefijo opcional, separados por una barra (
/
). La dirección IP es la dirección de red y la longitud del prefijo debe ser un solo número, el prefix. Si no se proporciona una longitud de prefijo, se considera que es/128
.Tenga en cuenta que las máscaras de red expandidas actualmente no son compatibles. Eso significa que
2001:db00::0/24
es un argumento válido mientras que2001:db00::0/ffff:ff00::
no lo es.Un número entero que cabe en 128 bits. Esto es equivalente a una red de una sola dirección, con la dirección de red address y la máscara
/128
.Un entero empaquetado en un objeto
bytes
de longitud 16, big-endian. La interpretación es similar a una address entera.Dos tuplas de una descripción de dirección y una máscara de red, donde la descripción de la dirección es una cadena, un entero de 128 bits, un entero empaquetado de 16 bytes o un objeto IPv6Address existente; y la máscara de red es un número entero que representa la longitud del prefijo.
Se genera un
AddressValueError
si address no es una dirección IPv6 válida. ANetmaskValueError
se genera si la máscara no es válida para una dirección IPv6.Si strict es
True
y los bits de host están configurados en la dirección proporcionada, entoncesValueError
se genera. De lo contrario, los bits del host se enmascaran para determinar la dirección de red adecuada.Distinto en la versión 3.5: Se agregó la forma de dos tuplas para el parámetro de constructor address.
-
version
¶
-
max_prefixlen
¶
-
is_multicast
¶
-
is_private
¶
-
is_unspecified
¶
-
is_reserved
¶
-
is_loopback
¶
-
is_link_local
¶
-
network_address
¶
-
broadcast_address
¶
-
hostmask
¶
-
netmask
¶
-
with_prefixlen
¶
-
compressed
¶
-
exploded
¶
-
with_netmask
¶
-
with_hostmask
¶
-
num_addresses
¶
-
prefixlen
¶
-
hosts
()¶ Devuelve un iterador sobre los hosts utilizables en la red. Los hosts utilizables son todas las direcciones IP que pertenecen a la red, excepto la dirección Anycast del Subnet-Router. Para redes con una longitud de máscara de 127, la dirección anycast del Subnet-Router también se incluye en el resultado. Las redes con una máscara de 128 devolverán una lista que contiene la única dirección de host.
-
overlaps
(other)¶
-
address_exclude
(network)¶
-
subnets
(prefixlen_diff=1, new_prefix=None)¶
-
supernet
(prefixlen_diff=1, new_prefix=None)¶
-
subnet_of
(other)¶
-
supernet_of
(other)¶
-
compare_networks
(other)¶ Consulte la documentación del atributo correspondiente en
IPv4Network
.
-
is_site_local
¶ Este atributo es verdadero para la red en su conjunto si es cierto tanto para la dirección de red como para la dirección de transmisión.
Operadores¶
Este atributo es verdadero para la red en su conjunto si es cierto para ambos objetos de red que admiten algunos operadores. A menos que se indique lo contrario, los operadores solo se pueden aplicar entre objetos compatibles (es decir, IPv4 con IPv4, IPv6 con IPv6).
Operadores lógicos¶
Los objetos de red se pueden comparar con el conjunto habitual de operadores lógicos. Los objetos de red se ordenan primero por dirección de red y luego por máscara de red.
Iteración¶
Los objetos de red se pueden iterar para enumerar todas las direcciones que pertenecen a la red. Para la iteración, se devuelven todos los hosts, incluidos los hosts inutilizables (para hosts utilizables, use el método hosts()
). Un ejemplo:
>>> for addr in IPv4Network('192.0.2.0/28'):
... addr
...
IPv4Address('192.0.2.0')
IPv4Address('192.0.2.1')
IPv4Address('192.0.2.2')
IPv4Address('192.0.2.3')
IPv4Address('192.0.2.4')
IPv4Address('192.0.2.5')
IPv4Address('192.0.2.6')
IPv4Address('192.0.2.7')
IPv4Address('192.0.2.8')
IPv4Address('192.0.2.9')
IPv4Address('192.0.2.10')
IPv4Address('192.0.2.11')
IPv4Address('192.0.2.12')
IPv4Address('192.0.2.13')
IPv4Address('192.0.2.14')
IPv4Address('192.0.2.15')
Redes como contenedores de direcciones¶
Los objetos de red pueden actuar como contenedores de direcciones. Algunos ejemplos:
>>> IPv4Network('192.0.2.0/28')[0]
IPv4Address('192.0.2.0')
>>> IPv4Network('192.0.2.0/28')[15]
IPv4Address('192.0.2.15')
>>> IPv4Address('192.0.2.6') in IPv4Network('192.0.2.0/28')
True
>>> IPv4Address('192.0.3.6') in IPv4Network('192.0.2.0/28')
False
Objetos de interfaz¶
Los objetos de interfaz son hashable, por lo que se pueden usar como claves en diccionarios.
-
class
ipaddress.
IPv4Interface
(address)¶ Construya una interfaz IPv4. El significado de address es como en el constructor de
IPv4Network
, excepto que siempre se aceptan direcciones de host arbitrarias.IPv4Interface
es una subclase deIPv4Address
, por lo que hereda todos los atributos de esa clase. Además, están disponibles los siguientes atributos:-
ip
¶ The address (
IPv4Address
) without network information.>>> interface = IPv4Interface('192.0.2.5/24') >>> interface.ip IPv4Address('192.0.2.5')
-
network
¶ La red (
IPv4Network
) a la que pertenece esta interfaz.>>> interface = IPv4Interface('192.0.2.5/24') >>> interface.network IPv4Network('192.0.2.0/24')
-
with_prefixlen
¶ Una representación de cadena de la interfaz con la máscara en notación de prefijo.
>>> interface = IPv4Interface('192.0.2.5/24') >>> interface.with_prefixlen '192.0.2.5/24'
-
with_netmask
¶ Una representación de cadena de la interfaz con la red como máscara de red.
>>> interface = IPv4Interface('192.0.2.5/24') >>> interface.with_netmask '192.0.2.5/255.255.255.0'
-
with_hostmask
¶ Una representación de cadena de la interfaz con la red como máscara de host.
>>> interface = IPv4Interface('192.0.2.5/24') >>> interface.with_hostmask '192.0.2.5/0.0.0.255'
-
-
class
ipaddress.
IPv6Interface
(address)¶ Construya una interfaz IPv6. El significado de address es como en el constructor de
IPv6Network
, excepto que siempre se aceptan direcciones de host arbitrarias.IPv6Interface
es una subclase deIPv6Address
, por lo que hereda todos los atributos de esa clase. Además, están disponibles los siguientes atributos:-
ip
¶
-
network
¶
-
with_prefixlen
¶
-
with_netmask
¶
-
with_hostmask
¶ Consulte la documentación del atributo correspondiente en
IPv4Interface
.
-
Operadores¶
Los objetos de interfaz admiten algunos operadores. A menos que se indique lo contrario, los operadores solo se pueden aplicar entre objetos compatibles (es decir, IPv4 con IPv4, IPv6 con IPv6).
Operadores lógicos¶
Los objetos de interfaz se pueden comparar con el conjunto habitual de operadores lógicos.
Para la comparación de igualdad (==
y !=
), Tanto la dirección IP como la red deben ser iguales para que los objetos sean iguales. Una interfaz no se comparará con ninguna dirección u objeto de red.
Para ordenar (<
, >
, etc) las reglas son diferentes. Los objetos de interfaz y dirección con la misma versión de IP se pueden comparar, y los objetos de dirección siempre se clasificarán antes que los objetos de interfaz. Primero se comparan dos objetos de interfaz por sus redes y, si son iguales, luego por sus direcciones IP.
Otras funciones de nivel de módulo¶
El módulo también proporciona las siguientes funciones de nivel de módulo:
-
ipaddress.
v4_int_to_packed
(address)¶ Represente una dirección como 4 bytes empaquetados en orden de red (big-endian). address es una representación entera de una dirección IP IPv4. A
ValueError
se genera si el número entero es negativo o demasiado grande para ser una dirección IP IPv4.>>> ipaddress.ip_address(3221225985) IPv4Address('192.0.2.1') >>> ipaddress.v4_int_to_packed(3221225985) b'\xc0\x00\x02\x01'
-
ipaddress.
v6_int_to_packed
(address)¶ Representa una dirección como 16 bytes empaquetados en orden de red (big-endian). address es una representación entera de una dirección IP IPv6. A
ValueError
se genera si el número entero es negativo o demasiado grande para ser una dirección IP IPv6.
-
ipaddress.
summarize_address_range
(first, last)¶ Devuelve un iterador del rango de red resumido dadas la primera y la última dirección IP. first es el primero
IPv4Address
oIPv6Address
en el rango y last es el últimoIPv4Address
oIPv6Address
en el rango. ATypeError
se genera si first o last no son direcciones IP o no son de la misma versión. AValueError
se genera si last no es mayor que first o si la first versión de la dirección no es 4 o 6.>>> [ipaddr for ipaddr in ipaddress.summarize_address_range( ... ipaddress.IPv4Address('192.0.2.0'), ... ipaddress.IPv4Address('192.0.2.130'))] [IPv4Network('192.0.2.0/25'), IPv4Network('192.0.2.128/31'), IPv4Network('192.0.2.130/32')]
-
ipaddress.
collapse_addresses
(addresses)¶ Devuelve un iterador de los objetos contraídos
IPv4Network
oIPv6Network
. addresses es un iterador deIPv4Network
objetosIPv6Network
. ATypeError
se genera si addresses contiene objetos de versión mixta.>>> [ipaddr for ipaddr in ... ipaddress.collapse_addresses([ipaddress.IPv4Network('192.0.2.0/25'), ... ipaddress.IPv4Network('192.0.2.128/25')])] [IPv4Network('192.0.2.0/24')]
-
ipaddress.
get_mixed_type_key
(obj)¶ Devuelve una clave adecuada para clasificar entre redes y direcciones. Los objetos de dirección y red no se pueden ordenar de forma predeterminada; son fundamentalmente diferentes, por lo que la expresión
IPv4Address('192.0.2.0') <= IPv4Network('192.0.2.0/24')
no tiene sentido. Sin embargo, hay ocasiones en las que es posible que desee que
ipaddress
ordene estos de todos modos. Si necesita hacer esto, puede usar esta función como el argumento key parasorted()
.obj es un objeto de red o de dirección.
Excepciones personalizadas¶
Para admitir informes de errores más específicos de los constructores de clases, el módulo define las siguientes excepciones:
-
exception
ipaddress.
AddressValueError
(ValueError)¶ Cualquier error de valor relacionado con la dirección.
-
exception
ipaddress.
NetmaskValueError
(ValueError)¶ Cualquier error de valor relacionado con la máscara de red.