我有一个启用snmp的设备,我想要进行监控。 但是该设备为所有get请求提供Request-ID 0的响应。 snmp4j库 丢弃这些收到的数据包,因为它发送的请求带有一些除0以外的Request-ID值。收到响应后,它会将收到的“Request-ID”值与发送的“Request-ID”值匹配,并在发现不匹配时丢弃它收到数据包并将“null”值返回给响应。
如果我在发送get请求之前在snmp数据包中将Request-ID设置为0,则可以处理响应snmp数据包。
这个snmp4j库包含“setRequestID(Integer32(value))”函数来设置任何snmp数据包所需的Request-ID,但是这个函数不能将Request-ID值设置为0.当我将值设置为0,此函数将此值替换为某个随机Request-ID值。
如果有人有解决方案,那么请回复。 谢谢。
答案 0 :(得分:1)
request-id字段用于在响应返回客户端时识别响应。因此,如果您要查询的设备返回请求ID值为0而不是提供的值的所有请求,则客户端(snmp4j)正在丢弃响应,因为它无效。响应数据包中的request-id必须始终与原始请求中的request-id匹配。该设备有一个错误的SNMP堆栈。如果您更改代码以强制请求始终具有0的请求ID,那么您将破坏功能以启用与非标准代理的兼容性,我建议不要使用它。