2016-11-14 6 views
0

私は現在IPのリストが非常に多いですが、現実的に可能な限り減らそうとしています。 netaddrモジュールのcidr_merge()メソッドを使用すると、私のリストが大幅に圧縮されることを期待しています。ただし、期待どおりに動作しているようには見えません。Python 3.5 netaddrが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 

はにマージ::cidr_merge()方法から5.8.183.0/26

私の実際の結果は以下のとおりです。

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 
次のIPの私が示すように、それらをマージする期待を与え例えば

ここに私のコードです:

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 

をスクリプトからの出力は次のとおりです。

[IPネットワーク( '5.8.183.1/32')、IPネットワーク( '5.8.183.2/31')、IPネットワーク( '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 

出力:

[IPネットワーク( '5.8.183.1/32') 、IPNetwork( '5.8.183.2/31')、IPNetwork( '5.8.183.4/30')、IPNetwork( '5.8.183.8/29')]

関連する問題