代码之家  ›  专栏  ›  技术社区  ›  JB.

如何在C/C++中列出带有net-snmp MIB API的SMIv1 MIBS?

  •  2
  • JB.  · 技术社区  · 12 年前

    我想显示各种MIBS的列表 代理 并且示出了与SNMP树结构相关的其他信息。

    现在,我的客户的SMIv1 MIBS没有显示在列表中,而是由 代理

    样品 代理 代码遍历内存中的MIB结构,并假设我们在树中的MIB和MODULE-IDENTITY注释之间有SMIv2双射。因此,当我们找到MODULE-IDENTITY节点时,我们会找到MIB。

    有人知道列出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
         }
      }
    

    NB:我找到了一个转换器 小垃圾堆 (命令行工具,或作为web服务 http://www.ibr.cs.tu-bs.de/projects/libsmi/tools/ )但是它不向MIB添加MODULE-IDENTITY节点。

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

    一个建议是,在没有模块标识符的情况下,找到 MIB的对象标识符(有时MIB会在许多不同和不相关的地方添加节点,因此这将不起作用)。带有 节点I可以显示与该MIB相关的大部分树。

    3 回复  |  直到 11 年前
        1
  •  0
  •   Anthony    12 年前

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

        2
  •  0
  •   fkl    12 年前

    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 mib的一部分),您应该找到它的完整OID(类似1.3.4.1.2…),并首先在GUI(mib浏览器)中检查它是否存在,或者根据特定的OID调试get请求。

    还要理解,非标准mib需要同时加载在代理和客户端中。否则,客户端将不知道mib的详细信息,从而无法代表其查询请求。

        3
  •  0
  •   JB.    11 年前

    我和我的同事找到的唯一解决方案是将“顶级”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一样。。