Python - Dirección IP

La dirección IP (Protocolo de Internet) es un concepto de red fundamental que proporciona la capacidad de asignación de direcciones en una red. El módulo de Pythonipaddressse utiliza ampliamente para validar y categorizar la dirección IP según el tipo IPV4 e IPV6. También se puede utilizar para comparar los valores de la dirección IP, así como la aritmética de la dirección IP para manipular las direcciones IP.

Validar la dirección IPV4

La función ip_address valida la dirección IPV4. Si el rango de valores va más allá de 0 a 255, arroja un error.

print (ipaddress.ip_address(u'192.168.0.255'))
print (ipaddress.ip_address(u'192.168.0.256'))

Cuando ejecutamos el programa anterior, obtenemos el siguiente resultado:

192.168.0.255
ValueError: u'192.168.0.256' does not appear to be an IPv4 or IPv6 address

Validar la dirección IPV6

La función ip_address valida la dirección IPV6. Si el rango de valores va más allá de 0 a ffff, arroja un error.

print (ipaddress.ip_address(u'FFFF:9999:2:FDE:257:0:2FAE:112D'))
#invalid IPV6 address
print (ipaddress.ip_address(u'FFFF:10000:2:FDE:257:0:2FAE:112D'))

Cuando ejecutamos el programa anterior, obtenemos el siguiente resultado:

ffff:9999:2:fde:257:0:2fae:112d
ValueError: u'FFFF:10000:2:FDE:257:0:2FAE:112D' does not appear to be an IPv4 or IPv6 address

Verifique el tipo de dirección IP

Podemos proporcionar la dirección IP de varios formatos y el módulo podrá reconocer los formatos válidos. También indicará qué categoría de dirección IP es.

print type(ipaddress.ip_address(u'192.168.0.255'))
print type(ipaddress.ip_address(u'2001:db8::'))
print ipaddress.ip_address(u'192.168.0.255').reverse_pointer
print ipaddress.ip_network(u'192.168.0.0/28')

Cuando ejecutamos el programa anterior, obtenemos el siguiente resultado:

 
       
         255.0.168.192.in-addr.arpa 192.168.0.0/28 
       
      

Comparison of IP Addresses

We can make a logical comparison of the IP addresses finding out if they are equal or not. We can also compare if one IP address is greater than the other in its value.

print (ipaddress.IPv4Address(u'192.168.0.2') > ipaddress.IPv4Address(u'192.168.0.1'))
print (ipaddress.IPv4Address(u'192.168.0.2') == ipaddress.IPv4Address(u'192.168.0.1'))
print (ipaddress.IPv4Address(u'192.168.0.2') != ipaddress.IPv4Address(u'192.168.0.1'))

When we run the above program, we get the following output −

True
False
True

IP Addresses Arithmetic

We can also apply arithmetic operations to manipulate IP addresses. We can add or subtract integers to an IP address. If after addition the value of the last octet goes beyond 255 then the previous octet gets incremented to accommodate the value. If the extra value can not be absorbed by any of the previous octet then a value error is raised.

print (ipaddress.IPv4Address(u'192.168.0.2')+1)
print (ipaddress.IPv4Address(u'192.168.0.253')-3)
# Increases the previous octet by value 1.
print (ipaddress.IPv4Address(u'192.168.10.253')+3)
# Throws Value error
print (ipaddress.IPv4Address(u'255.255.255.255')+1)

When we run the above program, we get the following output −

192.168.0.3
192.168.0.250
192.168.11.0
AddressValueError: 4294967296 (>= 2**32) is not permitted as an IPv4 address