Статья Автор: Деникина Н.В., Деникин А.В.

Модуль ipaddress (python)

Модуль ipaddress (python)

Для решения задач, связанных с анализом ip адресов можно использовать функции ip_address() и ip_network(), размещенные в модуле ipaddress.
 

Создание IP адреса

С помощью функции ip_address() можно создать объект IP-адреса. В качестве аргумента функции мы указываем строку, в которой записано значение IP-адреса.

Функция ip_address() может возвращать как объект ipaddress.IPv4Address, так и ipaddress.IPv6Address, в зависимости от переданного IP-адреса.


Получение двоичной записи IP-адреса

 IP-адрес можно перевести в десятичное число, а затем с помощью функции bin()[2:] получить его двоичную запись ([2:] необходимо нам, чтобы отбросить у числа префикс двоичного числа 0b).
С помощью функции zfill(32)необходимо добавить к IP-адресу незначащие нули, чтобы он состоял из 32 двоичных цифр.

Это работает только для IPv4-адресов, так как IPv6-адреса имеют длину 128 бит, и для них потребуется zfill(128)



Создание сети

Функция ip_network() создает объект сети. Каждая сеть задаётся IP-адресом и маской сети, поэтому в качестве аргумента функции указывается строка, содержащая IP-адрес сети и маску разделённые /. Маска может указываться либо полной записью, либо профиксной (указанием числа единиц в маске).



Примечение
Если передать IP-адрес узла (например, 192.168.10.100/24), то функция по умолчанию вызовет исключение, если этот адрес не является сетевым (т.е. если биты в адресе хоста не нулевые). Чтобы избежать этого, нужно использовать параметр strict=False.
 

Перебор IP-адресов сети

Перебрать все IP-адреса сети можно пройдясь в цикле по объекту сети.



Создание адреса сети по IP-адресу узла и маске

Используя ip-адресс и маску подсети можно создать адрес сети. Для этого в функцию ip_network() необходимо передать строку, содержащую IP-адрес узла и маску разделённые символом /. Через запятую вторым аргументом необходимо указать число 0 (или параметр strict=False)

Второй параметр, установленный в 0 или False, указывает на то, что функция не будет проверять маску на соответствие стандартам. То есть, если в адресе хоста есть единичные биты в тех позициях, где в маске стоят нули (что не соответствует стандартам), то в этом случае не будет вызвано исключение (программа не завершит свою работу аварийно). Неправильные биты обнулятся и будет создан объект сети.

Параметр strict определяет, должен ли IP-адрес быть строго сетевым адресом (т.е. все биты хоста должны быть нулевыми). Если strict=True (по умолчанию), то функция вызовет исключение, если переданный адрес не является сетевым.



Принадлежность адреса сети

Чтобы определить принадлежит ли IP-адрес сети используйте оператор принадлежности in.



Функция hosts() возвращает итератор, который позволяет перебирать все хосты (IP-адреса) внутри заданной сети, исключая сетевой и широковещательный адрес. Это относится только к IPv4-сетям. В IPv6-сетях нет понятия широковещательного адреса, поэтому для IPv6 функция hosts() будет возвращать все адреса, кроме сетевого.


Можно также узнать количество узлов и IP-адресов, принадлежащих сети.  Обратите внимание, что количество узлов всегда будет на два меньше, чем количество IP-адресов. Так как адрес сети и широковещательный адрес не могут выступать в качестве адреса узла. Это верно только для IPv4-сетей. В IPv6-сетях широковещательный адрес отсутствует, поэтому количество узлов будет на один меньше, чем количество IP-адресов.


Пропустить Навигационные Ссылки.
Чтобы оставить комментарий нужна авторизация
Печать