Python中的IP地址列表到CIDR列表

Python中的IP地址列表到CIDR列表,python,ip,cidr,Python,Ip,Cidr,如何将IP地址列表转换为CIDR列表?有一个名为summary_address_range(first,last)的方法,该方法将两个IP地址(start和finish)转换为CIDR列表。但是,它无法处理IP地址列表 Example: >>> list_of_ips = ['10.0.0.0', '10.0.0.1', '10.0.0.2', '10.0.0.3', '10.0.0.5'] >>> convert_to_cidr(list_of_ips) [

如何将IP地址列表转换为CIDR列表?有一个名为summary_address_range(first,last)的方法,该方法将两个IP地址(start和finish)转换为CIDR列表。但是,它无法处理IP地址列表

Example:
>>> list_of_ips = ['10.0.0.0', '10.0.0.1', '10.0.0.2', '10.0.0.3', '10.0.0.5']
>>> convert_to_cidr(list_of_ips)
['10.0.0.0/30','10.0.0.5/32']

嗯,
总结地址范围
将您的问题简化为将列表拆分为连续范围。假设您可以使用

def to_int(str): struct.unpack("!i",socket.inet_aton(str))[0] def to_int(str):结构解包(“!i”,socket.inet_aton(str))[0] 这应该不会太难。

安装NetAddress

pip安装NetAddress

使用NetAddress的功能:

# Generate lists of IP addresses in range.
ip_range = netaddr.iter_iprange(ip_start, ip_end)
# Convert start & finish range to CIDR.
ip_range = netaddr.cidr_merge(ip_range)

您可以使用NetAddress在一行中完成此操作:

cidrs=netaddr.iprange\u到\u cidrs(ip\u开始,ip\u结束)

通过获取范围的输入文件并利用NetAddress,将CIDR范围扩展到完整的IP列表中

从NetAddress导入IPNetwork
导入系统
如果len(系统argv)<2:
打印“示例用法:python cidrExpand.py cidrRanges.txt>>output.txt”
打开(sys.argv[1],“r”)作为CIDRANGES:
对于CIDRANGES中的行:
ip=ip网络(线路)
对于ip中的ip:
打印ip
cidrRanges.close()
退出()

有关CaTalyst.X的评论,请注意,您需要更改为“代码”才能使其正常工作

这:

需要做到这一点:

cidrs = netaddr.iprange_to_cidrs('54.64.0.0', '54.71.255.255')

如果使用代码的第一个实例,您将得到一个异常,因为ip\u range\u to\u CIDR不是NetAddress方法的有效属性。

在python3中,我们有一个用于此的内置模块:ipaddress

list_of_ips = ['10.0.0.0', '10.0.0.1', '10.0.0.2', '10.0.0.3', '10.0.0.5']
import ipaddress
nets = [ipaddress.ip_network(_ip) for _ip in list_of_ips]
cidrs = ipaddress.collapse_addresses(nets)
list(cidrs)
Out[6]: [IPv4Network('10.0.0.0/30'), IPv4Network('10.0.0.5/32')]
5分钟溶液

  • 复制Excel列中的列表
  • 转到“数据->文本到列”并用分隔符拆分
  • 如果需要“/24”范围,请使用以下公式连接前3列 =A1&“&B1&”&C1&“.0/24”
  • 复制新列并将“仅值”粘贴到另一列中
  • 从“数据->删除重复项”中删除此列的重复项
  • 您的“/24”苹果酒列表已准备就绪。您可以使用相同的方式设置“/16”和“/8”

稍后谢谢:-p

list()是不必要的嗨,这实际上并没有回答OP问题的限制,因为他们明确要求Python解决方案。
cidrs = netaddr.iprange_to_cidrs('54.64.0.0', '54.71.255.255')
list_of_ips = ['10.0.0.0', '10.0.0.1', '10.0.0.2', '10.0.0.3', '10.0.0.5']
import ipaddress
nets = [ipaddress.ip_network(_ip) for _ip in list_of_ips]
cidrs = ipaddress.collapse_addresses(nets)
list(cidrs)
Out[6]: [IPv4Network('10.0.0.0/30'), IPv4Network('10.0.0.5/32')]