“No such object available on this agent at this OID”表示,就 netsnmpd 而言,它的树中没有对应的 OID。
不要被 的成功所迷惑snmptranslate
。Snmptranslate 仅对 MIB 文件本身进行操作,根本不需要访问 snmp 服务器。因此,snmptranslate 正确显示您的 MIB 详细信息这一事实仅表明您的 mib 已正确复制到文件$MIBDIRS
中列出的目录.snmp/snmp.conf
(等)。
假设您正在学习本教程,您实现的 mib 提供了一个标量变量。标量变量的索引(即后缀)为.0
. 尝试运行以下任一命令:
snmpget -v2c -c public MY-MIB-FILE::myVariable.0
或者:
snmpwalk -v2c -c public MY-MIB-FILE::myVariable
后者将为您提供该 OID 下所有 MIB 叶子的列表,其中(在您的情况下)将包括该.0
节点。
如果失败,则值得确保您的代码正在编译并正确执行。首先,检查步骤末尾的详细信息以./configure
确保摘要包含您的 mib。例如。(来自 ./configure --with-mib-modules="nstAgentModuleObject" 的结果):
---------------------------------------------------------
Net-SNMP configuration summary:
---------------------------------------------------------
SNMP Versions Supported: 1 2c 3
Net-SNMP Version: 5.4.1
Building for: linux
snip
Agent MIB code: nstAgentModuleObject default_modules => snmpv3mibs mibII ucd_snmp notification notification-log-mib target agent_mibs agentx disman/event disman/schedule utilities host
snip
---------------------------------------------------------
对于前者,您可以运行nm
snmpd可执行 agent/.libs/libnetsnmpmibs.so
文件并确保存在init_X()
与您的 MIB 对应的函数。确保该init_nstAgentModuleObject()
功能存在也是值得的。如果您make install
在测试之前运行,则值得确保(使用ldd
)正在使用的 libnetsnmpmibs.so 库是您刚刚构建的库,并且您没有路径问题。
您可以通过在函数中添加DEBUGMSGTL()
调用来使用内置的调试消息系统。init_X()
要查看调试消息,请-DALL
在您的 snmpd 命令行上添加一个选项。