2013-12-12 212 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