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

标签 python snmp fitnesse net-snmp pysnmp

我正在尝试为这个硬件+软件测试主题创建自动化集成测试,该测试主题运行 SNMP 代理作为命令接口(interface)。我们的测试设置如下所示:我们使用 Fitnesse 作为测试运行程序,并使用 PyFit 来使用 Python 编写测试。然后,我们使用带有 Python 绑定(bind)的 netsnmp 来发送 SNMP 命令。这效果非常好。

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

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

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

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

最佳答案

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

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

关于python - 从 Python 绑定(bind)重置 net-snmp 库的所有全局内部状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3940057/

相关文章:

download - 使用 SNMP 和 InOctets 计数器来跟踪下载使用情况

java - 如何在 Fitnesse 中引用外部类

python - 计算 Python pandas Dataframe 列并按日期排序

python - 每小时合并数据帧的观察结果

java - 用于 Java 的 SNMP 库

powershell - 在打印机上测试 SNMP 社区字符串

java - Fitnesse Maven 类路径错误

selenium - 机器人框架 : org. openqa.selenium.NoSuchSessionException

python - 如何在训练 XGBoost 模型时使用 GPU?

python - ImportError : libcublas. so.8.0: 无法打开共享对象文件: 没有这样的文件或目录 (Shared Linux)