当检查一个ip地址是否在一个带有netadd的网络中时,会出现奇怪的结果

2024-04-30 02:18:40 发布

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

在python2.7中运行以下代码时,所有这些检查都为true。在

from netaddr import *
testip = '192.168.2.5'
testnetwork = '192.168.3.0/23'
if testip in IPNetwork(testnetwork):
    print "Logic Fail"
if IPAddress(testip) in IPNetwork(testnetwork):
    print "Logic Fail"
if testip in IPSet([testnetwork]):
    print "Logic Fail"
if IPAddress(testip) in IPSet([testnetwork]):
    print "Logic Fail"

输出为:

^{pr2}$

Tags: 代码infromimporttrueifipsetfail
2条回答

对于192.168.3.0/23网络,范围是:

192.168.2.1 - 192.168.3.254

所以你的IP地址192.168.2.5就属于这个范围。不确定您要实现什么,但是给定了指定的python代码可以按预期工作

这不是一个奇怪的结果,您指定的CIDR过去被称为“supernetting”,因此:

192.168.3.0/23

有效覆盖

^{pr2}$

通过

192.168.3.254

给你大约512个可能的地址 /23与这个网络掩码相同

255.255.254.0

也就是说3号车被撞回2号车

为了帮助可视化,您可以使用在线子网计算器,如http://mxtoolbox.com/subnetcalculator.aspx

相关问题 更多 >