如何在C / C ++中使用net-snmp MIB API列出SMIv1 MIBS?

时间:2012-09-18 09:24:12

标签: c snmp net-snmp mib

我想用 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
     }
  }

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

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

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

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

我建议使用基于GUI的客户端(称为SNMP Manager)来查找问题。例如MGSOftMIBBrowser

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

其他几个可能的问题可能是:

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

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

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

还要了解非标准mib需要同时加载代理和客户端。否则,客户端将无法知道mib的详细信息,以便能够代表它查询请求。

答案 2 :(得分: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一样。