【问题标题】:Sending OID in SNMP Trap header在 SNMP 陷阱标头中发送 OID
【发布时间】:2019-08-11 07:26:56
【问题描述】:

我有一个使用 SNMP4J 发送 SNMP 陷阱的 java 应用程序。问题是 OID 是在陷阱正文中发送的。我设置的所有数据都已成功发送,但在陷阱正文中。我希望在陷阱标头中发送 Oid。

如何在 Trap 标头中发送 Oid?

    UdpAddress managerUdpAddress = new UdpAddress("address");

    CommunityTarget ctarget = new CommunityTarget();
    ctarget.setAddress(managerUdpAddress);
    ctarget.setRetries(retryCount);
    ctarget.setCommunity(new OctetString(community));
    ctarget.setTimeout(timeout);
    ctarget.setVersion(SnmpConstants.version2c);

    PDU trap = new PDU();

    OID oid = new OID(myOid);
    trap.add(new VariableBinding(SnmpConstants.snmpTrapOID, oid));
    trap.add(new VariableBinding(SnmpConstants.sysUpTime, new TimeTicks(5000)));                
    trap.add(new VariableBinding(SnmpConstants.sysDescr, new OctetString(
        "System Description")));
    trap.add(new VariableBinding(oid, new OctetString(message)));

    DefaultUdpTransportMapping  transport = new DefaultUdpTransportMapping();

    Snmp snmp = new Snmp(transport);

    snmp.notify(trap, ctarget);

当 UPS 发送 SNMP 陷阱时,OID 显示在 SNMP 陷阱标头中。以下是示例:

来自 UPS 的陷阱:

2019 年 3 月 18 日星期一 04:13:18 .1.3.6.1.4.1.935.0.49 正常“SNMP 事件” x.x.x.x - UPS_212_bypass_ac_normal SNMP TRAP:绕过 AC 正常

来自 JAVA 的陷阱:

2019 年 3 月 18 日星期一 05:25:36 .0.00 严重“SNMP 事件”x.x.x.x - 我的应用程序 snmp 错误:系统描述一般错误。尺寸=2"

【问题讨论】:

  • 你不能违反 SNMP 标准本身,所以你问的是不可能的。
  • @LexLi UPS 也发送 SNMP 陷阱,但在这种情况下,OID 填充在 SNMP 陷阱标头中。有什么区别? UPS如何在报头中发送OID?

标签: java header snmp snmp4j snmp-trap


【解决方案1】:

我通过添加以下代码来做到这一点:

trap.setType(PDU.TRAP);
trap.add(new VariableBinding(oid));

现在从 Java 发送的 SNMP 陷阱如下所示:

2019 年 3 月 21 日星期四 15:16:51 .1.3.6.1.6.3.1.1.7.1.6 严重“SNMP 事件” x.x.x.x - 我的应用程序 snmp 错误:系统描述常规 错误。大小=2"

【讨论】:

    【解决方案2】:

    SNMP TRAP 格式具有在 RFC 1157 或 RFC 3412 中定义的固定结构(在 SNMPv3 的情况下)。该结构由报头和PDU(分组数据单元)组成。 PDU 基本上是一组所谓的变量绑定。每个绑定都有 OID、语法和值。所以只能换PDU部分。标头结构无法更改。

    【讨论】:

    • UPS 也会发送 SNMP 陷阱,但在这种情况下,OID 会填入 SNMP 陷阱标头。有什么区别? UPS如何在报头中发送OID?
    • 有所谓的陷阱OID和陷阱变量。自己的OID SnmpConstants.snmpTrapOID 所引用的trap oid 也是PDU 的一部分。这是第一个变量绑定。因此 Trap Receiver 将其视为 TRAP 的标识符。 PDU 中的其余变量可以视为附加信息。我想告诉你的是,如果 PDU 类型是 TRAP,那么前两个变量绑定是强制性的。第一个是陷阱 OID,第二个是系统正常运行时间。其余的是用户数据。
    • 感谢您的解释,现在我明白了为什么将 PDU 类型更改为陷阱解决了我的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多