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

par*_*axi 5 python ip cidr

如何将IP地址列表转换为CIDR列表? Google的ipaddr-py库有一个名为summarize_address_range(first,last)的方法,它将两个IP地址(开始和结束)转换为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']
Run Code Online (Sandbox Code Playgroud)

par*_*axi 6

安装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)
Run Code Online (Sandbox Code Playgroud)


CaT*_*t.X 5

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

cidrs = netaddr.iprange_to_cidrs(ip_start, ip_end)
Run Code Online (Sandbox Code Playgroud)


Wan*_*ang 5

在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')]
Run Code Online (Sandbox Code Playgroud)