1

我正在尝试为这个硬件+软件测试主题创建自动化集成测试,它运行一个 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 的地步,但我希望避免它。

4

1 回答 1

1

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

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

于 2010-10-19T12:25:29.197 回答