SNMP陷阱,所需OID:sysuptime和id。

3
我正在尝试理解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分配给OID 1.3.6.1.6.3.1.1.4.1.0(其值是我们正在发送的陷阱的OID)。它使用pdu.set_notify_id函数设置。
这是另一个在发送Trap时必须存在的良好已知的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个回答

3

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

https://www.rfc-editor.org/rfc/rfc3416#page-22

我只能说,如果WinSNMP没有遵循惯例,它就不符合标准,应该由Microsoft进行修复。

所以我猜可以假设snmpTrapOID.0对应于1.3.6.1.6.3.1.1.4.1.0。你提供的RFC谈到了snmpTrapOID.0,但从未说明它的值是什么。 - Brian Schlenker
显然RFC3416是指RFC3418。snmpTrapOID在RFC3418中被定义。 - Lex Li

-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


1
这段代码可能可以回答问题,但如果您添加注释或一些解释来给它上下文,它会更有用。如果链接包含解释,您应该在答案中总结链接内容,以防链接目标发生更改或无法访问。 - skrrgwasme

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接