我想用 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相关的大部分树。
答案 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一样。