【问题标题】:CIDR subnet calculation and python ipcalcCIDR子网计算和python ipcalc
【发布时间】:2012-12-29 06:48:07
【问题描述】:

我在质疑 Python 的 ipcalc 模块 (ipcalc) 的结果(似乎 netaddr 可能是更好的选择)。

我们以192.168.1.25/30 为例。在二进制中,最后一个八位字节是00011001 AND 11111100 = 00011000,所以我得到192.168.1.24 作为网络ID 和范围192.168.1.24 - 192.168.1.27

当我指定时使用 ipcalc

subnet = ipcalc.Network('192.168.1.25/30')
for x in subnet: print x

输出是

192.168.1.25
192.168.1.26
192.168.1.27
192.168.1.28

我不理解不一致之处。使用 CIDR 表示法时,似乎同时指定 192.168.1.24/30192.168.1.25/30(或 .26/30.27/30)指的是同一个子网。

正确吗?这只是 ipcalc 模块中的一个错误吗?

【问题讨论】:

    标签: python ip-address cidr


    【解决方案1】:

    目前有一个未解决的错误:No way to resolve IP + Netmask to Network Object

    以及之前讨论该问题的错误报告:Strange subnet calculations


    但他们还添加了一个名为network 的函数,用于从 IP 获取网络地址。来自手册:

    >>> localnet = Network('127.128.99.3/8')
    >>> print localnet.network()
    127.0.0.0
    

    手册明确指出构造函数Network 应该将网络地址 作为其第一个参数,而不是网络中的任何IP。如果你问我会很困惑(特别是因为上面的代码块打破了这个条件)。在使用它之前,我至少会阅读该模块的代码。

    【讨论】:

      【解决方案2】:

      子网是 192.168.1.24/30 是正确的,所以 ips 192.168.1.24 到 192.168.1.27 是这个网络的一部分。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-05-22
        • 2020-05-10
        • 2011-01-31
        • 2016-12-05
        • 2014-09-04
        • 2014-10-26
        • 2016-09-29
        相关资源
        最近更新 更多