1""" 2Multiple SNMP USM users 3+++++++++++++++++++++++ 4 5Receive SNMP TRAP/INFORM messages with the following options: 6 7* SNMPv3 8* with USM users: 9 * 'usr-md5-des', auth: MD5, priv DES, ContextEngineId: 8000000001020304 10 * 'usr-md5-none', auth: MD5, priv NONE, ContextEngineId: 8000000001020304 11 * 'usr-sha-aes128', auth: SHA, priv AES, ContextEngineId: 8000000001020304 12* over IPv4/UDP, listening at 127.0.0.1:162 13* using Twisted framework for network transport 14* print received data on stdout 15 16Either of the following Net-SNMP commands will send notifications to this 17receiver: 18 19| $ snmptrap -v3 -u usr-md5-des -l authPriv -A authkey1 -X privkey1 -e 8000000001020304 127.0.0.1 123 1.3.6.1.6.3.1.1.5.1 20| $ snmptrap -v3 -u usr-md5-none -l authNoPriv -A authkey1 -e 8000000001020304 127.0.0.1 123 1.3.6.1.6.3.1.1.5.1 21| $ snmpinform -v3 -u usr-sha-aes128 -l authPriv -a SHA -A authkey1 -x AES -X privkey1 127.0.0.1 123 1.3.6.1.6.3.1.1.5.1 22 23"""# 24from twisted.internet import reactor 25from pysnmp.entity import engine, config 26from pysnmp.carrier.twisted.dgram import udp 27from pysnmp.entity.rfc3413 import ntfrcv 28from pysnmp.proto import rfc1902 29 30# Create SNMP engine with autogenernated engineID and pre-bound 31# to socket transport dispatcher 32snmpEngine = engine.SnmpEngine() 33 34# Transport setup 35 36# UDP over IPv4 37config.addTransport( 38 snmpEngine, 39 udp.domainName, 40 udp.UdpTwistedTransport().openServerMode(('127.0.0.1', 162)) 41) 42 43# -- begin of SNMPv3/USM setup 44 45# user: usr-md5-des, auth: MD5, priv DES 46config.addV3User( 47 snmpEngine, 'usr-md5-des', 48 config.usmHMACMD5AuthProtocol, 'authkey1', 49 config.usmDESPrivProtocol, 'privkey1' 50) 51 52# user: usr-md5-des, auth: MD5, priv DES, securityEngineId: 8000000001020304 53# this USM entry is used for TRAP receiving purposes 54config.addV3User( 55 snmpEngine, 'usr-md5-des', 56 config.usmHMACMD5AuthProtocol, 'authkey1', 57 config.usmDESPrivProtocol, 'privkey1', 58 securityEngineId=rfc1902.OctetString(hexValue='8000000001020304') 59) 60 61# user: usr-md5-none, auth: MD5, priv NONE 62config.addV3User( 63 snmpEngine, 'usr-md5-none', 64 config.usmHMACMD5AuthProtocol, 'authkey1' 65) 66 67# user: usr-md5-none, auth: MD5, priv NONE, securityEngineId: 8000000001020304 68# this USM entry is used for TRAP receiving purposes 69config.addV3User( 70 snmpEngine, 'usr-md5-none', 71 config.usmHMACMD5AuthProtocol, 'authkey1', 72 securityEngineId=rfc1902.OctetString(hexValue='8000000001020304') 73) 74 75# user: usr-sha-aes128, auth: SHA, priv AES 76config.addV3User( 77 snmpEngine, 'usr-sha-aes128', 78 config.usmHMACSHAAuthProtocol, 'authkey1', 79 config.usmAesCfb128Protocol, 'privkey1' 80) 81 82# user: usr-sha-aes128, auth: SHA, priv AES, securityEngineId: 8000000001020304 83# this USM entry is used for TRAP receiving purposes 84config.addV3User( 85 snmpEngine, 'usr-sha-aes128', 86 config.usmHMACSHAAuthProtocol, 'authkey1', 87 config.usmAesCfb128Protocol, 'privkey1', 88 securityEngineId=rfc1902.OctetString(hexValue='8000000001020304') 89) 90 91 92# -- end of SNMPv3/USM setup 93 94# Callback function for receiving notifications 95# noinspection PyUnusedLocal,PyUnusedLocal,PyUnusedLocal 96def cbFun(snmpEngine, stateReference, contextEngineId, contextName, 97 varBinds, cbCtx): 98 print('Notification from ContextEngineId "%s", ContextName "%s"' % (contextEngineId.prettyPrint(), 99 contextName.prettyPrint())) 100 for name, val in varBinds: 101 print('%s = %s' % (name.prettyPrint(), val.prettyPrint())) 102 103 104# Register SNMP Application at the SNMP engine 105ntfrcv.NotificationReceiver(snmpEngine, cbFun) 106 107# Run Twisted main loop 108reactor.run() 109