2016-03-01 32 views
0

我特別試圖發送SNMP陷阱到包括一個CPU值(cpuValue),我從SNMPGET函數獲得的管理器。然而,我無法找到如何做到這一點的方法。任何幫助,將不勝感激。謝謝。pysnmp addVarbinds通知CPU值

這是我的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))** 
         ) 
     ) 
     ) 

回答

1

當發送SNMP通知需要提供它的類型(這是一個MIB對象),以便將它傳遞到NotificationType。通知可以以其他(相關)MIB對象的當前值應該被包括的方式來定義(在MIB中)。例如mteTriggerFired通知意味着包括指定的MIB對象的:

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應該開箱即用。

+0

感謝您的例子。 – Ken

0

謝謝你的關於如何生成TRAP PDU的例子。 關於我的要求發送讓我們說TRAP PDU中的CPU值我使用v2c.TrapPDU(),它適用於我。

鷸:

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))