Python - Indirizzo IP

L'indirizzo IP (protocollo Internet) è un concetto di rete fondamentale che fornisce capacità di assegnazione degli indirizzi in una rete. Il modulo pythonipaddressè ampiamente utilizzato per convalidare e classificare l'indirizzo IP nel tipo IPV4 e IPV6. Può anche essere utilizzato per confrontare i valori dell'indirizzo IP e l'aritmetica degli indirizzi IP per manipolare gli indirizzi IP.

Convalida l'indirizzo IPV4

La funzione ip_address convalida l'indirizzo IPV4. Se l'intervallo di valori è compreso tra 0 e 255, viene generato un errore.

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

Quando eseguiamo il programma sopra, otteniamo il seguente output:

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

Convalida l'indirizzo IPV6

La funzione ip_address convalida l'indirizzo IPV6. Se l'intervallo di valori è compreso tra 0 e ffff, genera un errore.

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 eseguiamo il programma sopra, otteniamo il seguente output:

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

Controlla il tipo di indirizzo IP

Possiamo fornire l'indirizzo IP di vari formati e il modulo sarà in grado di riconoscere i formati validi. Indica anche di quale categoria di indirizzo IP si tratta.

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 eseguiamo il programma sopra, otteniamo il seguente output:

 
       
         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