3

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

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

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

第二个 vb 是陷阱的 ID。我在任何地方都找不到任何文档,但 SNMP++ 为陷阱的 ID 提供了 OID1.3.6.1.6.3.1.1.4.1.0(它的值是我们发送的陷阱的 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 给出了结果,但他们没有解释它的用途。

4

2 回答 2

3

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

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

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

于 2013-12-13T07:04:36.330 回答
-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

于 2014-09-17T21:20:52.330 回答