【发布时间】:2017-03-28 09:39:46
【问题描述】:
我目前有一个非常大的 IP 列表,我正在尝试尽可能多地减少这些 IP。使用netaddr 模块的cidr_merge() 方法,我希望我的列表会大大压缩。但是,它似乎没有按预期工作。
例如,给定以下 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:')
【问题讨论】:
标签: python networking ip subnet cidr