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

时间:2013-12-12 16:50:41

标签: linux windows snmp snmp-trap

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

我找到了一个很好的名为SNMP ++的库,它能够轻松发送SNMP陷阱。

据我了解,SNMP陷阱的前两个变量绑定(vb)字段必须符合特定格式。第一个vb是sysuptime(基本上是陷阱的时间戳),它具有众所周知的OID 1.3.6.1.2.1.1.3.0

第二个vb是陷阱的ID。我无法在任何地方找到任何文档,但SNMP ++为陷阱的ID提供了1.3.6.1.6.3.1.1.4.1.0的OID(它的值是我们发送的陷阱的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中。谷歌搜索OID给出结果,但他们没有解释它的用途。

2 个答案:

答案 0 :(得分:1)

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

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

我只能说WinSNMP不遵循惯例,它不符合标准,应该由Microsoft修复。

答案 1 :(得分:-1)

/**
 * 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