2016-01-27 8 views
0

, поэтому я пытаюсь получить ловушки, работающие в нашем проекте. Мы используем пользовательский MIB и ходить он уже работает, а также отправки ловушек без дополнительных данных отлично работает со следующим кодом и свойством объекта удален из ловушки в MIB:pysnmp 4.2.5 отправка ловушки с объектом не выполняется в sendPdu

def sendEventTrap(self, event): 
    if(doPrintTraps): 
     print "Sending trap" 
    ntfOrg = ntforg.NotificationOriginator(self._snmpContext) 
    errorIndication = ntfOrg.sendNotification(
     self._snmpEngine, 
     'trap', 
     ('PROJECT-MIB', 'eventTrap'), 
     ()) 

Теперь я пытаюсь добавить простой Integer32 дополнительный объект как так

def sendEventTrap(self, event): 
    if(doPrintTraps): 
     print "Sending trap" 
    ntfOrg = ntforg.NotificationOriginator(self._snmpContext) 
    errorIndication = ntfOrg.sendNotification(
     self._snmpEngine, 
     'trap', 
     ('PROJECT-MIB', 'eventTrap'), 
     [((1, 3, 6, 1, 4, 1, 999999, 3, 1, 0) , v2c.Integer32(1337))]) 

Однако это не удается, хотя в соответствии со следующим зарегистрировать ее действительно найти и подобрать нужный OID с правильно связанным типом Integer32: http://pastebin.com/hJ9LAiAg

Это отношение часть MIB:

eventNotifications OBJECT IDENTIFIER ::= { xxx 4 } 

eventTrap NOTIFICATION-TYPE 
    OBJECTS  { direction } 
    STATUS current 
    DESCRIPTION "" 
::= {eventNotifications 1} 

ПРИМЕЧАНИЕ. Некоторые имена функций были изменены по соображениям конфиденциальности. Я нахожусь в затруднении здесь и очень ценю исходные данные о том, где все идет не так.

+0

Я полагаю, является бы намного легче устранить эту проблему, если вы используете pysnmp 4.3. Помимо более чистого дизайна, исправлено множество ошибок. Кроме этого, убедитесь, что у вас есть объект snmpEngine, локальный для каждого потока, - все состояния хранятся в объекте snmpEngine, и внутренняя блокировка не выполняется. –

+0

Удовлетворительная версия 4.2.5 - это то, что debian stable обеспечивает как дистрибутив, который я бы предпочел придерживаться. Является ли это совместимым с исходным кодом, хотя, по крайней мере, для родного API? Спасибо за наконечник snmpEngine, я должен проверить это. –

+1

pysnmp 4.3 совместим с API с pysnmp 4.2.5 (для всех интерфейсов 4.2.5). Говоря о фрагменте кода, похоже, что исключение, которое вы видите, встречается в обработчике исключений при обработке исключения, вызванного sendPdu(). Поэтому трудно сказать, в чем причина первоначального исключения. Если вы включите больше возможностей отладки pysnmp, там появится исходное исключение ... –

ответ

1

Я, наконец, получил эту работу. На самом деле были две проблемы.

  1. Эта функция, кажется, сломана в 4.2.5, когда мой текущий код по-прежнему не работает с ключевой ошибкой. В 4.3.2 он работает хорошо.
  2. В приведенном выше коде отсутствует instanceIndex=(0,) и при отправке уже управляемого объекта не обязательно включать его как varBind вручную.

следующие работы с декларациями, как в вопросах MIB:

ntfOrg = ntforg.NotificationOriginator(self._snmpContext) 
errorIndication = ntfOrg.sendNotification(
    self._snmpEngine, 
    'trap', 
    ('PROJECT-MIB', 'eventTrap'), 
    instanceIndex=(0,))