【发布时间】:2015-02-10 06:07:42
【问题描述】:
我使用的是 python 2.6.6,我不能更改它。我有一个 IPv4 地址的排序列表。我需要找到覆盖列表中所有 IP 地址的最小网络。最小的网络可以是 CIDR,也可以是带有子网掩码的网络地址。我还没有找到使用netaddr 模块的简单方法。示例如下:
x=['192.168.0.0', '192.168.2.245', '192.168.255.255']
cidr = get_cidr_for_addresses(x)
print cidr ##should print '192.168.0.0/16'
【问题讨论】:
-
为什么不使用按位运算来解决这个问题?将地址转换为位,找到第一个不同的位并将所有前面的位作为您的网络,然后将该数字取反以获得子网。如果您需要更多信息,这可能有助于将其可视化:subnet-calculator.com
-
谢谢。叫我懒惰,但我正在寻找一个库来为我做这件事,这样我就不必维护代码了。
标签: python ip-address inetaddress