snmpvariablestypes。 snmpwalk如何检测它?

我正在对远程设备进行“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也可能值得一读。