CIDR子网计算和python ipcalc

问题描述 投票:0回答:2

我质疑用于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模块中的错误吗?

python ip-address cidr
2个回答
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。如果您问我,那一定会让您感到困惑(特别是因为上面的代码块打破了这个条件)。在使用它之前,我至少会阅读该模块的代码。


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.