在SNMP代理上动态递增OID

问题描述 投票:1回答:1

我已经通过在SnmpContext类实例上配置两个不同的上下文名称来编写SNMP代理代码。它将在特定的contextName下注册一个MIB树,如下所示,

class Test():
    def readVars (self , varBinds, acInfo=(None, None)):
            retItem = []
            for ov in varBinds:
                if str(ov[0]) == '1.3.6.1.4.1.26262.1.1.1.0':
                    retItem.extend([(ov[0], v2c.OctetString('%s' % 'value1'))])
                elif str(ov[0]) == '1.3.6.1.4.1.26262.1.1.2.0':
                    retItem.extend([(ov[0], v2c.OctetString('%s' % 'value2'))])
                . 
                .
                .
            return retItem

    def readNextVars (self , varBinds, acInfo=(None, None)):
            retItem = []
            for ov in varBinds:
                if str(ov[0]) == '1.3.6.1.4.1.26262.1.1.1.0':
                    retItem.extend([('1.3.6.1.4.1.26262.1.1.2.0', v2c.OctetString('%s' %  'value2'))])
                elif str(ov[0]) == '1.3.6.1.4.1.26262.1.1.2.0':
                    retItem.extend([('1.3.6.1.4.1.26262.1.1.3.1.1.0', v2c.OctetString('%s' % 'value3'))])
                .
                .
                .
                .
            else:
                    retItem.extend([('1.3.6.1.4.1.26262.1.1.1.0', v2c.OctetString('%s' % 'value1'))])
            return retItem


mibTreeA = Test()
snmpContext.registerContextName(v2c.OctetString('context-a'), mibTreeA)
snmpContext.registerContextName(v2c.OctetString('context-b'), mibTreeA)

如示例sample

这里,通过使用if语句检查条件来返回下一个OID。但是我有多个OID,使用if语句增加它会很痛苦。

所以我想知道是否有一种方法可以动态地增加OID?任何示例脚本都将有所帮助。

提前感谢。

python-2.7 snmp pysnmp
1个回答
0
投票

[可能是另一种方法是让dict的OID值对(其中值可以是可调用的,那么.nextKey方法将做增量部分?

换句话说,可能所有的if条件都可以折叠成某种顺序的数据结构,基本上支持两种操作:

  • 获取下一个项目
  • 获取与项目关联的值
© www.soinside.com 2019 - 2024. All rights reserved.