Open In App

Working with IP Addresses in Python

Improve
Improve
Like Article
Like
Save
Share
Report

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.

  • IPv4 : It is a 32-bit number typically written in decimal digits formatted as four 8-bit numbers separated by dots, is used to identify the network interface of a machine. The ip_address() function throws an error if the range value exceeds from 0 to 255.

Python3




# 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
 

  • IPv6 : It is represented by eight groups of four hexadecimal digits separated by colons, where each group represents 16 bits, two octets also known as hextet. The ip_address() function throws an error if the range value exceeds from 0 to FFFF.

Python3




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

  • Type Check operation: The type() method takes various formats of IP addresses as input and recognizes whether it is IPv4 or IPv6 address, indicating the category of the IP address.

Python3




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

  • IP Comparison Operations : The basic logical operators can be used to compare the IP addresses, whether one value is equal or greater or less than the other.

Python3




# 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
 

  • Arithmetic Operations: IP Addresses can be manipulated by performing some arithmetic operations. Integers can be added or subtracted from the IP addresses. Under addition if value of last octet exceeds 255 then previous octet is incremented and so on, same in the case of subtraction if the value of the last octet becomes less than zero, then the previous octet is decremented, and so on.

Python3




# 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
 

 



Last Updated : 18 Aug, 2021
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads