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.