Python - endereço IP

O endereço IP (protocolo da Internet) é um conceito de rede fundamental que fornece capacidade de atribuição de endereço em uma rede. O módulo pythonipaddressé amplamente utilizado para validar e categorizar o endereço IP para o tipo IPV4 e IPV6. Ele também pode ser usado para fazer comparação dos valores do endereço IP, bem como aritmética do endereço IP para manipular os endereços IP.

Valide o endereço IPV4

A função ip_address valida o endereço IPV4. Se o intervalo de valores estiver além de 0 a 255, ocorrerá um erro.

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

Quando executamos o programa acima, obtemos a seguinte saída -

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

Valide o endereço IPV6

A função ip_address valida o endereço IPV6. Se o intervalo de valores estiver além de 0 a ffff, ocorrerá um erro.

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'))

Quando executamos o programa acima, obtemos a seguinte saída -

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 o tipo de endereço IP

Podemos fornecer o endereço IP de vários formatos e o módulo será capaz de reconhecer os formatos válidos. Ele também indicará a categoria de endereço IP.

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')

Quando executamos o programa acima, obtemos a seguinte saída -

 
       
         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