CIDR子网计算和python ipcalc

时间:2013-01-15 07:46:18

标签: python ip-address cidr

我在质疑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模块中的一个错误吗?

2 个答案:

答案 0 :(得分:2)

目前有一个公开的错误: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。如果你问我(特别是因为上面的代码块打破了这个条件),相当混乱。在使用它之前,我至少会阅读该模块的代码。

答案 1 :(得分:0)

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