如何在pysnmp中查找mibtable?

2024-09-30 08:31:04 发布

您现在位置:Python中文网/ 问答频道 /正文

当我在OID上使用snmpwalk时(1.3.6.1.4.1.2021.4),我得到以下结果:

UCD-SNMP-MIB::memIndex.0 = INTEGER: 0

UCD-SNMP-MIB::memErrorName.0 = STRING: swap

UCD-SNMP-MIB::memMinimumSwap.0 = INTEGER: 16000 kB

但是,当我使用pysnmp模块查询相同的OID时,得到的结果是:

^{pr2}$

我已经把pysnmp放进去了操作系统环境我使用的代码是:

from pysnmp.entity.rfc3413.oneliner import cmdgen
from pysnmp.smi import builder, view, error

errorIndication, errorStatus, errorIndex, \
             varBindTable = cmdGen.nextCmd (
cmdgen.CommunityData('test-agent', 'public'),
cmdgen.UdpTransportTarget ( (localhost, 161) ),
('1.3.6.1.4.1.2021.4')
)

if errorIndication:
    log.warn(errorIndication)
    return
else:
    if errorStatus:
        log.warn( '%s at %s\n' % (
            errorStatus.prettyPrint (),
            errorIndex and varBindTable[-1][int (errorIndex) - 1] or '?'
            ))
        return
    else:
        for varBindTableRow in varBindTable:
            for oid, val in varBindTableRow:
                    (symName, modName), indices = cmdgen.mibvar.oidToMibName(
                        cmdGen.mibViewController, oid
                        )
                    val = cmdgen.mibvar.cloneFromMibValue(
                                  cmdGen.mibViewController, modName, symName, val
                          )
            print varBindTableRow

我的问题是为什么snmpwalk和pysnmp结果不同,我应该如何使用pysnmp模块获得与snmpwalk相同的结果?在


已编辑

我尝试了这个代码,但是在查询1.3.6.1.2.1.4.22.1时 我得到以下错误

NoSuchObjectError: NoSuchObjectError({'str': 'No MIB info for    (1, 3, 6, 1, 4, 1, 2021, 4, 1, 0) (closest parent (1, 3, 6, 1, 4, 1))'})

我已将IP-MIB模块加载为:

mibBuilder = builder.MibBuilder() 
mibPath = mibBuilder.getMibSources()+(builder.DirMibSource(path_to_mib_dir),)
mibBuilder.setMibSources(*mibPath)
mibBuilder.loadModules('IP-MIB')
mibView = view.MibViewController(mibBuilder)

我困惑的是如何在中使用这个mibView

(symName,modName),indices=cmdgen.mibvar.oidToMibName(cmdGen.mibViewController, oid)
val=cmdgen.mibvar.cloneFromMibValue(cmdGen.mibViewController,modName, symName, val)

如果cmdGen.mibViewController是否替换为mibView?在

但它适用于OID 1.3.6.1.2.1.1.3: 我得到了预期的结果:

SNMPv2-MIB::sysUpTime.0 = 27

Tags: 模块valucdsnmpmiboidsnmpwalkpysnmp
2条回答

对不起,结果是一样的!在

如果您的问题是16000而不是16000 KB,您必须知道SNMP不会返回该单元。snmpv2mib只允许一个地方提供关于它的信息,所以SNMPWALK(作为客户端)正在使用它,而不是pysnmp。在

尝试打印:

print '%s::%s.%s = %s' % (
                    modName, symName,
                    '.'.join(map(lambda v: v.prettyPrint(), indices),
                    val.prettyPrint()
                    )

而不是

^{pr2}$

还要确保加载适当的MIB。在

相关问题 更多 >

    热门问题