2013-12-12 175 views
2

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

我发现了一个名为SNMP ++的好库,它可以轻松发送SNMP陷阱。

根据我的理解,SNMP陷阱的前两个变量绑定(vb)字段必须符合特定的格式。第一个vb是sysuptime(基本上是陷阱的时间戳),它具有众所周知的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(它的值是我们发送的陷阱的OID)的陷阱ID。它使用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给出了结果,但他们没有解释它的用途。

回答

1

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

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

如果WinSNMP的不遵循约定我只能说,这是不符合标准,并应在固定微软。

+0

所以我想我可以假设snmpTrapOID.0相当于1.3.6.1.6.3.1.1.4.1.0。你链接的RFC会谈到snmpTrapOID.0,但从来没有说过它的价值。 –

+0

显然RFC3416指的是RFC3418。 'snmpTrapOID'在RFC3418中定义。 –

-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

+0

这段代码可能会回答这个问题,但如果您添加了注释或某些解释来为其提供上下文,它会更有用。如果链接中包含解释,则应在链接目标更改或无法访问的情况下总结链接内容。 – skrrgwasme