Автор оригинала: Pankaj Kumar.
Эй, ребята! Сегодня мы узнаем о модуле ipaddress в Python. Итак, без лишних слов, давайте начнем.
Что такое IP-адрес?
IP расшифровывается как интернет-протокол. Он используется для идентификации узла в любой сети. Поэтому любое устройство, которое подключается к Интернету, должно иметь IP-адрес.
Существует две версии IP-адресов: IPv4 и IPv6. В настоящее время используется IPv4, в то время как IPv6 внедряется крупными сетевыми провайдерами медленно из-за нехватки адресов IPv4 по сравнению с устройствами в сети.
Чтобы узнать больше об IP-адресах, посетите страницу Wiki здесь .
Как использовать модуль ipaddress в Python?
Давайте начнем с использования модуля ipaddress прямо сейчас. Чтобы задать адрес хоста, мы используем ip-адрес.ip_address( ) .
Эта функция автоматически определяет, какая версия будет использоваться на основе переданных значений. Он либо возвращает адрес IPv4, либо адрес IPv6.
1. Как создать действительный IPv4-адрес?
IPv4 проверяет значения в диапазоне от 0 до 255. Целое число, которое помещается в 32 бита, представляет октет в адресе. Целое число, упакованное в байтовый объект длиной 4.
import ipaddress ipaddress.ip_address('199.138.0.1')
Выход:
IPv4Address('199.138.0.1')
2. Как создать действительный IPv6-адрес?
IPv6 проверяет значения в диапазоне от 0 до ffff. Целое число, которое укладывается в 128 бит. Целое число, упакованное в байтовый объект длиной 16.
import ipaddress ipaddress.ip_address('2011:cb0::') ipaddress.ip_address('FFFF:9999:2:FDE:257:0:2FAE:112D')
Выход:
IPv6Address('2011:cb0::') IPv6Address('ffff:9999:2:fde:257:0:2fae:112d')
Работа с IP-адресами в Python с помощью модуля ipaddress
IP-адреса сопровождаются набором правил. Диапазонам IP-адресов назначаются различные функции.
Например, 127.0.0.1-это адрес обратной связи, назначенный сетевому модулю на вашем компьютере. Когда вы отправляете пинг-пакет на этот IP-адрес, вы, по сути, пингуете свой собственный компьютер.
1. Основные функции IP
Давайте посмотрим, как мы можем проверить, какие адреса являются петлевыми, многоадресными, локальными ссылками или зарезервированы с помощью модуля ipaddress в Python
import ipaddress ipa = ipaddress.ip_address('199.138.0.1') print(ipa.is_private) # Checks if address is private print(ipa.is_global) # Checks if address is global #If address is a loopback address print(ipaddress.ip_address("127.0.0.1").is_loopback) #If address is reserved for multiclass use print(ipaddress.ip_address("229.100.0.23").is_multicast) #If address is reserved for link local usage print(ipaddress.ip_address("169.254.0.100").is_link_local) #True if the address is otherwise IETF reserved. print(ipaddress.ip_address("240.10.0.1").is_reserved)
Выход:
False True True True True True
2. Обратный поиск IP-адресов
Функция обратного указателя запрашивает DNS для разрешения IP-адреса, добавленного в качестве аргумента здесь. Если DNS сможет разрешить IP-адрес, вы получите вывод с назначенным именем.
Если вы пропингуете IP-адрес, назначенный доменному имени, вы, скорее всего, получите имя сервера, на котором существует домен. Однако это может измениться в зависимости от настройки брандмауэра.
ipaddress.ip_address("199.138.0.1").reverse_pointer
Выход:
'1.0.138.199.in-addr.arpa'
Сеть IPv4 и сеть IPv6 могут помочь нам определить и проверить определения IP-сетей.
Мы можем получить IP-сеть в требуемом формате без написания пользовательского кода.
- Префикс/ обозначает количество битов высокого порядка, установленных в сетевой маске.
- 2. Маска сети-это IP-адрес с набором битов высокого порядка.
- 3. Маска хоста является логической обратной маской netmask и используется в списке управления доступом Cisco.
ipn = ipaddress.ip_network("10.0.0.0/16") print(ipn.with_prefixlen) print(ipn.with_hostmask) print(ipn.with_netmask)
Выход:
10.0.0.0/16 10.0.0.0/0.0.255.255 10.0.0.0/255.255.0.0
1. Проверьте, является ли IP-адрес IPv4 или IPv6
ip-адрес.функция ip_network( ) используется для возврата типа сети адреса. Он подтверждает, находится ли IP-адрес в сети IP4 или сети IP6.
import ipaddress ipaddress.ip_network('199.138.0.1') ipaddress.ip_network('FFFF:9999:2:FDE:257:0:2FAE:112D')
Выход:
IPv4Network('199.138.0.1/32') IPv6Network('ffff:9999:2:fde:257:0:2fae:112d/128')
2. Идентификация хостов в IP-сети
Хосты-это все IP-адреса, принадлежащие сети, за исключением сетевого адреса и широковещательного адреса сети.
host( ) возвращает итератор по используемым хостам в сети.
Сети, длина маски которых равна 31, сетевой адрес и широковещательный адрес сети также включены в результат, а сети, длина маски которых равна 32, возвращают список возвращаемых адресов одного хоста.
ipn= ipaddress.ip_network('192.0.2.0/29') list(ipn.hosts())
Выход:
[IPv4Address('192.0.2.1'), IPv4Address('192.0.2.2'), IPv4Address('192.0.2.3'), IPv4Address('192.0.2.4'), IPv4Address('192.0.2.5'), IPv4Address('192.0.2.6')]
3. Определение широковещательного адреса для сетей
С помощью broadcast_address мы можем запросить DNS-сервер ответить широковещательным адресом в сети.
ipn= ipaddress.ip_network('199.1.8.0/29') ipn.broadcast_address
Выход:
IPv4Address('199.1.8.7')
4. Определение перекрытий IP-сетей
Эта функция говорит нам, что если сеть частично или полностью содержится в другой сети. Он возвращает либо true, либо false.
ipn1 = ipaddress.ip_network("10.10.1.32/29") ipn2 = ipaddress.ip_network("10.10.1.32/27") ipn3 = ipaddress.ip_network("10.10.1.48/29") print(ipn1.overlaps(ipn2)) print(ipn1.overlaps(ipn3)) print(ipn3.overlaps(ipn2))
Выход:
True False True
5. Подсети в IP-сетях
Он возвращает итератор сетевых объектов. prefixlen_diff-это сумма длины префикса, которая должна быть увеличена, new_prefix-это новый префикс подсетей и больше нашего префикса.
ipn1 = ipaddress.ip_network("10.10.1.32/29") print(list(ipn1.subnets())) print(list(ipn1.subnets(prefixlen_diff=2))) print(list(ipn1.subnets(new_prefix=30)))
Выход:
[IPv4Network('10.10.1.32/30'), IPv4Network('10.10.1.36/30')] [IPv4Network('10.10.1.32/31'), IPv4Network('10.10.1.34/31'), IPv4Network('10.10.1.36/31'), IPv4Network('10.10.1.38/31')] [IPv4Network('10.10.1.32/30'), IPv4Network('10.10.1.36/30')]
6. Создание суперсетей с помощью модуля ipaddress
Суперсети – это комбинация одной или нескольких подсетей. Вы можете узнать больше о суперсетах здесь . С помощью метода supernet в модуле ipaddress можно создавать подсети, указывая необходимую информацию.
- prefixlen_diff – это сумма, на которую должна быть увеличена длина нашего префикса
- new_prefix – это желаемый новый префикс подсетей, который должен быть больше нашего префикса.
ipnn = ipaddress.ip_network("172.10.15.160/29") print(ipnn.supernet(prefixlen_diff=3)) print(ipnn.supernet(new_prefix=20))
Выход:
172.10.15.128/26 172.10.0.0/20
7. Проверьте, является ли IP-сеть суперсетью/подсетью другой IP-сети
Возвращает true, если сеть является подсетью другого, если сеть является суперсетью другого. Возвращает либо true, либо false.
a = ipaddress.ip_network("192.168.1.0/24") b = ipaddress.ip_network("192.168.1.128/30") print(b.subnet_of(a)) print(a.supernet_of(b))
Выход:
True True
8. Работа с объектами интерфейса IPv4
Объекты интерфейса можно использовать в качестве ключей в словарях, поскольку они хэшируются.
Интерфейс IPv4 наследует все атрибуты от адреса IPv4, поскольку интерфейс IPv4 является подклассом адреса IPv4.
Вот, 199.167.1.6 IP-адрес находится в сети 199.167.1.0/24
from ipaddress import IPv4Interface ifc = IPv4Interface("199.167.1.6/24") print(ifc.ip) print(ifc.network)
Выход:
199.167.1.6 199.167.1.0/24
Мы можем представить сетевой интерфейс в префиксной нотации, как сетевую маску и как маску хоста.
interface = IPv4Interface('192.0.2.5/24') print(interface.with_prefixlen) print(interface.with_netmask) print(interface.with_hostmask)
Выход:
192.0.2.5/24 192.0.2.5/255.255.255.0 192.0.2.5/0.0.0.255
Различные операции с IP-адресами
Вы можете проверить, как IP-адрес сравнивается с другим с помощью операторов сравнения в Python . Взгляните на приведенный ниже пример.
ipa1=ipaddress.ip_address("127.0.0.2") ipa2=ipaddress.ip_address("127.0.0.1") print(ipa1>ipa2) print(ipa1==ipa2) print(ipa1!=ipa2)
Выход:
True False True
Мы можем добавлять или вычитать целые числа из объектов IP-адресов.
ipa = ipaddress.ip_address("10.10.1.0") print( ipa + 9)
Выход:
10.10.1.9
Адреса могут быть преобразованы в строки или целые числа с помощью встроенных функций ул( ) и int( ).
str(ipaddress.IPv4Address('199.138.0.1')) int(ipaddress.IPv4Address('192.198.0.1'))
Выход:
'199.138.0.1' 3234201601
IPv6-адреса преобразуются в строки без идентификатора зоны.
str(ipaddress.IPv6Address('::8')) int(ipaddress.IPv6Address('::100'))
Выход:
'::8' 256
Вывод
В этом уроке мы узнали об адресах IPv4 и IPv6, сети и интерфейсе. Для получения большего количества такого контента следите за обновлениями. Счастливого Обучения! 🙂
Рекомендации
Официальные документы модуля IPAddress