【问题标题】:Strange result when checking if an ip address is in a network with netaddr使用 netaddr 检查 IP 地址是否在网络中时出现奇怪的结果
【发布时间】:2015-01-30 05:05:54
【问题描述】:

当我在 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

【问题讨论】:

  • 192.168.2._ vs 192.168.3._,一个是.2,另一个是.3
  • 您的意思是192.168.3.0/24 吗?
  • 当然。 -_- 我试图在一个超网中捕获 192.168.3.0 和 192.168.4.0。但当然它会回落到 192.168.2.0/23。

标签: python python-2.7 ip-address subnet


【解决方案1】:

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

192.168.2.1 - 192.168.3.254

所以您的 IP 地址192.168.2.5 属于此范围。不确定您要实现什么,但鉴于指定的 python 代码按预期工作

【讨论】:

    【解决方案2】:

    这并不奇怪,你指定的 CIDR 就是以前所谓的“超网”,所以:

    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

    【讨论】:

      猜你喜欢
      • 2012-01-25
      • 2017-09-02
      • 1970-01-01
      • 2018-11-16
      • 2017-05-05
      • 2010-10-09
      • 2022-11-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多