【发布时间】:2016-01-27 13:22:28
【问题描述】:
所以我试图让陷阱在我们的项目中工作。我们正在使用自定义 mib,并且它已经可以运行,并且发送没有额外数据的陷阱也可以使用以下代码正常工作,并且从 MIB 中的陷阱中删除了 OBJECT 属性:
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}
请注意,出于隐私原因,某些函数名称已更改。 我在这里不知所措,非常感谢您提供关于哪里出了问题的意见。
【问题讨论】:
-
我想如果您使用的是 pysnmp 4.3,解决此问题会容易得多。除了更简洁的设计,它还修复了许多错误。除此之外,确保每个线程都有本地的 snmpEngine 对象——所有状态都保存在 snmpEngine 对象中,并且没有执行内部锁定。
-
遗憾的是 4.2.5 版是 debian stable 提供的,因为它是分发包,我更愿意坚持使用。它是否与源代码兼容,至少对于本机 API 而言?感谢 snmpEngine 线程提示,我必须检查一下。
-
pysnmp 4.3 与 pysnmp 4.2.5 的 API 兼容(适用于所有 4.2.5 接口)。说到您的代码 sn-p,看起来您看到的异常发生在异常处理程序中,同时处理 sendPdu() 引发的异常。因此,很难说出原始异常的原因是什么。如果您启用更多的 pysnmp 调试机会,则原始异常会显示在那里...
-
好吧,我发现如果我不添加 OBJECTS { direction } 指令,我可以附加 varBinds 来工作。这似乎是因为该参数确实仅适用于 additional varBinds。但是,如果指定了 OBJECTS,我希望自动发送正确的对象,这不起作用。但无论如何,这对我来说已经足够了。所以感谢您的意见,打开日志记录真的很有帮助。
-
@IlyaEtingof 我终于再次对此进行了调查,因为尽管它可以在 MIB 中没有陷阱的 VarBind 的情况下工作,但如果有的话,它会更好地记录下来。我再次尝试使用 PySNMP 4.3.2,现在在 PySNMP pastebin.com/cchsQwtK 中出现以下异常