PYSNMP 自定义陷阱发送器,哪些是额外的 oid?



我不是snmp专家;几周前,我刚刚开始在闲暇时间在公司的系统中实现新功能。

我复制粘贴了我在这里找到的答案

from pysnmp.hlapi import *
from pysnmp import debug
debug.setLogger(debug.Debug('msgproc'))
next(sendNotification(SnmpEngine(),
CommunityData('public'),
UdpTransportTarget(('192.168.1.92',162)),
ContextData(),
'trap',
[ObjectType(ObjectIdentity('1.3.6.1.2.7.8'), Integer32(5)),
ObjectType(ObjectIdentity('1.3.6.6.7'),Integer32(45))]
)
)

我的接收器捕获 4 个变量绑定,而不仅仅是我指定的 2 个,调试显示下一个

2017-03-24 09:07:53,015 pysnmp: running pysnmp version 4.3.4
2017-03-24 09:07:53,016 pysnmp: debug category 'msgproc' enabled
2017-03-24 09:07:54,115 pysnmp: StatusInformation: {'errorIndication': <pysnmp.proto.errind.AccessAllowed object at 0x762eb170>}
2017-03-24 09:07:54,116 pysnmp: StatusInformation: {'errorIndication': <pysnmp.proto.errind.AccessAllowed object at 0x762eb170>}
2017-03-24 09:07:54,120 pysnmp: prepareOutgoingMessage: using contextEngineId SnmpEngineID() contextName b''
2017-03-24 09:07:54,123 pysnmp: generateRequestMsg: Message:
version=1
community=public
data=PDUs:
snmpV2-trap=SNMPv2TrapPDU:
request-id=10292983
error-status='noError'
error-index=0
variable-bindings=VarBindList:
VarBind:
name=1.3.6.1.2.1.1.3.0
=_BindValue:
value=ObjectSyntax:
application-wide=ApplicationSyntax:
timeticks-value=0

VarBind:
name=1.3.6.1.6.3.1.1.4.1.0
=_BindValue:
value=ObjectSyntax:
simple=SimpleSyntax:
objectID-value=1.3.6.1.6.3.1.1.5.1
VarBind:
name=1.3.6.1.2.7.8
=_BindValue:
value=ObjectSyntax:
simple=SimpleSyntax:
integer-value=5
VarBind:
name=1.3.6.6.7
=_BindValue:
value=ObjectSyntax:
simple=SimpleSyntax:
integer-value=45

我遇到的问题是我真的不知道前两个 OID 的含义是什么。

**1.3.6.1.2.1.1.3.0 = 0
1.3.6.1.6.3.1.1.4.1.0 = 1.3.6.1.6.3.1.1.5.1**
1.3.6.1.2.7.8 = 5
1.3.6.6.7 = 45

向外看似乎是来自 snmpv2-mib 的 OID,但我不确定。

所以,你正在发送一个SNMPv2陷阱(CommunityData(mpModel=1)暗示)。根据RFC1905第4.2.6章:

变量绑定列表中的前两个变量绑定 SNMPv2-Trap-PDU 是 sysUpTime.0 和 snmpTrapOID.0 分别。

由于您自己没有提供这些,pysnmp 会自动添加它们以生成格式正确的 PDU。

请注意,根据您发送的 TRAP 的 ID,pysnmp 可能会尝试查找更多 OID 值对并将其附加到 var-bindingd 中,如 RFC 要求的那样:

如果 OBJECTS 子句存在于调用 相应的通知类型宏,然后每个相应的 由此通知实例化的变量按顺序复制, 到变量绑定字段。

您可以传递查找映射("对象"参数)来初始化这些对象 OID。否则,pysnmp 将在其本地 MIB 中搜索它们。

最后,您显式传递的 OID 属于 RFC 的这一部分:

如果包含任何其他变量(在选项 生成 SNMPv2 实体),然后将每个实体复制到变量绑定中 田。

最新更新