pysnmp cmdGen - 如何从变量中获取 OID

pysnmp cmdGen - How to feed OIDs from a variable

我有一个我想要的 SNMP OID 列表return,但我无法用变量替换命令中的 OID。我什至尝试将变量包装在 eval 中,并与 ObjectType 和 ObjectIdentity 结合但没有成功。

我从 here 中获取了基本配置模板并根据我的目的进行了编辑。

这是完整的配置块:

cmdGen = cmdgen.CommandGenerator()
errorIndication, errorStatus, errorIndex, varBinds = cmdGen.getCmd(
    cmdgen.UsmUserData(user, 
                    authKey=authKe, 
                    privKey=privKe, 
                    authProtocol=authProto, 
                    privProtocol=privProto, 
                    securityEngineId=None
            ),
    cmdgen.UdpTransportTarget((sHost, 161)),
    (_OID), 

代替 (_OID), 以下替换都有效:

    cmdgen.MibVariable('1.3.6.1.2.1.1.1.0'),
    cmdgen.MibVariable('1.3.6.1.2.1.1.6.0'),
    cmdgen.MibVariable('1.3.6.1.2.1.1.5.0'),
    cmdgen.MibVariable('1.3.6.1.2.1.1.4.0'),
    cmdgen.MibVariable(ObjectIdentity('SNMPv2-MIB', 'sysDescr', 0)),
    '1.3.6.1.2.1.1.1.0', '1.3.6.1.2.1.1.4.0', '1.3.6.1.2.1.1.5.0', '1.3.6.1.2.1.1.6.0', 

以上所有内容都可以作为一个完整的块、单独地或任何其他组合添加。 _OID 变量获取 OID 列表并将其转换为字符串,如下所示:'1.3.6.1.2.1.1.1.0', '1.3.6.1.2.1.1.4.0', '1.3.6.1.2.1.1.5.0', '1.3.6.1.2.1.1.6.0',。我怀疑甚至可能有一种直接使用列表的方法。

我知道我可以将 getCmd 包装在 for 中来执行此操作,只要我事先实例化引擎,性能影响很小,如记录 ,但我喜欢cmdgen 方法,因为它很干净,我怀疑包装它会很昂贵。

如何使用 _OID 变量动态设置所需的 OID?

pysnmp 版本 4.4.4

如果您在序列中有位置参数,只需使用 * 运算符将它们解压缩到函数的位置参数中。

_oids = ('1.3.6.1.2.1.1.1.0', '1.3.6.1.2.1.1.4.0',
         '1.3.6.1.2.1.1.5.0', '1.3.6.1.2.1.1.6.0')

cmdGen.getCmd(
    cmdgen.UsmUserData(
        user, 
        authKey=authKe, 
        privKey=privKe, 
        authProtocol=authProto, 
        privProtocol=privProto
    ),
    cmdgen.UdpTransportTarget((sHost, 161)),
    *[ObjectType(ObjectIdentity(oid)) for oid in _oids]
)