2014-02-10 48 views
1

我有一個與net-snmp主代理一起工作的AgentX子代理。我想將一個unsigned int值轉換爲snmp類型並使用snmpget命令打印它。我已經使用了以下功能:如何接收net-snmp變量的無符號整型值

snmp_set_var_typed_value(var, 
         ASN_UNSIGNED, 
         (u_char *)&runnableEntry_tbl[major-1].runnableObjectCounters.counters[counter_index-1].value, 
         sizeof(unsigned int)); 

(其中runnableEntry_tbl[major-1].runnableObjectCounters.counters[counter_index-1].value是一個無符號值)。

問題是值傳遞得到的Gauge32(按Wireshark的),也與SNMPGET值的顯示是這樣的:

runnableObjectCounters.1.1 = Gauge32: 4294967294 

能否Gauge32以某種方式刪除?還是有一些其他類型的Unsigned32按ASN,請幫助我。

我正在使用Linux。

+0

從我發現的asn類型被使用的是ASN_UNSIGNED和接收MIB變量是Unsigned32。我已經使用這些,但我仍然得到Gauge32的價值 – dashdeep13

回答

1

根據RFC(19022578)Gauge32和Unsigned32是可互換的。從RFC 2578一個相關部分:

-- this doesn't wrap 
Gauge32 ::= 
    [APPLICATION 2] 
     IMPLICIT INTEGER (0..4294967295) 

-- an unsigned 32-bit quantity 
-- indistinguishable from Gauge32 
Unsigned32 ::= 
    [APPLICATION 2] 
     IMPLICIT INTEGER (0..4294967295) 

至於標準而言,一個UNSIGNED32和Gauge32將從在電線上彼此不能區分。

請參閱this other stackoverflow question瞭解關於SNMP規範中Unsigned32和Gauge32的更多討論。

如果您試圖讓snmpget顯示預期類型,如果確保子代理程序的MIB已加載到路徑中,則可能會有一些運氣。在Net-SNMP維基頁面Using and Loading MIBS上描述了幾種實現此方法的方法。

其中一個更簡單的方法是把MIB在得到由Net-SNMP,$HOME/.snmp/mibs/usr/local/share/snmp/mibs(該目錄由Linux發行版不同,你可以調用net-snmp-config --default-mibdirs獲得通過搜索目錄列表加載一個目錄中NET-SNMP)。

一旦你的MIB是在正確的位置,你應該能夠調用snmpget-m選項,

snmpget -m +YOUR-SPECIFIC-MIB <other-snmp-options> 

其中YOUR-SPECIFIC-MIB被替換爲您所關心的MIB的名稱。

+0

感謝lostriebo的信息。我在snmpget命令中使用了mib,並且我的OID按照下面提到的mib被正確映射: runnableObjectCounters.1.1 = Gauge32:4294967294 此項目已被定義爲Unsigned32並通過MIB正確映射。我現在關心的是,有什麼辦法可以刪除值前的Gauge32:前綴?或者我可以在值的前面加上前綴「Unsigned32:」,這樣我就可以自信地說是的值是「Unsigned32」而不是Gauge32,儘管兩者都是相同的。:) 提前致謝。 – dashdeep13

0

我也遇到過像ASN_UINTEGER這樣的東西,但我想它已經過時了。根據上述文章,UNIX中不支持ASN_UNSIGNED32。所以我們只剩下ASN_UNSIGNED。但是即使Gauge32和Unsigned32是相同的,顯示仍然是令人困惑的:)

相關問題