2

我想用net-snmp显示各种 MIBS 的列表,并显示与 SNMP 树结构相关的其他信息。

现在事实证明,我的客户的 SMIv1 MIBS 没有出现在列表中,但被net-snmp正确加载。

示例net-snmp代码遍历内存中的 MIB 结构,并假设我们在树中的 MIB 和 MODULE-IDENTITY 注释之间具有 SMIv2 双射。所以当我们找到一个 MODULE-IDENTITY 节点时,我们找到了一个 MIB。

有谁知道使用net-snmp列出 SMIv1 MIBS 的正确方法是什么?(或任何解决方法?)

  // Read mibs and obtain memory structures
  struct tree * head = read_all_mibs();
  // Walk down the SNMP tree
  for ( struct tree * tp = head; tp; tp = tp->next_peer )
  {
     // Module-indentity
     if ( tp->type == TYPE_MODID )
     {
        // XXX We found a SMIv2 MIB, but SMIv1 MIBs have no MODULE-IDENTITY node
     }
  }

注意:我在http://www.ibr.cs.tu-bs.de/projects/libsmi/tools/找到了一个转换器smidump(一个命令行工具,或作为 Web 服务),但它没有添加 MODULE- MIB 的 IDENTITY 节点。

编辑:请注意,任何将旧的 SNMP MIB 转换为更新的(SMIv2 样式)的工具都可以解决问题。在那个特定方向上有什么帮助吗?

一个建议可能是,在没有 MODULE-IDENTIFIER 的情况下,找到 MIB 的OBJECT-IDENTIFIER(有时 MIB 会在许多不同且不相关的地方添加节点,因此这不起作用)。使用根节点,我可以显示与该 MIB 相关的大部分树。

4

3 回答 3

0

它使用 UDP 数据报。您可以获得 net-snmp 或 snif UDP 流量的来源(看起来更简单)。

于 2012-09-30T23:16:11.893 回答
0

我的同事和我发现解决该问题的唯一解决方案是将“顶级”MIB 转换为更类似于 SNMPv2 的结构。即 1) 导入 MODULE-IDENTITY 类型,2) 用 MODULE-IDENTITY 声明替换顶级节点。

    ...
    IMPORTS
       MODULE-IDENTITY
       FROM
       SNMPv2-SMI
    ...

    -- Removed top-level node
    --    compaq              OBJECT IDENTIFIER ::= { enterprises 232 }

    -- Add a fake module-identity node
    compaq MODULE-IDENTITY
    LAST-UPDATED   "200111120000Z"
    ORGANIZATION   "COMPAQ"
    CONTACT-INFO
           "why.still.using.snmpv1@compaq.com"
    DESCRIPTION
           "why does compaq still provide these mibs in 2013?"
    REVISION       "9407210000Z"
    DESCRIPTION
           "Normal fixed MIB module."
    ::= { enterprises 232 }

通过此修复,net-snmp库将向我们显示 MIB 的模块标识节点,就像其他所有 SNMPv2 mib 一样。

于 2013-03-08T09:36:02.167 回答
0

net-snmp 是在设备上运行 snmp 的代理(即服务器)。您使用什么客户端(即 mib 浏览器或命令行工具,例如 snmp-get/walk 等)来查询?您的客户端是否也加载了与服务器相同的 MIB?

我假设您使用的是 SNMPv1。您是否使用正确的访问社区,即您正在从客户端(MIB 浏览器或命令行 snmp 客户端)输入正确的密码来验证 SNMP 代理/服务器?

我建议使用基于 GUI 的客户端(称为 SNMP 管理器)来定位问题。如MGSOftMIBBrowser

试用版是免费的。您会看到尝试的结果,例如密码失败(snmpv1 的社区名称)。

其他几个可能的问题包括:

SMIv1 是一种旧格式。所以你需要确保你使用的 net-snmp 版本支持它。

如果您使用的是 SNMPv2,则您可能正在使用正确的社区进行身份验证。但是,您的社区没有您希望查看的 mib 的读取权限。SNMPv2 引入了视图的概念,您可以在其中允许 oid 树的某个子集对特定社区(用户)可见。

如果它是非标准 mib(即不是核心 snmp mibs 的一部分),您应该找到它的完整 OID(类似于 1.3.4.1.2...)并首先检查 GUI(MIB 浏览器)是否存在或否则针对特定的 oid 调试获取请求。

还要了解非标准 mib 需要在代理和客户端中加载。否则客户端将不知道能够代表它查询请求的 mib 的详细信息。

于 2012-10-01T04:35:35.667 回答