Pysnmp разрешает oids в имя mibPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Pysnmp разрешает oids в имя mib

Сообщение Anonymous »

В настоящее время я настроил прослушиватель ловушек, и он может нормально прослушивать уведомления snmp. Однако он возвращается только с числовым oid, я хочу иметь возможность преобразовать этот oid в удобочитаемое имя. Я просмотрел документацию, но не очень хорошо ее понимаю. Я использую пример сценария

Код: Выделить всё

    from pysnmp.carrier.asyncore.dispatch import AsyncoreDispatcher
from pysnmp.carrier.asyncore.dgram import udp, udp6, unix
from pyasn1.codec.ber import decoder
from pysnmp.proto import api

# noinspection PyUnusedLocal
def cbFun(transportDispatcher, transportDomain, transportAddress, wholeMsg):
while wholeMsg:
msgVer = int(api.decodeMessageVersion(wholeMsg))
if msgVer in api.protoModules:
pMod = api.protoModules[msgVer]
else:
print('Unsupported SNMP version %s' % msgVer)
return
reqMsg, wholeMsg = decoder.decode(
wholeMsg, asn1Spec=pMod.Message(),
)
print('Notification message from %s:%s: ' % (
transportDomain, transportAddress
)
)
reqPDU = pMod.apiMessage.getPDU(reqMsg)
if reqPDU.isSameTypeWith(pMod.TrapPDU()):
if msgVer == api.protoVersion1:
print('Enterprise: %s' % (pMod.apiTrapPDU.getEnterprise(reqPDU).prettyPrint()))
print('Agent Address: %s' % (pMod.apiTrapPDU.getAgentAddr(reqPDU).prettyPrint()))
print('Generic Trap: %s' % (pMod.apiTrapPDU.getGenericTrap(reqPDU).prettyPrint()))
print('Specific Trap: %s' % (pMod.apiTrapPDU.getSpecificTrap(reqPDU).prettyPrint()))
print('Uptime: %s' % (pMod.apiTrapPDU.getTimeStamp(reqPDU).prettyPrint()))
varBinds = pMod.apiTrapPDU.getVarBindList(reqPDU)
else:
varBinds = pMod.apiPDU.getVarBindList(reqPDU)
print('Var-binds:')
for oid, val in varBinds:
print('%s = %s' % (oid.prettyPrint(), val.prettyPrint()))
return wholeMsg

transportDispatcher = AsyncoreDispatcher()

transportDispatcher.registerRecvCbFun(cbFun)

# UDP/IPv4
transportDispatcher.registerTransport(
udp.domainName, udp.UdpSocketTransport().openServerMode(('localhost', 162))
)

# UDP/IPv6
transportDispatcher.registerTransport(
udp6.domainName, udp6.Udp6SocketTransport().openServerMode(('::1', 162))
)

## Local domain socket
# transportDispatcher.registerTransport(
#    unix.domainName, unix.UnixSocketTransport().openServerMode('/tmp/snmp-manager')
# )

transportDispatcher.jobStarted(1)

try:
# Dispatcher will never finish as job#1 never reaches zero
transportDispatcher.runDispatcher()
except:
transportDispatcher.closeDispatcher()
raise
Мне было интересно, как мне преобразовать oids в mibs. Я загрузил файлы .my cisco mib и поместил их в каталог, который я указал mibbuilder,

Код: Выделить всё

snmpEngine = SnmpEngine()
mibBuilder = builder.MibBuilder()
mibPath = mibBuilder.getMibSources() + (builder.DirMibSource('/opt/mibs'),)
mibBuilder.setMibSources(*mibPath)
mibBuilder.loadModules('CISCO-CONFIG-MAN-MIB',)
mibViewController = view.MibViewController(mibBuilder)
и в примере сценария, где я использую оператор PrettyPrint(), который у меня есть

Код: Выделить всё

for oid, val in varBinds:
objectType = ObjectType(ObjectIdentity(oid.prettyPrint()))
objectType.resolveWithMib(mibViewController)
print str(objectType)

print('%s = %s' % (oid.prettyPrint(), val.prettyPrint()))
После внесения изменений я обнаружил две ошибки:

Traceback (последний вызов последним):
Файл "traplistener.py", строка 200, в
'CISCO-BRIDGE-EXT-MIB',
Файл "/usr/local/lib/python2.7/site-packages/pysnmp/ smi/builder.py", строка 344, в loadModules
raise error.MibNotFoundError('%s ошибка компиляции: %s' % (modName, errs))
pysnmp.smi.error. MibNotFoundError: ошибки компиляции CISCO-CONFIG-MAN-MIB: отсутствуют; в таблице символов в MIB CISCO-CONFIG-MAN-MIB нет модуля «CISCO-SMI»; отсутствующий; отсутствующий; отсутствующий; отсутствующий; отсутствующий; отсутствует


Подробнее здесь: https://stackoverflow.com/questions/371 ... to-mibname
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»