python - вычитание диапазонов из больших диапазонов

Проблема в том, что я в основном хотел бы найти, есть ли свободные подсети между агрегированным адресом BGP (например: 10.76.32.0 255.255.240.0) и всеми сетевыми командами на одном маршрутизаторе (например: 10.76.32.0 255.255 .255,0, 10,76,33,0 255,25,255,0)

В приведенном выше примере 10.76.34.0 -> 10.76.47.255 было бы бесплатным.

Я собираюсь решить эту проблему, преобразовывая IP-адреса и маски подсети в двоичные и вычитая этот путь.

Чтобы это было просто, я буду держать этот пример в десятичной форме, но это может оставить меня со следующей проблемой: допустим, у меня диапазон от 1 до 250, я вычитаю из этого меньший диапазон, который идет от 20 до 23, я бы хотел в конечном итоге диапазон от 1 до 19 и от 24 до 250.

Использование команды range не дает мне ожидаемых результатов, и, хотя я мог бы создать список с каждым элементом в диапазоне и вычесть другой список с подмножеством элементов, мне кажется, что это может быть не очень хорошо идея иметь списки, возможно, десятки тысяч элементов.

Hunor

python,networking,range,subnet,

0

Ответов: 1


1 принят

Если вы пытаетесь создать «диапазон» с пробелом в нем, то есть с 1-9 и 24-250, вы можете попытаться использовать filteritertools(или ifilterfalseесли вы используете Python 2.X) из itertoolsмодуля, который принимает как его аргументы - предикат и последовательность, и возвращает элементы последовательности, в которой возвращается предикат False. Например, если вы выполните:

from itertools import filterfalse
new_range = filterfalse(lambda x: 20 <= x <= 23, range(1,251))

new_rangeбудет итерабельным, содержащим числа 1-19 и 24-250, которые можно использовать аналогично range():

for i in new_range:
    do_things() 
питон, сети, диапазон, подсеть,
Похожие вопросы