Python 最低公共 CIDR

Python Lowest Common CIDR

假设我有两个 IP:startip = '63.223.64.0'endip = '63.223.127.255'

我知道在 python 中 netaddr.iprange_to_cidrs(startip, endip) 会为您提供恰好位于边界之间的 CIDR 子网列表。但是,我希望使用 one CIDR 子网来覆盖所有内容,即使它提供了更多 IP。

我更喜欢执行此操作的函数,但我也欢迎任何 math/logic 计算它并最终将其转换为代码。

你试过ipaddress模块了吗?它带有 Python 3,但可安装用于 Python 2。

import ipaddress
startip = ipaddress.IPv4Address('63.223.64.0')
endip = ipaddress.IPv4Address('63.223.127.255')
# summarize_address_range produces a generator, so force the results
networks = [n for n in ipaddress.summarize_address_range(startip, endip)]
print(networks)
# [IPv4Network('63.223.64.0/18')] 

看起来 netaddr.spanning_cidr 成功了:

In [5]: netaddr.spanning_cidr(['63.223.64.0', '63.223.127.255'])
Out[5]: IPNetwork('63.223.64.0/18')