在 SNMP 陷阱中发送 OID header

Sending OID in SNMP Trap header

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

如何在 Trap 中发送 Oid header?

    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 陷阱中 header。以下是示例:

来自 UPS 的陷阱:

Mon Mar 18 04:13:18 2019 .1.3.6.1.4.1.935.0.49 Normal "SNMP EVENT" x.x.x.x - UPS_212_bypass_ac_normal SNMP TRAP: Bypass AC Normal

来自 JAVA 的陷阱:

Mon Mar 18 05:25:36 2019 .0.00 Critical "SNMP EVENT" x.x.x.x - my application snmp errors: System Description General error. Size=2"

SNMP TRAP 格式具有 RFC 1157 或 RFC 3412 中定义的固定结构(对于 SNMPv3)。这个结构由header和PDU(Packet Data Unit)组成。 PDU 基本上是一组所谓的变量绑定。每个绑定都有 OID、语法和值。所以只能改PDU部分。无法更改 header 结构。

我通过添加以下代码做到了:

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

现在从 Java 发送的 SNMP 陷阱看起来像这样:

Thu Mar 21 15:16:51 2019 .1.3.6.1.6.3.1.1.7.1.6 Critical "SNMP EVENT" x.x.x.x - my application snmp errors: System Description General error. Size=2"