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

时间:2010-10-15 06:45:47

标签: python snmp fitnesse net-snmp pysnmp

我正在尝试为此硬件+软件测试主题创建自动集成测试,该测试主体运行SNMP代理作为其命令接口。我们的测试设置如下:我们使用Fitnesse作为测试运行器,PyFit能够用Python编写测试。然后我们使用带有Python绑定的netsnmp来发送SNMP命令。这非常有效。

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

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

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

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

1 个答案:

答案 0 :(得分:1)

engineTime和engineBoots值可能会让你烦恼,因为SNMPv3要求它们不会倒退。如果你有一个代理从头开始重新启动并且没有增加它的引导计数(这是非法的,但在测试中我可以看到你为什么这样做),那么你需要重置引导和时间的内部概念。

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