在Python中给出一个IPv4地址列表,获取最小的网络

时间:2014-12-11 16:54:17

标签: python ip-address inetaddress

我使用的是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'

2 个答案:

答案 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