SNMP代理端OID的动态增量

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

我正在尝试使用两个不同的上下文名称来实现snmp代理。我从http://snmplabs.com/中获得了一些示例程序。以下是我尝试实现我的代理方的方式。在实施开始时,我遇到了一些错误,例如

Error: OID not increasing: SNMPv2-SMI::dod
 >= SNMPv2-SMI::dod

我从stackoverflow得到了答案。

Error: OID not increasing: SNMPv2-SMI::dod, How to increase OID?

所以我将代码固定为

class sample ():
    def readVars (self , varBinds, acInfo=(None, None)):
            retItem = []
            for ov in varBinds:
                if str(ov[0]) == '1.3.6.1.4.1.12345.1.1.1.0':
                    retItem.extend([(ov[0], v2c.OctetString('%s' % primary_keys['value1']))])
                elif str(ov[0]) == '1.3.6.1.4.1.12345.1.1.2.0':
                    retItem.extend([(ov[0], v2c.OctetString('%s' % primary_keys['value2']))])
                . 
                .
                .
                .

    def readNextVars (self , varBinds, acInfo=(None, None)):
            retItem = []
            for ov in varBinds:
                if str(ov[0]) == '1.3.6.1.4.1.12345.1.1.1.0':
                    retItem.extend([('1.3.6.1.4.1.12345.1.1.2.0', v2c.OctetString('%s' % primary_keys['value2']))])
                elif str(ov[0]) == '1.3.6.1.4.1.12345.1.1.2.0':
                    retItem.extend([('1.3.6.1.4.1.12345.1.1.3.1.1.0', v2c.OctetString('%s' % item_list['value3']]))])
                .
                .
                .
                .
            else:
                    retItem.extend([('1.3.6.1.4.1.44555.1.1.1.0', v2c.OctetString('%s' % primary_keys['value1']))])
            return retItem

而且我在这样的背景下注册了该课程

mibTreeA = sample()

self._snmpContext.registerContextName(v2c.OctetString('ContextOne'), mibTreeA)  
self._snmpContext.registerContextName(v2c.OctetString('ContextTwo'), mibTreeA)  

但是问题是我想在其中使用50个以上的OID,因此我正在考虑使其动态化,为此提供了任何建议或示例。请询问您是否需要更多详细信息。

python snmp pysnmp
1个回答
0
投票

我可能会将您的数据包装到一些合适的数据结构中,然后通过OID在其中查找。

它甚至可以是具有(在您的代码上扩展的)RSA密钥及其对应的OID存储在一起的no / SQL DB ...

© www.soinside.com 2019 - 2024. All rights reserved.