Найдите, существует ли IP-адрес в диапазоне IP-адресов CIDR вручную Python

У меня есть список IP-адресов с нотацией CIDR, например:

10.10.1.32/27

Что я хочу сделать, так это проверить, попадает ли IP в этот диапазон. Итак, я хочу иметь возможность видеть, попадает ли туда 10.10.1.44, что было бы, или 10.10.1.90 нет.

Я знаю, что в настоящее время существует множество библиотек Python, таких как ipcalc и netaddr.

Но я не хочу делать это вручную. Я знаю, что мне нужно преобразовать IP-адреса в двоичные файлы и выполнить некоторые вычисления на основе этого. Я чувствую, что я довольно близок, но я не на 100% разбираюсь в побитовых операциях в Python.

Я нашел здесь один, который делает это для C, но я не могу найти, как это сделать в Python без использования библиотеки.

Спасибо!


person user2146933    schedule 06.02.2015    source источник


Ответы (2)


Я думаю, вы можете легко адаптировать скрипт здесь. Он даст вам сетевой и широковещательный адреса, скажем, N1.N2.N3.N4 и B1.B2.B3.B4. Затем вы просто проверяете, находится ли адрес, который вы тестируете, A1.A2.A3.A4 в пределах двух, выполнив

if N1 <= A1 <= B1 and .... and N4 <= A4 <= B4:
    return True
return False
person redsk    schedule 06.02.2015

Думаю, в пакете netaddr есть то, что вам нужно. Я фактически делаю все вычисления IP с этой библиотекой.

https://pypi.python.org/pypi/netaddr

person Alecsandru Chirosca    schedule 06.03.2015