Учебники

Python — IP-адрес

IP-адрес (Интернет-протокол) является фундаментальной сетевой концепцией, которая обеспечивает возможность назначения адресов в сети. Ipaddress модуля Python широко используется для проверки и классификации IP-адресов по типам 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

Сравнение IP-адресов

Мы можем сделать логическое сравнение IP-адресов, чтобы выяснить, равны они или нет. Мы также можем сравнить, если один IP-адрес больше, чем другой по своему значению.

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

Когда мы запускаем вышеуказанную программу, мы получаем следующий вывод:

True
False
True

Арифметика IP-адресов

Мы также можем применять арифметические операции для управления IP-адресами. Мы можем добавить или вычесть целые числа в IP-адрес. Если после добавления значение последнего октета выходит за пределы 255, то предыдущий октет увеличивается для соответствия значению. Если дополнительное значение не может быть поглощено ни одним из предыдущих октетов, возникает ошибка значения.


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)

Когда мы запускаем вышеуказанную программу, мы получаем следующий вывод: