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')
假设我有两个 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')