SNMP陷阱,必需的OID:sysuptime和id

我想了解SNMP陷阱的格式。 我将一段代码从windows移植到发送SNMP陷阱的linux。 Windows代码使用内置库(一些函数包括SnmpStartup,SnmpSetRetransmitMode,可能被称为WinSNMP),因此在移植到Linux时无法保留该代码。

我发现了一个名为SNMP ++的很好的库,可以很容易地发送SNMP陷阱。

根据我的理解,SNMP陷阱的前两个variables绑定(vb)字段必须符合特定的格式。 第一个vb是sysuptime(基本上是trap的时间戳),它有着名的OID 1.3.6.1.2.1.1.3.0

第二个vb是陷阱的ID。 我在任何地方都找不到任何文档,但是SNMP ++给出了一个OID为1.3.6.1.6.3.1.1.4.1.0的陷阱的ID(它的值是我们发送的陷阱的OID)。 它使用pdu.set_notify_id函数设置。

发送陷阱时,这是另一个众所周知的OID吗? Windows库根本不使用这个OID。 它将ID字段的OID设置为我们正在发送的OID,所以OID和它的值被设置为相同的东西。 看起来它是手动完成的,所以原始编码器可能不会很好地理解这种格式。

那么,哪一个是正确的?

 windows: 1.3.6.1.4.1.XXXX.2.1.51 -> 1.3.6.1.4.1.XXXX.2.1.51 SNMP++: 1.3.6.1.6.3.1.1.4.1.0 -> 1.3.6.1.4.1.XXXX.2.1.51 

为什么我找不到有关此1.3.6.1.6.3.1.1.4.1.0值的任何文档? 它似乎没有在我读过的任何RFC中。 使用OIDsearch结果,但他们没有解释它的使用。

对于任何SNMP问题,请从IETF SNMP RFC文档开始。 显然,TRAP v2必须具有RFC 3416第22页中所述的两个对象,

http://tools.ietf.org/search/rfc3416#page-22

我只能说,如果WinSNMP不遵循约定,它不符合标准,应该由微软修复。

 /** * TrapType defines the type of SNMPv2/SNMPv3 trap, * this is defined in the SNMPv2-MIB as snmpTrapOID.0 * (.1.3.6.1.6.3.1.1.4.1.0) with an OID value of one * of the following */ public static final String SNMP_TRAP_OID = "1.3.6.1.6.3.1.1.4.1.0"; /** coldStart OID */ public static final String COLDSTART_OID = "1.3.6.1.6.3.1.1.5.1"; /** warmStart OID */ public static final String WARMSTART_OID = "1.3.6.1.6.3.1.1.5.2"; /** linkDown OID */ public static final String LINKDOWN_OID = "1.3.6.1.6.3.1.1.5.3"; /** linkUp OID */ public static final String LINKUP_OID = "1.3.6.1.6.3.1.1.5.4" 

http://www.netwatcher.jp/snmp/snmp_err_oid.html