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

2024-05-20 18:46:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试为这个硬件+软件测试主题创建自动集成测试,它运行一个SNMP代理作为它的命令接口。我们的测试设置是这样的:我们使用Fitnesse作为测试运行器,PyFit可以用Python编写测试。然后我们使用netsnmp和Python绑定来发送SNMP命令。这个效果很好。在

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

结果发现,netsnmp库中存储了许多全局状态,如社区和上下文名称,以及有问题的EngineTime和EngineBootCnt,它们用于防止snmpv3中的重播攻击。这会导致代理拒绝我的snmp命令。在

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

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


Tags: 对象命令代理主题硬件状态全局软件测试
1条回答
网友
1楼 · 发布于 2024-05-20 18:46:08

engineTime和engineBoots值可能是让您感到困惑的地方,因为SNMPv3要求它们不能后退。如果你有一个代理从零开始重新启动,并且没有增加它的boots count(这是非法的,但是在测试中我可以理解为什么你要这样做),那么你需要重置boots和time的内部概念。在

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

相关问题 更多 >