CIDR子网计算与python-ip

2024-04-29 04:38:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我对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/30192.168.1.25/30(或.26/30.27/30)似乎是指同一子网。

是这样吗?这只是ipcalc模块中的一个bug吗?


Tags: 模块andin网络idfor二进制network
1条回答
网友
1楼 · 发布于 2024-04-29 04:38:58

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

以及之前讨论这个问题的bug报告:Strange subnet calculations


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

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

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

相关问题 更多 >