【问题标题】:Get the smallest network given a list of IPv4 addreses in Python在 Python 中获取给定 IPv4 地址列表的最小网络
【发布时间】: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


【解决方案1】:

这似乎正是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'>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-21
    • 2012-07-12
    • 2012-04-08
    • 2020-04-08
    • 2011-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多