Open In App

Working with IP Addresses in Python

IP (Internet Protocol) -Address is the basic fundamental concept of computer networks which provides the address assigning capabilities to a network. Python provides ipaddress module which is used to validate and categorize the IP address according to their types(IPv4 or IPv6). This module is also used for performing wide range of operation like arithmetic, comparison, etc to manipulate the IP addresses.

Validating IP Addresses-

For validating IP addresses python uses ip_address() function provided by the ipaddress module which raises error if values of IP exceeds the range of the type of the IP address.






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

Output : 

175.198.42.211
 



ValueError: ‘175.198.42.270’ does not appear to be an IPv4 or IPv6 address
 




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

Output : 

2001:db8:85a3:2bfe:70d:8a2e:370:7334
 

ValueError: ‘2001:0db8:85a3:0ff0:00000:8a2e:0370:7334’ does not appear to be an IPv4 or IPv6 address
 

Operations on IP Address-

Various operations like arithmetic, comparison, type, etc can be performed on the IP addresses with the help of ipaddress module. Some operations are listed below: 




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

Output : 

<class ‘ipaddress.IPv4Address’> 

<class ‘ipaddress.IPv4Address’> 

<class ‘ipaddress.IPv6Address’> 

<class ‘ipaddress.IPv6Address’>
 




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

Output :

True
 

False
 

True
 

True
 




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

Output : 

129.116.255.250 

175.199.43.10 

AddressValueError: -1 (< 0) is not permitted as an IPv4 address

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

2001:db8:85a3:2bfe:70d:8a2e:370:71ea 

2001:db8:85a3:2bfe:70d:8a2e:370:771c 

AddressValueError: -1 (< 0) is not permitted as an IPv6 address 

AddressValueError: 340282366920938463463374607431768211456 (>= 2**128) is not permitted as an IPv6 address
 

 


Article Tags :