0

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

让我们192.168.1.25/30举个例子。在二进制中,最后一个八位位组是00011001 AND 11111100 = 00011000,所以我得到192.168.1.24Network ID 和 range 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/30and 192.168.1.25/30(or .26/30or .27/30) 指的是同一个子网。

那是对的吗?这只是 ipcalc 模块中的一个错误吗?

4

2 回答 2

2

目前有一个开放的错误:No way to resolve IP + Netmask to Network Object

以及更早的一个讨论这个问题的错误报告:奇怪的子网计算


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

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

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

于 2013-01-15T07:52:43.503 回答
0

子网是 192.168.1.24/30 是正确的,因此 ips 192.168.1.24 到 192.168.1.27 是该网络的一部分。

于 2020-04-29T20:37:57.267 回答