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



观察Microsoft SNMP代理和交换机中运行的代理的SNMP获取响应值的填充方式。

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

Windows SNMP代理中的行为:

在请求的对象id中,如果代理中不存在任何对象id,则整个响应消息都设置有错误代码";noSuchObject";并且所有请求的对象id值都以null返回,即使代理中存在一些有效的对象id。

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

请Wireshark日志(windows代理和cisco交换机(参考随附的windows代理和思科代理的Wireshark快照

RFChttps://www.rfc-editor.org/rfc/rfc3416#section-4.2.1在特定场景响应变量绑定的值字段中提及的内容应设置为"noSuchInstance"附加信息:
Microsoft OS:Windows server 2016

问题:

1.为什么微软会有这种行为

2.是否有任何Microsoft论坛对此获得进一步支持

3.是否有此问题的现有解决方案或变通方法

Lex在其评论中指出,尽管有非常精确的"标准"(通过RFC(,SNMP生态系统在各个实现中都存在显著的不一致性。在编写SNMP代理或管理器时,您必须意识到实践中与预期行为的各种偏差。不幸的是,你似乎找到了其中一个。

你可以尝试推动微软修复这个特定的错误,但在我看来,成功的几率很低,即使这样,你仍然必须支持旧的实现。

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

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

如果像sysDescr这样的标准对象碰巧可靠地识别出这个特定的bug代理,那么您就可以将回退模式限制在特定的情况下,从而获得额外的积分。

最新更新