Python - Adresse IP

L'adresse IP (Internet Protocol) est un concept de mise en réseau fondamental qui fournit une capacité d'attribution d'adresses dans un réseau. Le module pythonipaddressest largement utilisé pour valider et classer les adresses IP en types IPV4 et IPV6. Il peut également être utilisé pour comparer les valeurs d'adresse IP ainsi que l'arithmétique d'adresse IP pour manipuler les adresses IP.

Validez l'adresse IPV4

La fonction ip_address valide l'adresse IPV4. Si la plage de valeurs est au-delà de 0 à 255, une erreur est générée.

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

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -

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

Validez l'adresse IPV6

La fonction ip_address valide l'adresse IPV6. Si la plage de valeurs est au-delà de 0 à ffff, cela génère une erreur.

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

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -

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

Vérifiez le type d'adresse IP

Nous pouvons fournir l'adresse IP de différents formats et le module sera en mesure de reconnaître les formats valides. Il indiquera également de quelle catégorie d'adresse IP il s'agit.

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

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -

 
       
         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