在Python中获取给定IPv4地址列表的最小网络

在Python中获取给定IPv4地址列表的最小网络,python,ip-address,inetaddress,Python,Ip Address,Inetaddress,我正在使用Python2.6.6,不允许更改它。我有一个已排序的IPv4地址列表。我需要找到覆盖列表中所有ip地址的最小网络。最小的网络可以是CIDR,也可以是带有子网掩码的网络地址。我还没有找到一个简单的方法来使用这个模块。下面是一个例子: 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

我正在使用Python2.6.6,不允许更改它。我有一个已排序的IPv4地址列表。我需要找到覆盖列表中所有ip地址的最小网络。最小的网络可以是CIDR,也可以是带有子网掩码的网络地址。我还没有找到一个简单的方法来使用这个模块。下面是一个例子:

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'

这似乎正是我们要做的

$python
Python 2.7.9rc1(默认值,2014年12月10日,10:58:16)
[GCC 4.9.2]关于linux2
有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。
>>>导入NetAddress
>>>x=NetAddress.spanning_cidr(['192.168.0.0','192.168.2.245','192.168.255.255']))
>>>打印x
192.168.0.0/16
>>>打印类型(x)

为什么不使用位运算来解决这个问题?将地址转换为位,找到第一个不同的位,将前面的所有位作为网络,然后倒数得到子网。如果你需要更多信息,这可能有助于形象化:谢谢。可以说我懒惰,但我正在寻找一个库来为我这样做,这样我就不必维护代码。
$ python
Python 2.7.9rc1 (default, Dec 10 2014, 10:58:16)
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import netaddr
>>> x = netaddr.spanning_cidr(['192.168.0.0', '192.168.2.245', '192.168.255.255'])
>>> print x
192.168.0.0/16
>>> print type(x)
<class 'netaddr.ip.IPNetwork'>