Python - Địa chỉ IP

Địa chỉ IP (Giao thức Internet) là một khái niệm mạng cơ bản cung cấp khả năng gán địa chỉ trong mạng. Mô-đun pythonipaddressđược sử dụng rộng rãi để xác thực và phân loại địa chỉ IP thành loại IPV4 và IPV6. Nó cũng có thể được sử dụng để so sánh các giá trị địa chỉ IP cũng như số học địa chỉ IP để xử lý địa chỉ IP.

Xác thực địa chỉ IPV4

Hàm ip_address xác thực địa chỉ IPV4. Nếu phạm vi giá trị vượt quá 0 đến 255, thì nó sẽ gây ra lỗi.

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

Khi chúng tôi chạy chương trình trên, chúng tôi nhận được kết quả sau:

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

Xác thực địa chỉ IPV6

Hàm ip_address xác thực địa chỉ IPV6. Nếu phạm vi giá trị vượt quá 0 đến ffff, thì nó sẽ gây ra lỗi.

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

Khi chúng tôi chạy chương trình trên, chúng tôi nhận được kết quả sau:

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

Kiểm tra loại địa chỉ IP

Chúng tôi có thể cung cấp địa chỉ IP của nhiều định dạng khác nhau và mô-đun sẽ có thể nhận ra các định dạng hợp lệ. Nó cũng sẽ cho biết đó là loại địa chỉ IP nào.

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

Khi chúng tôi chạy chương trình trên, chúng tôi nhận được kết quả sau:

 
       
         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