繁体   English   中英

从Python绑定中重置net-snmp库的所有全局内部状态

[英]Resetting all global internal state of the net-snmp library from the Python bindings

我正在尝试为此硬件和软件测试主题创建自动集成测试,该主题运行SNMP代理作为其命令界面。 我们的测试设置如下所示:我们使用Fitnesse作为测试运行程序,使用PyFit能够用Python编写测试。 然后,我们将netsnmp与Python绑定一起使用来发送SNMP命令。 效果很好。

但是,当我尝试运行套件时,会重新启动SNMP代理(测试对象)(通常在不同的模拟时间),这使netsnmp的内部结构得到各种有趣的错误。

事实证明,netsnmp库中存储了很多全局状态,例如社区和上下文名称,并且有问题的是EngineTime和EngineBootCnt,它用于防止SNMP v3中的重放攻击。 这将导致代理拒绝我的snmp命令。

我的问题是如何以重置内部全局状态的方式重新初始化netsnmp库(从Python绑定)? Python绑定中的netsnmp.Session对象确实采用了参数EngineTime和EngineBoots并将它们设置为0应该重置它们,但实际上似乎不这样做。 我也不知道是否还有其他全局状态需要重置。

我认为我需要重写测试以使用纯python snmp库pysnmp,但我希望避免使用它。

engineTime和engineBoots值可能使您感到困惑,因为SNMPv3要求它们不能向后移动。 如果您有一个从头重新启动且未增加其启动计数的代理(这是非法的,但是在测试中我可以看到您为什么这样做),那么您需要重置启动和时间的内部概念。

但是,将它们设置为0和0将无济于事,因为它将假定它们是默认值。 相反,您应将其中之一更改为“ 1”,这将触发override子句以实际使用这些值。 将时间设置为1并尝试一下,我认为它会起作用(如果不行,请将它们都设置为1并尝试一下)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM