【问题标题】:Python Lowest Common CIDRPython 最低常见 CIDR
【发布时间】:2016-05-18 08:59:06
【问题描述】:

假设我有两个 IP:startip = '63.223.64.0'endip = '63.223.127.255'

我知道在 python 中 netaddr.iprange_to_cidrs(startip, endip) 会给你一个 CIDR 子网列表,这些子网正好适合边界之间。但是,我希望选择 一个 CIDR 子网来覆盖所有内容,即使它提供了更多的 IP。

我更喜欢执行此操作的函数,但我也欢迎任何数学/逻辑来计算它并最终将其转换为代码。

【问题讨论】:

    标签: python ip subnet cidr


    【解决方案1】:

    您尝试过ipaddress 模块吗?它随 Python 3 一起提供,但可安装到 Python 2。

    import ipaddress
    startip = ipaddress.IPv4Address('63.223.64.0')
    endip = ipaddress.IPv4Address('63.223.127.255')
    # summarize_address_range produces a generator, so force the results
    networks = [n for n in ipaddress.summarize_address_range(startip, endip)]
    print(networks)
    # [IPv4Network('63.223.64.0/18')] 
    

    【讨论】:

    • 问题是我有 python 2.6.6 并且无法安装新模块。但我会试一试。谢谢。
    【解决方案2】:

    看起来netaddr.spanning_cidr 成功了:

    In [5]: netaddr.spanning_cidr(['63.223.64.0', '63.223.127.255'])
    Out[5]: IPNetwork('63.223.64.0/18')
    

    【讨论】:

      猜你喜欢
      • 2014-11-04
      • 1970-01-01
      • 1970-01-01
      • 2017-04-07
      • 2018-06-07
      • 1970-01-01
      • 1970-01-01
      • 2013-09-20
      • 2015-02-18
      相关资源
      最近更新 更多