我正在对远程设备执行“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"
如您所见,一些变量是 STRING 类型,其他变量是 Hex-STRING。正确的输出只有 Hex-STRING 类型。
所以,我想知道这是谁的错?远程设备是否响应发送变量的类型?或者 snmpwalk 必须猜测类型?
答案1
所有对象类型和名称均在 MIB 中定义。
如果没有返回的 OID 的 MIB,snmpwalk 只能显示点名称和原始数据值。
由于您在响应中只获得点名称(而不是 MIB 定义的对象名称),snmpwalk 可能猜测对象类型是什么。
您可以简单地在某处包含相关的(缺失的)MIB 定义,以便 snmpwalk 可以加载它。
答案2
此邮件列表帖子解释事情;根据 RFC 2579,MIB 可以包含显示提示在变量定义中。这定义了数据的显示方式;例如,显示为小数点后 2 位的数字、ASCII 字符串等。
你可以通过snmpcmd 选项例如snmpwalk
或强制-Oa
变量-Ox
不是分别有一个显示提示,可解释为 ASCII 或十六进制;或者您可以使用它-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