我正在对远程设备进行“snmpwalk”操作。 作为回应,我得到这样的事情:
.1.3.6.1.2.1.10.127.1.3.3.1.2.215 -> Hex-STRING: 24 37 4C 0C 65 0E .1.3.6.1.2.1.10.127.1.3.3.1.2.216 -> Hex-STRING: 24 37 4C 0B A2 DA .1.3.6.1.2.1.10.127.1.3.3.1.2.217 -> STRING: "$7L f:" .1.3.6.1.2.1.10.127.1.3.3.1.2.218 -> STRING: "$7L k2"
正如你所看到的,一些variables是STRINGtypes的,其他variables是Hex-STRING。 正确的输出将只有hexstringtypes。
所以,我想知道这是谁的错? 远程设备是否发送响应的variablestypes? 或snmpwalk必须猜测types?
所有对象types和名称都在MIB(s)中定义。
如果没有返回OID的MIB,snmpwalk只能显示点名和原始数据值。
由于你只在响应中得到点名(而不是MIB定义的对象名称),所以snmpwalk可能会猜测对象types是什么。
您可以简单地将相关(缺失)MIB定义包含在某处,以便snmpwalk可以加载它。
这个邮件列表文章解释了事情 根据RFC 2579,MIBs可以在variables的定义中包含DISPLAY-HINT 。 这定义了如何显示数据; 例如,以2位小数的数字,ASCIIstring等等
您可以将snmpcmd选项传递给snmpwalk (如-Oa或-Ox以强制不具有显示提示的variables分别解释为ASCII或hex; 或者您可以使用-d来转储原始数据包。 -Ih的解释性文字也很丰富:
禁用分配值时使用DISPLAY-HINT信息。 这将需要提供原始价值:
snmpset … HOST-RESOURCES-MIB :: hrSystemDate.0
x "07 D2 0C 0A 02 04 06 08"而不是格式化的版本:
snmpset … HOST-RESOURCES-MIB :: hrSystemDate.0
= 2002-12-10,2:4:6.8
在SNMP标准中find最好的细节当然是相关的RFC ; O'Reilly的Essential SNMP也可能值得一读。