我一直在寻找一种在SNMP代理运行期间使用pysnmp动态更新SNMP表的方法。但到目前为止没有运气。。。
该表已经在MIB文件中定义(见下文),但似乎我需要覆盖其“readGet()”方法,以便从当前系统状态返回正确的数据。
根据http://pysnmp.sourceforge.net/examples/v3arch/asyncore/agent/cmdrsp/agent-side-mib-implementations.html#implementing-conceptual-table指示
我能够在SNMP代理启动之前和SNMP代理启动之后构建具有预定义值的静态表:
# Register an imaginary never-ending job to keep I/O dispatcher running forever
self.snmpEngine.transportDispatcher.jobStarted(1)
# Run I/O dispatcher which would receive queries and send responses
try:
self.snmpEngine.transportDispatcher.runDispatcher()
except:
self.snmpEngine.transportDispatcher.closeDispatcher()
raise
它能够返回我的期望值。
但对于我的系统,它将动态生成许多报警信息,这些信息需要更新到SNMP的MIB表中,该表允许其他SNMP管理器发送“get/getNext”以从我的系统获取报警信息。
所以我想知道
>
如果是这样,getNext查询怎么样?它会忽略那些空表行吗?或者它总是返回下一个,即使它是一个虚拟的?
@Ilya Etinof pysnmp专家。如果你有时间,你能帮我吗?
Br,-大鹏娇
1.
该报警表的MIB文件定义(删除了一些敏感信息)
alarmTable = MibTable((1, 3, 6, *, *, *, *, *, *, *, *, *, , 3))
alarmEntry = MibTableRow((1, 3, 6, *, *, *, *, *, *, *, *, *, , 3, 1)).setIndexNames((0, "MY-MIB", "alarmIndex"))
alarmIndex = MibTableColumn((1, 3, 6, *, *, *, *, *, *, *, *, *, , 3, 1, 1), Integer32().subtype(subtypeSpec=ValueRangeConstraint(1, 2147483647))).setMaxAccess("readonly")
alarmId = MibTableColumn((1, 3, 6, *, *, *, *, *, *, *, *, *, , 3, 1, 2), Integer32().subtype(subtypeSpec=ValueRangeConstraint(1, 2147483647))).setMaxAccess("readonly")
alarmName = MibTableColumn((1, 3, 6, *, *, *, *, *, *, *, *, *, , 3, 1, 3), DisplayString().subtype(subtypeSpec=ValueSizeConstraint(0, 255))).setMaxAccess("readonly")
alarmSeverity = MibTableColumn((1, 3, 6, *, *, *, *, *, *, *, *, *, , 3, 1, 4), AlarmSeverity()).setMaxAccess("readonly")
alarmTime = MibTableColumn((1, 3, 6, *, *, *, *, *, *, *, *, *, , 3, 1, 5), DateAndTime()).setMaxAccess("readonly")
alarmType = MibTableColumn((1, 3, 6, *, *, *, *, *, *, *, *, *, , 3, 1, 6), AlarmType()).setMaxAccess("readonly")
alarmSource = MibTableColumn((1, 3, 6, *, *, *, *, *, *, *, *, *, , 3, 1, 7), DisplayString().subtype(subtypeSpec=ValueSizeConstraint(0, 255))).setMaxAccess( "readonly")
alarmCategory = MibTableColumn((1, 3, 6, *, *, *, *, *, *, *, *, *, , 3, 1, 8), DisplayString().subtype(subtypeSpec=ValueSizeConstraint(0, 255))).setMaxAccess("readonly")
alarmProbableCause = MibTableColumn((1, 3, 6, *, *, *, *, *, *, *, *, *, , 3, 1, 9), ProbableCause()).setMaxAccess("readonly")
alarmComparable = MibTableColumn((1, 3, 6, *, *, *, *, *, *, *, *, *, , 3, 1, 10), DisplayString().subtype(subtypeSpec=ValueSizeConstraint(0, 255))).setMaxAccess("readonly")
alarmAdditionalText = MibTableColumn((1, 3, 6, *, *, *, *, *, *, *, *, *, , 3, 1, 11), DisplayString().subtype(subtypeSpec=ValueSizeConstraint(0, 255))).setMaxAccess("readonly")
可以使用pysnmp维护动态SNMP表。解决此问题的方法有很多:
>
通过在此示例脚本中调用mibInstrumentation.writeVars
定期更新表(通过表回调或专用线程)。背面包括在运行更新时提供新数据和查询的延迟。但不需要太多编码。
扩展MibTableCol列
类并实现其readGet
/readGetNext
方法以在被调用时查看您的数据并返回OID/值对。这里的复杂性是要处理GETNEXT查询,您需要保持某种一致的OID排序并搜索下一个大于给定的。
抛弃整个pysnmp的SMI架构体系,并在您必须从中读取数据的任何数据源之上实现您自己的MIB控制器。您需要实现readGet
(简单)和可能的readGetNext
(更复杂,因为需要稳定的OID排序)方法。这样,您就可以不必学习相当通用和复杂的pysnmp SMI实现的细节,而是专注于您的最低要求。
回答您的其他问题:
我正在尝试编写一个SNMP代理,可以用来监视python进程。为此,我编写了一个使用pysnmp实现SNMP代理的类。 该代理的核心部分工作正常(即,我可以使用snmpwalk询问代理,并且返回的数据是正确的)。为了更新代理MIB值,我在自己的线程中运行了dispatcher()。我的问题是,当使用snmpwalk与代理交谈时,我会超时(snmpwalk正确地遍历MIB,但随后超时)。 有人知道我
我使用snmp4j库成功创建了SNMP代理,这是引用代码。 我的问题是如何让这个代理始终运行以监听来自经理的所有传入OID。??
我需要从单个客户端/管理器进程向多个snmp代理发送get请求/接收响应。我已经基于以下URL实现了客户端/代理:http://www.jitendrazaa.com/blog/java/snmp/create-snmp-client-in-java-using-snmp4j/http://www.jitendrazaa.com/blog/java/snmp/creating-snmp-agent
我已使用snmp4j api在SNMP代理上创建,但SNMP表注册存在问题 一旦我注册了表和表中的行。然后,如果我在表中设置值,所有行都会设置相同的值。我已经从JSON创建了snmp表 如果我设置了值,请在下表中 .1.3.6.1.4.1.1.201.6.2。它为下表中注册的所有行设置值。是否有人知道如何使用snmmpj代理正确注册和设置值。
我是SNMP新手,谢谢你的支持......我有一个子代理的现有Perl脚本,在尝试运行它时出现了以下问题:代理似乎连接到“默认”snmpd deamon,该deamon被配置为主代理(“master agentx”行存在于snmpd.conf中)。此时,脚本将一些值分配给我的MIB中的对象。但是,当我然后在master-agent上执行snmpwalk或snmpget时,我得到(对于v1查询)“结
本文向大家介绍浅谈Java代理(jdk静态代理、动态代理和cglib动态代理),包括了浅谈Java代理(jdk静态代理、动态代理和cglib动态代理)的使用技巧和注意事项,需要的朋友参考一下 一、代理是Java常用的设计模式,代理类通过调用被代理类的相关方法,并对相关方法进行增强。加入一些非业务性代码,比如事务、日志、报警发邮件等操作。 二、jdk静态代理 1、业务接口 2、业务实现类 3、代理类