Когда я использую pysnmp и пытаюсь получить несколько oid в одной команде getCmd, но один из oid не существует, я не могу получить ни одно из значений oid, если только я не использую SNMPv2 или SNMPv3 (изменить mpmodel в коде)
from pysnmp.entity.rfc3413.oneliner import cmdgen
from pysnmp.smi import builder, view, error
def cbFun_OID(sendRequestHandle, errorIndication, errorStatus, errorIndex, varBinds, cbCtx):
(authData, transportTarget) = cbCtx
for oid, val in varBinds:
print val.prettyPrint()
ip='192.168.0.101'
cmdGen = cmdgen.AsynCommandGenerator()
cmdGen.getCmd(
cmdgen.CommunityData('public', mpModel=0),
cmdgen.UdpTransportTarget((ip, 161)),
((1,3,6,1,2,1,43,10,2,1,4,1,1),(1,3,6,1,2,1,43,5,1,1,1,1,123456)),
(cbFun_OID, (cmdgen.CommunityData('public', mpModel=0), cmdgen.UdpTransportTarget((ip, 161)))))
cmdGen.snmpEngine.transportDispatcher.runDispatcher()
Если оба оида существуют, я получаю два значения.
Если хотя бы один из оидов не существует, тогда все значения будут "Нет такого объекта в настоящее время с этим OID".
Я могу использовать asyncGetCmd команда для получения нескольких oids, но это не то, что мне нужно.
В основном мне нужно было бы открыть поток для каждого oid и просканировать его по отдельности, что является очень неэффективным методом.
Например:
from pysnmp.entity.rfc3413.oneliner import cmdgen
from pysnmp.smi import builder, view, error
def cbFun_OID(sendRequestHandle, errorIndication, errorStatus, errorIndex, varBinds, cbCtx):
(authData, transportTarget) = cbCtx
for oid, val in varBinds:
print val.prettyPrint()
ip='192.168.0.101'
cmdGen = cmdgen.AsynCommandGenerator()
cmdGen.asyncGetCmd(
cmdgen.CommunityData('public', mpModel=0),
cmdgen.UdpTransportTarget((ip, 161)),
((1,3,6,1,2,1,43,10,2,1,4,1,1),),
(cbFun_OID, (cmdgen.CommunityData('public', mpModel=0), cmdgen.UdpTransportTarget((ip, 161)))))
cmdGen.asyncGetCmd(
cmdgen.CommunityData('public', mpModel=0),
cmdgen.UdpTransportTarget((ip, 161)),
((1,3,6,1,2,1,43,5,1,1,1,1,123456),),
(cbFun_OID, (cmdgen.CommunityData('public', mpModel=0), cmdgen.UdpTransportTarget((ip, 161)))))
cmdGen.snmpEngine.transportDispatcher.runDispatcher()
Как я могу использовать pysnmp для получения нескольких oids, даже если некоторые из oids не существуют?