如何接收net-snmp变量的Unsigned int值

时间:2014-02-10 07:28:24

标签: snmp net-snmp

我有一个使用net-snmp主代理的AgentX子代理。我想将unsigned int值转换为snmp类型并使用snmpget命令打印它。我使用了以下功能:

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吗?或者根据ASN还有其他类型的Unsigned32,请帮助我。

我正在使用Linux。

2 个答案:

答案 0 :(得分: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)

就标准而言,无符号32和Gauge32在线路上无法区分。

有关SNMP规范中有关Unsigned32和Gauge32的更多讨论,请参阅this other stackoverflow question

如果您试图让snmpget显示预期类型,那么如果您确保路径中已加载子代理的MIB,则可能会有一些运气。在Net-SNMP wiki页面Using and Loading MIBS上描述了实现此目的的几种方法。

更简单的方法之一是将MIB放在Net-SNMP,$HOME/.snmp/mibs/usr/local/share/snmp/mibs加载的其中一个目录中(此目录因linux发行版而异,您可以调用{{ 1}}获取Net-SNMP搜索的目录列表。

一旦您的MIB位于正确的位置,您就可以使用net-snmp-config --default-mibdirs选项致电snmpget

-m

其中snmpget -m +YOUR-SPECIFIC-MIB <other-snmp-options> 替换为您关注的MIB的名称。

答案 1 :(得分:0)

我也遇到过像ASN_UINTEGER这样的东西,但我猜它已经过时了。根据上述帖子,UNIX不支持ASN_UNSIGNED32。所以我们只剩下ASN_UNSIGNED了。但是,即使Gauge32和Unsigned32相同,显示仍然令人困惑:)