我使用 NETSNMP 库通过 SNMPv3 和身份验证从路由器请求数据。如果路由器被重置,则内部 EngineTime 被重置,NETSNMP 库无法识别。这会导致路由器在后续调用中引发身份验证失败。
是否有任何对 NETSNMP 的 api 调用来手动重置内部结构以便发出新的请求?
我将每个调用都包含在 snmp_sess_open/close 中,因此没有打开的会话。
如果您在路由器上进行硬重置,您将遇到麻烦。当路由器重新启动时,SNMPv3 规范要求snmpEngineBoots 计数器递增,并且 snmpEngineTime 重置为 0。如果您的设备在 snmpEngineBoots 值不递增的情况下重新启动(即,它始终为 0 或 1),那么运行管理器会发现问题因为设备报告它正在及时倒退。
如果您真的想忽略这样做的安全问题,您可以随时致电:
int set_enginetime(const u_char * engineID, u_int engineID_len,
u_int engine_boot, u_int engine_time,
u_int authenticated);
但是你必须明白,你这样做的那一刻,你就是在为重放攻击做好准备。因此,不要让您的设备在 snmpEngineBoots 值没有增加的情况下重置,或者如果失败,请更改它的 snmpEngineID。