变量绑定响应值不一致-Windows SNMP代理

时间:2018-11-05 13:48:28

标签: windows snmp net-snmp

观察一下Microsoft snmp代理和在交换机中运行的代理填充SNMP get-response值的方式。

我正在尝试查询某些对象ID。我正在单个请求pdu消息中发送对所有对象ID的请求。

Windows SNMP代理中的行为:

在请求的对象ID中,如果代理中不存在任何对象ID,则将整个响应消息设置为错误代码“ noSuchObject”,并且即使存在一些有效的值,所有请求的对象ID值也将返回null。代理中存在对象ID。

尽管我们尝试从在cisco交换机中运行的代理获取相同的oid列表,但为特定的变量绑定设置了错误代码,并且它为存在的所有其他oid返回值。

Wireshark log (windows agent and cisco switch)参考所附的wireshark快照以获取Windows代理和cisco代理。

RFC https://tools.ietf.org/html/rfc3416#section-4.2.1在特定情况下提到响应变量绑定的value字段应设置为“ noSuchInstance” 附加信息:
Microsoft操作系统:Windows Server 2016

问题:

1。为什么是微软的这种行为?

2。是否有任何Microsoft论坛可以对此提供进一步的支持?

3。任何现有的解决方案或解决此问题的方法?

1 个答案:

答案 0 :(得分:0)

正如Lex在他/她的评论中所指出的那样,尽管存在非常精确的“标准”(通过RFC),但SNMP生态系统在各个实现中仍存在显着的不合规之处。编写SNMP代理或管理器时,您必须注意各种与预期行为的实际偏差。不幸的是,您似乎找到了其中之一。

您可以尝试推动Microsoft修复此特定错误,但在我看来,成功的机率很小,即使那样,您仍然必须支持较早的实现。

您的解决方法是对单个对象进行请求,这可能是预先请求,但至少在您认为该响应可疑时,会收到带有空varbinds的“ noSuchObject”响应。您的应用程序可以自动执行此操作,进入某种“后备模式”以尝试检测哪个对象触发了该错误并获取仍然存在的对象的值。

对于所有有趣的对象,它显然要比单个Get慢,但是好处是,现在您实际上已经可以获取所需的数据。

奖励指向如sysDescr之类的标准对象是否能可靠地识别此特定的bug代理,因此您可以将后备模式限制为特定情况。