我使用的是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'
答案 0 :(得分:6)
这似乎正是netaddr.spanning_cidr的作用。
$ 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'>
答案 1 :(得分:-1)
# Baseline IP
tmp = 19216800
# List of IPS
x=['192.168.0.0', '192.168.2.245', '192.168.255.255']
# Loop Through each item in list
for item in x:
# Split on the period
split = item.split('.')
# Convert to number
tp = int(split[0] + split[1] + split[2] + split[3])
# Compare and set
if tp < tmp:
tmp = tp
print tmp
快速而肮脏的方式。 :d