PYSNMP 自定义陷阱发送者,那些额外的 oid 是什么?
PYSNMP custom trap sender, which are those extra oids?
我不是 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 个 varbinds,而不是我指定的 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
我的问题是我真的不知道前两个 OIDS 是什么意思。
**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 陷阱(社区数据(mpModel=1) implies). According to the chapter 4.2.6 of RFC1905:
The first two variable bindings in the variable binding list of an
SNMPv2-Trap-PDU are sysUpTime.0 and snmpTrapOID.0
respectively.
由于您没有自己提供这些,pysnmp 会自动添加它们以生成格式正确的 PDU。
请注意,根据您发送的 TRAP 的 ID,pysnmp 可能会尝试查找更多 OID 值对并将其附加到 var-binds,作为 RFC 的要求:
If the OBJECTS clause is present in the invocation of
the corresponding NOTIFICATION-TYPE macro, then each corresponding
variable, as instantiated by this notification, is copied, in order,
to the variable-bindings field.
您可以传递查找映射 ("objects" parameter) 来初始化这些 OBJECTS OID。否则 pysnmp 将在其本地 MIB 中搜索它们。
最后,您明确传递的 OID 属于 RFC 的这一部分:
If any additional variables are being included (at the option of the
generating SNMPv2 entity), then each is copied to the variable-bindings
field.
我不是 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 个 varbinds,而不是我指定的 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
我的问题是我真的不知道前两个 OIDS 是什么意思。
**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 陷阱(社区数据(mpModel=1) implies). According to the chapter 4.2.6 of RFC1905:
The first two variable bindings in the variable binding list of an SNMPv2-Trap-PDU are sysUpTime.0 and snmpTrapOID.0 respectively.
由于您没有自己提供这些,pysnmp 会自动添加它们以生成格式正确的 PDU。
请注意,根据您发送的 TRAP 的 ID,pysnmp 可能会尝试查找更多 OID 值对并将其附加到 var-binds,作为 RFC 的要求:
If the OBJECTS clause is present in the invocation of the corresponding NOTIFICATION-TYPE macro, then each corresponding variable, as instantiated by this notification, is copied, in order, to the variable-bindings field.
您可以传递查找映射 ("objects" parameter) 来初始化这些 OBJECTS OID。否则 pysnmp 将在其本地 MIB 中搜索它们。
最后,您明确传递的 OID 属于 RFC 的这一部分:
If any additional variables are being included (at the option of the generating SNMPv2 entity), then each is copied to the variable-bindings field.