我正在尝试理解SNMP陷阱的格式。我正在将一段从Windows发送SNMP陷阱的代码移植到Linux上。Windows代码使用内置库(包括SnmpStartup、SnmpSetRetransmitMode等函数,可能称为WinSNMP),因此在移植到Linux时无法保留该代码。
我找到了一个名为SNMP++的很好的库,它可以轻松地发送SNMP陷阱。
据我所知,SNMP陷阱的前两个变量绑定(vb)字段必须符合特定格式。第一个vb是sysuptime(基本上是陷阱的时间戳),它具有良好已知的OID
第二个vb是陷阱的ID。我无法在任何地方找到关于它的文档,但SNMP++将陷阱的ID分配给OID
这是另一个在发送Trap时必须存在的良好已知的OID吗?Windows库根本不使用此OID。它将ID字段的OID设置为我们正在发送的OID,因此OID及其值设置为相同的内容。不过看起来是手动完成的,所以原始编码器可能对格式不太理解。
那么,哪个是正确的?
我找到了一个名为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进行谷歌搜索会得到结果,但是它们并没有解释其用途。
snmpTrapOID
在RFC3418中被定义。 - Lex Li