首页 > 解决方案 > 使用 erlang 构建 snmp 服务:如何让 MIB 使用其检测功能?

问题描述

我正在使用 erlang 构建 snmp 服务。我已经定义了一些 MIB 文件(例如,EX1-MIB.mib)、它们的关联文件(例如,EX1-MIB.funcs)和它们的检测功能(例如,ex1 .erl) 在同一目录中。我启动了 snmp 服务并在代理和管理器上加载了 MIB,启动了检测模块,然后我过去常常snmpm:sync_get/3从代理那里得到我需要的东西。这是我遇到问题的部分:

snpm:sync_get("simple_user", "otp 代理", [[1,3,6,1,3,7,1,0]])。
{ok,{noError,0, [{varbind,[1,3,6,1,3,7,1,0],'OCTET STRING',[],1}]}, 4971}

[1,3,6,1,3,7,1]是我要获取的变量的 OID,但返回的是[]. 我认为它没有使用我的仪器模块,我想知道为什么。(我确信我的检测模块工作正常并且可以返回一个元组{value, XXX}。)

我使用的示例来自代理实现示例文档。您可以在此链接中查看 EX1-MIB.mib、EX1-MIB.funcs 和 ex1.erl 文件。

标签: erlangsnmp

解决方案


如果您在未修改的情况下使用链接示例,则在使用ex1:start().服务器启动检测后,将以默认值响应:myName是一个空字符串,并且friendsTable.

您的经理收到的值 ( []) 是空字符串,是 的默认值myName。所以看起来你的仪器模块可能工作得很好。

您可以通过以下方式验证确实如此:

  • ex1_server在调用时跟踪进程snmpm:sync_get/3以查看它是否get_my_name按预期处理消息。
  • 更改名称的默认值ex1.erl
init() ->
    register(ex1_server, self()),
    loop("newDefault", []).
  • 首先发送 snmp set 请求以设置非默认值。

推荐阅读