【问题标题】:PDU.TRAP vs PDU.SET snmp4jPDU.TRAP 与 PDU.SET snmp4j
【发布时间】:2023-04-08 22:42:02
【问题描述】:
PDU pdu = new PDU();
pdu.setType(PDU.SET);

pdu.add(new VariableBinding(new OID("1.3.6.1.4.1.100.1.1"), new Counter64(System.currentTimeMillis())));
pdu.add(new VariableBinding(new OID("1.3.6.1.4.1.100.2.1"), new OctetString("some string")));

TransportMapping transport = null;
Snmp snmp = null;

try {
    transport = new DefaultUdpTransportMapping();
    transport.listen();

    snmp = new Snmp(transport);
    snmp.send(pdu, getCommunityTarget());
} catch (Exception e) {
    // error occurred
}

这就是我发送 snmp 陷阱以发出警报的方式。我在 snmp 代理中设置一个变量并在 MIB 浏览器中浏览它。我想知道如果我将 pdu 类型设置为 PDU.TRAP 会怎样。它在端口 162 而不是 161 上工作,我在 MIB 浏览器中看不到它,但在 Trap Receiver 中。有什么不同?使用 PDU.TRAP 的目的是什么?我的代理人怎么能抓住它?发出和清除警报的最佳做法是什么?

【问题讨论】:

    标签: java snmp mib snmp4j


    【解决方案1】:

    不同之处在于角色:SET 由经理针对代理执行,而 TRAP 则相反。基本的 Snmp4j 仅支持 SNMP 管理器的实现。 也可以实现代理的某些方面,但不是微不足道的。不过,很难说您实际上是在尝试实现这两个中的哪一个。

    【讨论】:

    • 我有点困惑。不管怎样,谢谢。稍后我可能会问一些问题
    • "Manager" 和 "agent" 是 SNMP 指定的概念,所以您可能会阅读相关的 RFC。它是可访问的材料,无论如何都值得一读。
    • 我几乎理解了这个概念和区别。但我对我们的需求感到困惑。首先,我们需要澄清它。
    • 我很确定 SNMP4j 实际上支持管理器和代理功能。但是,如果您从 SNMP4j 之类的低级 API 开始,实现一个完整的 SNMP 代理需要做很多工作,所以我不会争辩说它是完成这项工作的最佳工具。
    • @Jolta 我已经做到了(实现代理),它需要翻阅其源代码才能找到一个可以挤压的水坑。这是使 SNMP4j 处理 SET 请求的唯一方法(至少是 2 年前)。注意有一个单独的、付费的 SNMP4j-Agent。
    【解决方案2】:

    在实现 SNMP 实体时,通常最好实现所谓的“陷阱定向轮询”概念,而不是简单的“陷阱发送者”。对于后者 SNMP4J 可以开箱即用,对于第一个 SNMP4J-Agent 可以使用。这也是在 Apache 2 Open Source 许可下获得许可的。

    由于陷阱可能会在网络上丢失,因此陷阱定向轮询方法具有许多优点,尽管它需要更多(很少)努力来实现代理部分。

    关于原问题:

    • 发送 SET pdu 时,您要求命令响应者(代理)更改有关其实体的某些信息。
    • 发送 TRAP 或更好的 NOTIFICATION pdu 时,您希望通知命令生成器(管理器)有关事件。有了陷阱定向轮询概念,命令生成器还将定期(例如每 5 分钟)在 *LastChanged 对象上发送 GET 请求,以有效检测命令响应者 MIB 的某些(关键)子树中的数据更改。如果检测到更改(通过通知 PDU 或轮询,则命令生成器从命令响应器请求更改的数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-25
      • 2014-04-22
      • 1970-01-01
      相关资源
      最近更新 更多