我特意尝试将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))**
)
)
)
答案 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))