2016-11-14 8 views
0

В настоящее время у меня очень большой список IP-адресов, которые я пытаюсь уменьшить настолько, насколько это возможно. Используя модуль netaddr 'cidr_merge(), я ожидаю, что мой список будет резко сокращен. Однако он работает не так, как ожидалось.Python 3.5 netaddr не правильно соединяет IP

К примеру, учитывая следующие IP-адресов, я бы ожидать, что они будут объединены, как показано ниже:

5.8.183.1 
5.8.183.2 
5.8.183.5 
5.8.183.6 
5.8.183.10 
5.8.183.14 
5.8.183.18 
5.8.183.22 
5.8.183.26 
5.8.183.30 
5.8.183.34 
5.8.183.38 
5.8.183.42 
5.8.183.46 

Объединено: 5.8.183.0/26

Мои фактические результаты от метода cidr_merge() являются:

5.8.183.1/32 
5.8.183.2/32 
5.8.183.5/32 
5.8.183.6/32 
5.8.183.10/32 
5.8.183.14/32 
5.8.183.18/32 
5.8.183.22/32 
5.8.183.26/32 
5.8.183.30/32 
5.8.183.34/32 
5.8.183.38/32 
5.8.183.42/32 
5.8.183.46/32 

Это мой код:

from netaddr import * 

try: 
    with open('nodes', 'r') as in_file: 
     dat_ips = [IPNetwork(line) for line in in_file.read().splitlines()] 

    dat_merged_ips = cidr_merge(dat_ips) 

    with open('output.txt', 'w') as out_file: 
     for x in dat_merged_ips: 
      out_file.write(str(x) + '\n') 

except IOError: 
    print('File error detected:') 

ответ

1

На основании списка предоставленных вами IP-адресов netaddr и ваш скрипт работают правильно. Вам нужно добавить соседние IP-адреса. Возьмите этот файл узла, например:

5.8.183.1 
5.8.183.2 
5.8.183.3 
5.8.183.4 
5.8.183.5 
5.8.183.6 
5.8.183.7 
5.8.183.8 

Выход из вашего сценария:

[IPNetwork ('5.8.183.1/32'), IPNetwork ('5.8.183.2/31'), IPNetwork ('5.8.183.4/30')]

Возьмите этот список узлов:

5.8.183.1 
5.8.183.2 
5.8.183.3 
5.8.183.4 
5.8.183.5 
5.8.183.6 
5.8.183.7 
5.8.183.8 
5.8.183.9 
5.8.183.10 
5.8.183.11 
5.8.183.12 
5.8.183.13 
5.8.183.14 
5.8.183.15 

Выход:

[IPNetwork ('5.8.183.1/32') , IPNetwork («5.8.183.2/31»), IPNetwork («5.8.183.4/30»), IPNetwork («5.8.183.8/29»)]

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

  • Нет связанных вопросов^_^