Сравните, находится ли подсеть в диапазоне IP-адресов в Python?

У меня есть набор подсетей с помеченными описаниями в CSV-файле. Мне нужно назначить эти описания диапазонам Data Probe, которым принадлежат эти подсети, в другом CSV-файле.

Учитывая подсеть с IP-адресом 34.0.0.0 и маской сети 255.255.0.0,
я хочу проверить, находится ли подсеть в диапазоне 34.163.83.230-34.163.83.230

Я рассмотрел возможность создания диапазона из IP-адреса подсети и сетевой маски и сравнения его с диапазонами Data Probe. Я не смог выяснить, даст ли это правильный ответ.

Я не могу использовать последнюю версию Python (это должно работать с приложением, работающим под управлением Python 2.7), поэтому модуль ipaddress для меня не вариант.


person mind_craft    schedule 12.03.2014    source источник


Ответы (1)


Модуль socket предоставляет inet_aton, который преобразует ваши адреса в битовые строки. Затем вы можете преобразовать их в целые числа, используя struct.unpack, замаскировать, используя &, и использовать целочисленное сравнение:

from socket import inet_aton
from struct import unpack

def atol(a):
    return unpack(">L", inet_aton(a))[0]

addr = atol("30.44.230.0")
mask = atol("255.255.0.0")
lo = atol("32.44.230.0")
hi = atol("32.44.230.255")
prefix = addr & mask

print lo <= prefix <= hi 
person Alp    schedule 12.03.2014
comment
Спасибо. Я использовал это, чтобы сделать необходимые сравнения. Я просто хотел, чтобы другие люди знали, что это не полное решение для проверки подсети на диапазон. - person mind_craft; 26.03.2014