我在 FreeBSD9.1-RELEASE 系统上使用 SNMP(来自端口 net-mgmt/net-snmp,v5.7.2,使用“MFD_REWRITES”编译)。出于某种原因,ifXTable MIB(1.3.6.1.2.1.31.1.1.1)似乎缺少 HC 计数器(例如ifHCInOctets
(1.3.6.1.2.1.31.1.1.1.6))。
get (noSuchName) There is no such variable name in this MIB.
snmpget localhost <hostname> 1.3.6.1.2.1.31.1.1.1.6.5
snmpget localhost <hostname> ifHCInOctets.5
snmp error index = 1
当列出 1.3.6.1.2.1.31.1.1.1 时我得到
usbus0 ifName.1
...
vr0 ifName.5
...
re0 ifName.8
...
re0.10 ifName.12
...
tun0 ifName.17
...
79144352 ifInMulticastPkts.5
...
120009 ifInMulticastPkts.8
...
43670 ifInMulticastPkts.12
...
0 ifInBroadcastPkts.5
...
0 ifOutMulticastPkts.5
...
0 ifOutBroadcastPkts.5
...
100 ifHighSpeed.5
...
1000 ifHighSpeed.8
...
false ifPromiscuousMode.5
...
true ifConnectorPresent.5
...
ifAlias.5
...
0:00:00 ifCounterDiscontinuityTime.5
...
在我看来,似乎有“很多”。但不是ifHC[In|Out]Octets
……
如您所见,我的接口使用“vr”(Via Rhine)和“re”(Realtek)。有人能提供提示吗?
答案1
我发现问题似乎出在我的查询上:由于某些(未知)原因,SNMP::Util
我使用的 perl 模块无条件地使用协议版本 1 提交 SNMP 查询。而 SNMP v1 无法处理 64 位计数器。
因此我尝试使用Net::SNMP::Util
可以指定要使用的 SNMP 协议版本的工具。瞧,它成功了。
snmpwalk
从 shell 中使用也揭示了这一点:
$ snmpwalk -Os -c <community> -v 1 localhost 1.3.6.1.2.1.31.1.1.1 | grep 'ifHC.*Octets' |wc -l
0
$ snmpwalk -Os -c <community> -v 2c localhost 1.3.6.1.2.1.31.1.1.1 | grep 'ifHC.*Octets' |wc -l
34
$ snmpwalk -Os -c <community> localhost 1.3.6.1.2.1.31.1.1.1 | grep 'ifHC.*Octets' |wc -l
34