我有一个使用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。
答案 0 :(得分:1)
根据RFC(1902和2578),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相同,显示仍然令人困惑:)