2016-10-21 2 views
0

Я создал проект python, который сканирует диапазон ip (т. Е. X.y.z.0/24) и возвращает список сетевых хостов. Он сохраняет список онлайн-хостов для файлов только с помощью ip (т.е. ['192.168.0.1', '192.168.0.2', '192.168.0.8', ...]. У меня возникают проблемы с этим следующим шагом. Я хотел бы сравнить этот список онлайн-хостов с диапазоном IP, чтобы убедиться, что это компьютеры для устранения других устройств. У меня есть список резервирования DHCP для компьютеров, которые я могу использовать. Есть ли простой способ сделать это и обновить список onHosts?Сравнение списка IP-адресов в другой список IP-адресов или диапазон IP-адресов

+0

преобразования IP-адресов в Интс, конвертировать IPRange в Bitmask, увидеть, если ф находится в пределах этой битовой маски. –

+0

Любые примеры были бы полезными и полезными. – Ryan

ответ

0

Здесь предлагается решение, которое вы можете попробовать (это немного раздутой, но я буду редактировать его позже, надеюсь)

def get_range(str_num): 
    """ Converts string representation of number or range into (min,max) tuple """ 
    try: 
     num = int(str_num) 
     return num, num 
    except ValueError: 
     min_, max_ = str_num.split('-') 
     return int(min_), int(max_) 

def host_in_range(host, host_range): 
    """ Checks whether given host belongs to given range (both are range representation """ 
    #print(*zip(host, host_range)) 
    for (min_h, max_h), (min_r, max_r) in zip(host, host_range): 
     if (min_h < min_r) or (max_h > max_r): return False 
    return True 


if __name__ == "__main__": 

    hosts_str = ['192.168.0.1', '192.168.0.10', '0.168.0.0', '192.168.1.10', '192.168.0.255'] 
    hosts = [x.split('.') for x in hosts_str] 
    hosts = [[get_range(x) for x in elem] for elem in hosts] 

    host_ranges_str = ['0-255.168.0.0-254', '192.168.2-5.0-255'] 
    host_ranges = [x.split('.') for x in host_ranges_str] 
    host_ranges = [[get_range(x) for x in elem] for elem in host_ranges] 

    for x in range(5): 
     print(hosts_str[x], "in range", host_ranges_str[0], host_in_range(hosts[x], host_ranges[0])) 
+0

Спасибо за Информация. Позвольте мне попробовать это и посмотреть, что произойдет. Я наткнулся на простой способ конвертировать IP-строки в INT и обратно в модуль ipaddress. Это делает сравнение довольно простым статически, но программа, которую я создаю, является переменной на основе пользовательского ввода. int (ipaddress.IPv4Address ('192.168.0.1')) str (ipaddress.IPv4Address (3232235521)) – Ryan

Смежные вопросы