Расчет подсети 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 составляют часть этой сети.