我在质疑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
。
当我指定
时使用ipcalcsubnet = 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模块中的一个错误吗?
答案 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成为该网络的一部分。