用python总结很长的ipv4地址列表

用python总结很长的ipv4地址列表,python,network-programming,ip,summarization,Python,Network Programming,Ip,Summarization,我有一个非常长的IPv4地址列表(~18k),我想尽可能多地总结一下:例如 119.195.74.210 119.196.154.2 119.196.247.223 119.197.20.186 119.199.160.107 119.199.160.32 119.199.160.33 119.199.160.34 119.199.160.54 119.199.160.55 结果应该是 119.195.74.210/32 119.196.154.2/32 119.196.247.223/32

我有一个非常长的IPv4地址列表(~18k),我想尽可能多地总结一下:例如

119.195.74.210
119.196.154.2
119.196.247.223
119.197.20.186
119.199.160.107
119.199.160.32
119.199.160.33
119.199.160.34
119.199.160.54
119.199.160.55
结果应该是

119.195.74.210/32
119.196.154.2/32
119.196.247.223/32
119.197.20.186/32
119.199.160.107/32
119.199.160.32/31
119.199.160.34/32
119.199.160.54/31
速度很重要


有什么建议吗?

我会使用
netaddr
模块。假设您有一个带有IP地址的文本文件,您的代码可能如下所示:

import sys
from netaddr import IPAddress, cidr_merge

fh     = open (sys.argv[1], 'r')
iplist = list()
for addr in fh:
    addr = IPAddress (addr.strip())
    iplist.append (addr)

fh.close()
print cidr_merge (iplist)

是否有任何附加/32和/31的模式这些地址空间加起来不太好。。你确定它们是有效的地址空间吗?因为看起来你只是随机把/31放在一个点上,然后把/32。。当在31子网中有
.32
和在32子网中有
.34
时,逻辑与此相反,但突然又在31子网中有
.54
。。在我看来,这不是一个好的结构:/