CIDR子网计算和python ipcalc

CIDR子网计算和python ipcalc,python,ip-address,cidr,Python,Ip Address,Cidr,我在质疑Python的ipcalc模块()的结果(看来NetAddress可能是一个更好的选择) 让我们以192.168.1.25/30为例。在二进制中,最后一个八位字节是00011001和111111 00=00011000,因此我得到192.168.1.24作为网络ID和范围192.168.1.24-192.168.1.27 当我指定 subnet = ipcalc.Network('192.168.1.25/30') for x in subnet: print x 输出是 192.16

我在质疑Python的ipcalc模块()的结果(看来NetAddress可能是一个更好的选择)

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

当我指定

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/30
192.168.1.25/30
(或
.26/30
.27/30
)指的是同一子网


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

目前有一个开放的错误:

以及一份讨论此事的早期错误报告:


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

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

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

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