最近在使用SNMP4J的过程中发现一个缺陷,不知道应不应该算是个bug,但我想终究算是一个不完善的地方。

问题描述如下:

在通过SNMP4J去获取某些交换机上的MAC地址转发表(dot1dTpFdbTable, OID为1.3.6.1.2.1.17.4.3)时,发现结果不全,这里说其不全是与net-snmp提供的snmpwalk取的结果相比较而言的,snmpwalk也提供了相同的功能可以获取snmp table。不过直接用snmpwalk取的时候实际上也碰到了一个问题,例如假设交换机IP地址为192.168.1.1,支持SNMPv2c,且其团体字符串为public,则取MAC地址转发表的命令行如下:

  1. snmpwalk -c public -v 2c 192.168.1.1 .1.3.6.1.2.1.17.4.3

在对上述的那些交换机通过上述命令行获取其mac地址转发表的时候,会返回以下结果:

  1. SNMPv2-SMI::mib-2.17.4.3.1.1.0.3.15.1.205.11 = Hex-STRING: 00 03 0F 01 CD 0B
  2. SNMPv2-SMI::mib-2.17.4.3.1.1.0.3.15.13.238.195 = Hex-STRING: 00 03 0F 0D EE C3
  3. SNMPv2-SMI::mib-2.17.4.3.1.1.0.3.15.13.238.219 = Hex-STRING: 00 03 0F 0D EE DB
  4. SNMPv2-SMI::mib-2.17.4.3.1.1.0.3.15.13.239.119 = Hex-STRING: 00 03 0F 0D EF 77
  5. SNMPv2-SMI::mib-2.17.4.3.1.1.0.3.15.13.239.131 = Hex-STRING: 00 03 0F 0D EF 83
  6. SNMPv2-SMI::mib-2.17.4.3.1.1.0.3.15.13.239.191 = Hex-STRING: 00 03 0F 0D EF BF
  7. SNMPv2-SMI::mib-2.17.4.3.1.1.0.3.15.13.239.231 = Hex-STRING: 00 03 0F 0D EF E7
  8. SNMPv2-SMI::mib-2.17.4.3.1.1.0.3.15.17.254.48 = Hex-STRING: 00 03 0F 11 FE 30
  9. SNMPv2-SMI::mib-2.17.4.3.1.1.0.3.15.18.8.6 = Hex-STRING: 00 03 0F 12 08 06
  10. SNMPv2-SMI::mib-2.17.4.3.1.1.0.3.15.18.8.124 = Hex-STRING: 00 03 0F 12 08 7C
  11. SNMPv2-SMI::mib-2.17.4.3.1.1.0.3.15.18.8.178 = Hex-STRING: 00 03 0F 12 08 B2
  12. SNMPv2-SMI::mib-2.17.4.3.1.1.0.3.15.18.8.186 = Hex-STRING: 00 03 0F 12 08 BA
  13. SNMPv2-SMI::mib-2.17.4.3.1.1.0.3.15.18.8.190 = Hex-STRING: 00 03 0F 12 08 BE
  14. SNMPv2-SMI::mib-2.17.4.3.1.1.0.3.15.18.8.210 = Hex-STRING: 00 03 0F 12 08 D2
  15. SNMPv2-SMI::mib-2.17.4.3.1.1.0.3.15.18.9.234 = Hex-STRING: 00 03 0F 12 09 EA
  16. SNMPv2-SMI::mib-2.17.4.3.1.1.0.3.15.19.38.92 = Hex-STRING: 00 03 0F 13 26 5C
  17. SNMPv2-SMI::mib-2.17.4.3.1.1.0.3.15.19.46.100 = Hex-STRING: 00 03 0F 13 2E 64
  18. SNMPv2-SMI::mib-2.17.4.3.1.1.0.3.15.19.46.154 = Hex-STRING: 00 03 0F 13 2E 9A
  19. SNMPv2-SMI::mib-2.17.4.3.1.1.0.3.15.19.65.82 = Hex-STRING: 00 03 0F 13 41 52
  20. SNMPv2-SMI::mib-2.17.4.3.1.1.0.3.15.19.65.106 = Hex-STRING: 00 03 0F 13 41 6A
  21. SNMPv2-SMI::mib-2.17.4.3.1.1.0.3.15.19.66.158 = Hex-STRING: 00 03 0F 13 42 9E
  22. SNMPv2-SMI::mib-2.17.4.3.1.1.0.3.15.19.66.158 = Hex-STRING: 00 03 0F 13 42 9E
  23. Error: OID not increasing: SNMPv2-SMI::mib-2.17.4.3.1.1.0.3.15.19.66.158
  24. >= SNMPv2-SMI::mib-2.17.4.3.1.1.0.3.15.19.66.158

第23行中可以看到错误提示,OID not increasing的错误,原来某些设备对SNMP支持的原因,会导致返回结果的OID不是递增的,其实不应该说是递增,只能说是增大。查看snmpwalk的man手册后,找到了解决方法:

  1. -Cc
  2. Do not check whether the returned OIDs are increasing. Some agents (LaserJets are an example) return OIDs out of order, but can complete the walk anyway. Other agents return OIDs that are out of order and can cause snmpwalk to loop indefinitely. By default, snmpwalk tries to detect this behavior and warns you when it hits an agent acting illegally. Use -Cc to turn off this check.

即在snmpwalk中增加-Cc选项后即可解决该问题,因为加上该选项后,snmpwalk将不再检查OID的升序问题,但有可能产生一个新问题就是导致snmpwalk陷入死循环。死循环的问题这里暂且不表。

不知道SNMP4J里面有没有对这个问题的解决方法,即类似snmpwalk中的-Cc选项的功能。后面有时间会再看看SNMP4J的源代码,给出一个答案,也希望知道的朋友能够提示一下。

转载于:https://blog.51cto.com/njulinq/289265

SNMP4J的一点缺陷相关推荐

  1. python测试程序的qps和响应时间代码_Python并发请求下限制QPS(每秒查询率)的实现代码...

    前两天有一个需求,需要访问某API服务器请求数据,该服务器限制了QPS=2(哈哈应该都知道是哪个服务器了吧_(:з」∠)_),因为QPS很小所以就使用阻塞式请求.后来开通了服务,QPS提高到了20,阻 ...

  2. 面试官:哥们,你们的系统架构中为什么要引入消息中间件?

    点击上方"蓝字", 右上角选择"设为星标" 周一至五早11点半!精品文章准时送上! 本文来自石杉的架构笔记 这篇文章开始,我们把消息中间件这块高频的面试题给大家 ...

  3. stg游戏c语言,坦克大战改版

    <坦克大战改>是一款国内玩家模仿FC经典游戏坦克大战所自制的小游戏,游戏中玩家将会控制坦克保卫基地,一旦基地失守关卡就会失败.游戏支持手柄震动 ,同时包含有关卡编辑器,让玩家能够自由编辑关 ...

  4. 4)公有成员\私有成员和静态成员

    1)实现类的公有成员.     前面定义的任何类成员都属于公有成员的范畴,该类的任何实例都对外公开这些属性和方法.         2)实现类的私有成员.     私有成员,即只在类的内部实现中可以共 ...

  5. 绝学:用宏定义找BUG,了解一下?

    宏打印函数 在我们的嵌入式开发中,使用printf打印一些信息是一种常用的调试手段.但是,在打印的信息量比较多的时候,就比较难知道哪些信息在哪个函数里进行打印. 特别是对于异常情况的打印,我们需要快速 ...

  6. [转]Windows Shell 编程 第十三章 【来源:http://blog.csdn.net/wangqiulin123456/article/details/7988004】...

    第十三章 Windows脚本环境 现在的许多开发人员以前都是在MS-DOS环境下编程的.几乎所有人都接触过批处理文件--一种基于文本命令的文件.这种文件使你能够在一个可执行命令中组合多个指令.批处理文 ...

  7. 充分利用移动支付系统的10种方法

    移动支付系统现在想吸引你.为什么不呢?它们提供了一个比目前在美国能够找到的各种标准都更为安全的系统.加上它们带来的便捷性,你现在有了一个无论是对于消费者还是对于企业来说都非常完美的系统. 但是这个系统 ...

  8. pyqt5 listview 不默认选中_pyqt5 商店小票打印的实现模板

    说明 最近在用pyqt5做商店小票打印,用的是得力DL-581PW(NEW)热敏小票打印机. 商店小票打印,属于escpos打印. 在网上找了很多实现方法,看了很多相关文章,经历了很多困难,最后终于实 ...

  9. 为什么一定要用MQ中间件

    这篇文章我们会把消息中间件这块高频的面试问题来给大家说一下,也会涵盖一些 MQ 中间件常见的技术问题. 假如说面试官看你简历里写了 MQ 中间件的使用经验,很可能会有如下的问题: 你们公司生产环境用的 ...

最新文章

  1. 论COSPLAY / 谨以此文纪念我暂短的Cos生涯
  2. java panel 显示文字,从动态添加的jPanel获取文本
  3. keycloak学习
  4. ssis 创建ssisdb_SSIS目录数据库(SSISDB)简介
  5. CentOS源码安装消息队列ActiveMQ
  6. svg写入/识别html元素和css样式
  7. FEC(前向纠错码)
  8. 最近一直在好奇一个问题,QWE到底等不等于ABC? -.- .. --.- .-.. .-- - ..-. -.-. --.- --. -. ... --- --- flag格式:CTF{xxx}
  9. hipster_通过Java Hipster升级Spring Security OAuth和JUnit测试
  10. 安利几款软件给需要的你
  11. 高斯脉冲传播的解析解及其matlab求解
  12. 有交互作用的正交设计
  13. Gibbs Sampling(吉布斯采样)
  14. 小程序引用公共js,不看可惜了!!
  15. Mysql——》查看数据库表结构
  16. CRM系统有哪些类型?
  17. 年终总结——感谢2012
  18. mysql查询倒数第三个_SQL查询倒数第三条数据 LIMIT + ORDER BY 用法,实例秒懂,避免入坑!...
  19. [转]sqlplus常用命令,不解释
  20. PlantUML画图

热门文章

  1. C语言 结构体 struct Cat cat1;
  2. 新研究:长寿又健康的秘诀
  3. 传腾讯人事大地震 马化腾将重整公司架构
  4. store_coding_state (cs_cm)的作用
  5. JAVA 构造 MAP 并初始化 MAP、定义时就初始化
  6. linux (阿里云 CentOS7) 中安装配置 RocketMQ
  7. shell的交互式和非交互式登录
  8. 网络流(最大流) HDU 1565 方格取数(1) HDU 1569 方格取数(2)
  9. [转]opencv学习资料
  10. linux二重启动防止