pysnmp addVarbinds to Notification CPU Value

时间:2016-03-01 18:11:59

标签: python snmp pysnmp

我特意尝试将SNMP TRAP发送到Manager,包括CPU值(cpuValue),这是我从SNMPGET函数获得的。然而,我找不到如何做到这一点的方法。任何帮助,将不胜感激。谢谢。

这是我的pysnmp脚本的狙击。

cpuValue = GetCPU(cpuMontype)


    if cpuValue == -1:
        printString = "Could not poll %s CPU value " %(cpuMontype)
        printString += "from device %s" %(name)
        print printString

    elif cpuValue > 1.0:



        mibBuilder = builder.MibBuilder().loadModules('UCD-SNMP-MIB')

        mibNode, = mibBuilder.importSymbols('UCD-SNMP-MIB', 'laLoad' )

        errorIndication, errorStatus, errorIndex, varBinds = next(
        sendNotification(SnmpEngine(snmpEngineId),
                        UsmUserData ('authOnlyUser', 'password', 'password',
                                authProtocol=ntforg.usmHMACSHAAuthProtocol,
                                privProtocol=ntforg.usmAesCfb128Protocol),
                        UdpTransportTarget(('localhost', 162)),
                        ContextData(),
                        'trap',
                        NotificationType(
                            ObjectIdentity('1.3.6.1.2.1.88.2.1.5')
                        ).**addVarBinds(ObjectType(ObjectIdentity('DISMAN-EVENT-MIB', 'mteHotValue', 0))**
                        )
        )
        )

2 个答案:

答案 0 :(得分:1)

发送SNMP通知时,您需要提供其类型(这是一个MIB对象),因此您将其传递给NotificationType。可以以应当包括其他(相关)MIB对象的当前值的方式定义(在MIB中)通知。例如, mteTriggerFired 通知意味着包含指定的MIB OBJECTS:

mteTriggerFired NOTIFICATION-TYPE
OBJECTS { mteHotTrigger,
          mteHotTargetName,
          mteHotContextName,
          mteHotOID,
          mteHotValue }
STATUS  current
::= { dismanEventMIBNotifications 1 }

在pysnmp中,要为隐式包含在通知中的MIB对象提供具体值,NotificationType接受将MIB对象映射到值的字典:

...
NotificationType(
    ObjectIdentity('DISMAN-EVENT-MIB', 'mteTriggerFired'),
    instanceIndex=(0,),
    objects={('DISMAN-EVENT-MIB', 'mteHotTrigger'): 'trigger',
             ('DISMAN-EVENT-MIB', 'mteHotTargetName'): 'target',
             ('DISMAN-EVENT-MIB', 'mteHotContextName'): 'context',
             ('DISMAN-EVENT-MIB', 'mteHotOID'): '1.3.6.1.1.1',
             ('DISMAN-EVENT-MIB', 'mteHotValue'): 1234}
)

那应该产生以下TRAP PDU:

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.2.1.88.2.0.1
1.3.6.1.2.1.88.2.1.1.0 = trigger
1.3.6.1.2.1.88.2.1.2.0 = target
1.3.6.1.2.1.88.2.1.3.0 = context
1.3.6.1.2.1.88.2.1.4.0 = 1.3.6.1.1.1
1.3.6.1.2.1.88.2.1.5.0 = 1234

示例script应该是开箱即用的。

答案 1 :(得分:0)

感谢您提供有关如何生成TRAP PDU的示例。 关于我的要求发送让我们说TRAP PDU中的CPU值我使用了v2c.TrapPDU(),它对我来说很好。

Snipe:

    trapPDU =  v2c.TrapPDU()
    v2c.apiTrapPDU.setDefaults(trapPDU)

    v2c.apiTrapPDU.setVarBinds(
    trapPDU, [
    # sysUpTime
    ( v2c.ObjectIdentifier('1.3.6.1.2.1.1.3.0'), v2c.TimeTicks(123) ),
    # snmpTrapPDU
    ( (1,3,6,1,6,3,1,1,4,1,0),   
    v2c.ObjectIdentifier((1,3,6,1,2,1,88,2,0,1))),
    ( (1,3,6,1,2,1,88,2,1,5,0), v2c.Integer32(cpuValue))