Когато използвам pysnmp и се опитвам да получа множество oids в една команда getCmd, но един от oids не съществува, тогава не мога да получа нито една от стойностите на oids, освен ако не използвам 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 съществуват, получавам две стойности.
Ако поне един от oids не съществува, тогава всички стойности ще бъдат „В момента не съществува такъв обект в този 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 не съществуват?