Расчет подсети CIDR и ipcalc Python

Я подвергаю сомнению результаты модуля ipcalc ( ipcalc) для Python (кажется, что netaddr может быть лучшим выбором).

Давайте принимать 192.168.1.25/30 В качестве примера. В двоичном коде последний октет 00011001 AND 11111100 = 00011000так я получаю 192.168.1.24 в качестве идентификатора сети и диапазона 192.168.1.24 - 192.168.1.27,

Используя ipcalc, когда я указываю

subnet = ipcalc.Network('192.168.1.25/30')
for x in subnet: print x

Выход

192.168.1.25
192.168.1.26
192.168.1.27
192.168.1.28

Я не понимаю несоответствия. При использовании нотации CIDR кажется, что указание обоих 192.168.1.24/30 а также 192.168.1.25/30 (или же .26/30 или же .27/30) относятся к той же подсети.

Это верно? Это просто ошибка в модуле ipcalc?

1 ответ

Решение

На данный момент существует открытая ошибка: нет способа разрешить IP + Netmask для сетевого объекта

И более раннее сообщение об ошибке, которое обсуждает этот вопрос: Странные подсети подсчета


Но они также добавили функцию под названием network получить сетевой адрес с IP. Из руководства:

>>> localnet = Network('127.128.99.3/8')
>>> print localnet.network()
127.0.0.0

В руководстве конкретно сказано, что конструктор Network должен принимать сетевой адрес в качестве первого аргумента, а не IP-адрес в сети. Скорее сбивает с толку, если вы спросите меня (тем более что вышеприведенный блок кода нарушает это условие). Я бы хотя бы прочитал код для модуля перед его использованием.

Правильно, подсеть - 192.168.1.24/30, поэтому IP-адреса с 192.168.1.24 по 192.168.1.27 составляют часть этой сети.

Другие вопросы по тегам