5

我按照net-snmp 网站上的说明将我自己的 MIB 支持添加到主代理。

这是我所做的:

  1. 我在 net-snmp/agent/mibgroup/ 文件夹中创建了我的支持 .c 和 .h 文件。
  2. 我将我的 MIB 文件复制到 /usr/local/share/snmp/mibs/ 文件夹。
  3. 我跑了 "./configure --with-mib-modules="myMib" "
  4. 我跑了“make”和“make install”
  5. 我用“snmpd -f -Le -d -c snmpd.conf &”启动了 snmpd
  6. 我可以通过运行 snmpdtranslte 命令查看我的 MIB 结构。但是,当我尝试使用 snmpget -v2c -c public "MY-MIB-FILE::myVariable" 时,我不断收到“*** = 此 OID 的此代理上没有此类对象可用”。

我完全按照教程所说的做了,我可以snmpgetsnmpset示例上NET-SNMP-TUTORIAL-MIB::nstAgentModuleObject运行。

请帮助我了解我在这里错过了什么。

4

5 回答 5

7

“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
---------------------------------------------------------

对于前者,您可以运行nmsnmpd可执行 agent/.libs/libnetsnmpmibs.so文件并确保存在init_X()与您的 MIB 对应的函数。确保该init_nstAgentModuleObject()功能存在也是值得的。如果您make install在测试之前运行,则值得确保(使用ldd)正在使用的 libnetsnmpmibs.so 库是您刚刚构建的库,并且您没有路径问题。

您可以通过在函数中添加DEBUGMSGTL()调用来使用内置的调试消息系统。init_X()要查看调试消息,请-DALL在您的 snmpd 命令行上添加一个选项。

于 2012-04-03T03:32:28.030 回答
2

No Such Object available on this agent at this OID当代理根本不支持请求的 MIB 对象或未指定索引或实例变量时,会出现该消息。

从您链接到的教程中,您是否为社区字符串添加了相关配置 public ?

例如

通过运行 snmpconf,详见此处

另请参阅此处的初学者和调试提示部分中提到的配置更改。

您似乎也没有为您的变量指定索引或实例,它应该像

snmpget -v2c -c public MY-MIB-FILE::myVariable.0.

您可能还想尝试明确指定您的主代理运行的主机和端口,以防它不在snmpd.conf.

于 2012-03-31T16:42:54.330 回答
2

尝试从构建目录启动您的代理。net-snmp-xxx/代理。

./snmpd -f -L -d -c /usr/local/etc/snmpd.conf

并停止所有其他 SNMP 代理。

就我而言,如果我跑

snmpd -f -Le -d -c snmpd.conf &

此命令启动预安装的 snmp 守护程序。

于 2015-06-24T10:27:06.650 回答
1

ldd值得一试,就我而言snmpd,它与标准 Ubuntu 动态链接,libnetsnmpmibs.so尽管我也遵循相同的教程,但我没有获得自定义 MIB 支持。

修复了动态链接的东西,一切都解决了!

于 2014-12-25T15:09:55.827 回答
-1

snmpd.conf

  view  systemonly  included  .1.3.6.1.4.1.8072.2.4.1.1.1
于 2017-01-16T18:31:05.827 回答