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