Python-IPアドレス

IPアドレス(インターネットプロトコル)は、ネットワークにアドレス割り当て機能を提供する基本的なネットワークの概念です。PythonモジュールipaddressIPアドレスを検証してIPV4およびIPV6タイプに分類するために広く使用されています。また、IPアドレス値の比較や、IPアドレスを操作するためのIPアドレス演算にも使用できます。

IPV4アドレスを検証する

ip_address関数は、IPV4アドレスを検証します。値の範囲が0〜255を超えると、エラーがスローされます。

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

上記のプログラムを実行すると、次の出力が得られます-

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

IPV6アドレスを検証する

ip_address関数は、IPV6アドレスを検証します。値の範囲が0からffffを超えると、エラーがスローされます。

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

上記のプログラムを実行すると、次の出力が得られます-

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

IPアドレスの種類を確認してください

さまざまな形式のIPアドレスを提供でき、モジュールは有効な形式を認識できるようになります。また、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')

上記のプログラムを実行すると、次の出力が得られます-

 
       
         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