在SNMP陷阱标头中发送OID

时间:2019-03-20 14:44:05

标签: java header snmp snmp4j trap

我有一个Java应用程序,它使用SNMP4J发送SNMP陷阱。问题是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陷阱时,SNMP陷阱标头中会显示OID。以下是示例:

从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 EVENT” x.x.x.x-我的应用程序snmp错误:系统描述常规错误。尺寸= 2“

2 个答案:

答案 0 :(得分:2)

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

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 EVENT”   x.x.x.x-我的应用程序snmp错误:系统说明常规   错误。尺寸= 2“

答案 1 :(得分:0)

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