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

2024-04-19 12:26:42 发布

您现在位置:Python中文网/ 问答频道 /正文

如何将IP地址列表转换为CIDR列表?Google's ipaddr-py library有一个名为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']

Tags: of方法py列表addressgooglelibraryrange
3条回答

在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')]

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

cidrs = netaddr.iprange_to_cidrs(ip_start, ip_end)

安装netaddr。

pip install netaddr

netaddr的使用功能:

# 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)

相关问题 更多 >