检查IP地址是否在netaddr网络中时出现奇怪的结果

时间:2014-12-02 03:01:27

标签: python python-2.7 ip-address subnet

当我在Python 2.7中运行以下代码时,我对所有这些检查都是正确的。

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"

输出是:

Logic Fail
Logic Fail
Logic Fail
Logic Fail

2 个答案:

答案 0 :(得分:0)

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

192.168.2.1 - 192.168.3.254

因此您的IP地址192.168.2.5属于此范围。不确定你想要实现什么,但是考虑到指定的python代码按预期工作

答案 1 :(得分:0)

这不是一个奇怪的结果,你指定的CIDR曾经被称为" supernetting",所以:

192.168.3.0/23

有效涵盖

192.168.2.1 

通过

192.168.3.254

为您提供大约512个可能的地址 / 23与此网络掩码相同

255.255.254.0

这是3被撞回2

的地方

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