我对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
。
当我指定
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模块中的一个bug吗?
目前有一个打开的错误:No way to resolve IP + Netmask to Network Object
以及之前讨论这个问题的bug报告:Strange subnet calculations
但是他们还添加了一个名为
network
的函数来从IP获取网络地址。从手册中:手册特别指出,构造器
Network
应该以网络地址作为第一个参数,而不是网络中的任何IP。如果你问我的话会很困惑(尤其是因为上面的代码块破坏了这个条件)。在使用模块之前,我至少会阅读它的代码。相关问题 更多 >
编程相关推荐