Trabajar con direcciones IP en Python

IP (Protocolo de Internet) : la dirección es el concepto fundamental básico de las redes informáticas que proporciona las capacidades de asignación de direcciones a una red. Python proporciona el módulo ipaddress que se utiliza para validar y categorizar la dirección IP según sus tipos (IPv4 o IPv6) . Este módulo también se utiliza para realizar una amplia gama de operaciones como aritmética, comparación, etc. para manipular las direcciones IP.

Validación de direcciones IP-

Para validar las direcciones IP, Python usa la función ip_address() proporcionada por el módulo ipaddress que genera un error si los valores de IP exceden el rango del tipo de dirección IP.

  • IPv4: Es un número de 32 bits escrito típicamente en dígitos decimales formateados como cuatro números de 8 bits separados por puntos, se utiliza para identificar la interfaz de red de una máquina. La función ip_address() arroja un error si el valor del rango excede de 0 a 255.

Python3

# Import module
import ipaddress
 
# Example of valid IPv4 address
print (ipaddress.ip_address(u'175.198.42.211'))
 
# Invalid IPv4 address raises error
print (ipaddress.ip_address(u'175.198.42.270'))

Producción : 

175.198.42.211
 

ValueError: ‘175.198.42.270’ no parece ser una dirección IPv4 o IPv6
 

  • IPv6: Se representa por ocho grupos de cuatro dígitos hexadecimales separados por dos puntos, donde cada grupo representa 16 bits, dos octetos también conocidos como hextetos. La función ip_address() arroja un error si el valor del rango excede de 0 a FFFF.

Python3

# Import module
import ipaddress
 
# Example of valid IPv6 address
print (ipaddress.ip_address(u'2001:0db8:85a3:2bfe:070d:8a2e:0370:7334'))
 
# Invalid IPv6 address raises error
print (ipaddress.ip_address(u'2001:0db8:85a3:0ff0:00000:8a2e:0370:7334'))

Producción : 

2001:db8:85a3:2bfe:70d:8a2e:370:7334
 

ValueError: ‘2001:0db8:85a3:0ff0:00000:8a2e:0370:7334’ no parece ser una dirección IPv4 o IPv6
 

Operaciones en la dirección IP-

Se pueden realizar varias operaciones como aritmética, comparación, tipo, etc. en las direcciones IP con la ayuda del módulo ipaddress . Algunas operaciones se enumeran a continuación: 

  • Operación de verificación de tipo: El método type() toma varios formatos de direcciones IP como entrada y reconoce si es una dirección IPv4 o IPv6, indicando la categoría de la dirección IP.

Python3

# Import module
import ipaddress
 
# IPv4 address
print(type(ipaddress.ip_address(u'175.198.42.211')))
print(type(ipaddress.ip_address(u'5.0.0.1')))
 
# IPv6 address
print(type(ipaddress.ip_address(u'2001:0db8:85a3:2bfe:070d:8a2e:0370:7334')))
print(type(ipaddress.ip_address(u'0000:f0f0::7b8a:ffff')))

Producción : 

<clase ‘direcciónip.IPv4Address’> 

<clase ‘direcciónip.IPv4Address’> 

<clase ‘direcciónip.IPv6Address’> 

<clase ‘direcciónip.IPv6Address’>
 

  • Operaciones de comparación de IP: los operadores lógicos básicos se pueden usar para comparar las direcciones IP, ya sea que un valor sea igual, mayor o menor que el otro.

Python3

# Import module
import ipaddress
 
# Comparison
print(ipaddress.IPv4Address(u'175.199.42.211') >
      ipaddress.IPv4Address(u'175.198.42.255'))
 
print(ipaddress.IPv6Address(u'2001:0db8:85a3:2bfe:070d:8a2e:0370:7334')
      == ipaddress.IPv6Address(u'2001:0dff:85a3:2bfe:070d:8a2e:0370:7334'))
 
print(ipaddress.IPv4Address(u'179.198.42.211') !=
      ipaddress.IPv4Address(u'175.198.42.255'))
 
print(ipaddress.IPv6Address(u'2001:0db8:85a3:2bfe:070d:8a2e:0370:7334') <
      ipaddress.IPv6Address(u'2001:0dff:85a3:2bfe:070d:8a2e:0370:7334'))

Producción :

Verdadero
 

Falso
 

Verdadero
 

Verdadero
 

  • Operaciones aritméticas: las direcciones IP se pueden manipular realizando algunas operaciones aritméticas. Los números enteros se pueden sumar o restar de las direcciones IP. En la suma, si el valor del último octeto excede 255, el octeto anterior se incrementa y así sucesivamente, lo mismo en el caso de la resta, si el valor del último octeto es menor que cero, el octeto anterior se reduce, y así sucesivamente.

Python3

# Import module
import ipaddress
 
# Arithmetic Operation on IPv4 address
print(ipaddress.IPv4Address(u'129.117.0.0')-6)
print (ipaddress.IPv4Address(u'175.199.42.211')+55)
print (ipaddress.IPv4Address(u'0.0.0.0')-1)
print (ipaddress.IPv4Address(u'255.255.255.255')+1)
 
# Arithmetic Operation on IPv6 address
print (ipaddress.IPv6Address(u'2001:0db8:85a3:2bfe:070d:8a2e:0370:7334')-330)
print (ipaddress.IPv6Address(u'2001:0db8:85a3:2bfe:070d:8a2e:0370:7334')+1000)
print (ipaddress.IPv6Address(u'0000::0000')-1)
print (ipaddress.IPv6Address(u'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff')+1)

Producción : 

129.116.255.250 

175.199.43.10 

AddressValueError: -1 (< 0) no está permitido como dirección IPv4

 AddressValueError: 4294967296 (>= 2**32) no está permitido como dirección IPv4 

2001:db8:85a3:2bfe:70d:8a2e:370:71ea 

2001:db8:85a3:2bfe:70d:8a2e:370:771c 

AddressValueError: -1 (< 0) no está permitido como dirección IPv6 

AddressValueError: 340282366920938463463374607431768211456 (>= 2**128) no está permitido como dirección IPv6
 

Publicación traducida automáticamente

Artículo escrito por jeeteshgavande30 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *