Open rkumar1991 opened 3 years ago
Hi, I am new to SNMP and want to create a SNMP Trap Receiver.
I found following code for Trap Receiver but not sure where and how to add snmpv3 user in following code snippet. kindly help. code found: https://pysnmp.readthedocs.io/en/latest/examples/v1arch/asyncore/manager/ntfrcv/transport-tweaks.html#listen-for-notifications-at-ipv4-ipv6-interfaces
from pysnmp.carrier.asyncore.dispatch import AsyncoreDispatcher from pysnmp.carrier.asyncore.dgram import udp, udp6 from pyasn1.codec.ber import decoder from pysnmp.proto import api
def cbFun(transportDispatcher, transportDomain, transportAddress, wholeMsg):
while wholeMsg: msgVer = int(api.decodeMessageVersion(wholeMsg)) if msgVer in api.PROTOCOL_MODULES: pMod = api.PROTOCOL_MODULES[msgVer] else: print('Unsupported SNMP version %s' % msgVer) return reqMsg, wholeMsg = decoder.decode( wholeMsg, asn1Spec=pMod.Message(), ) print('Notification message from %s:%s: ' % (transportDomain, transportAddress)) reqPDU = pMod.apiMessage.getPDU(reqMsg) if reqPDU.isSameTypeWith(pMod.TrapPDU()): if msgVer == api.SNMP_VERSION_1: print('Enterprise: %s' % (pMod.apiTrapPDU.getEnterprise(reqPDU).prettyPrint())) print('Agent Address: %s' % (pMod.apiTrapPDU.getAgentAddr(reqPDU).prettyPrint())) print('Generic Trap: %s' % (pMod.apiTrapPDU.getGenericTrap(reqPDU).prettyPrint())) print('Specific Trap: %s' % (pMod.apiTrapPDU.getSpecificTrap(reqPDU).prettyPrint())) print('Uptime: %s' % (pMod.apiTrapPDU.getTimeStamp(reqPDU).prettyPrint())) varBinds = pMod.apiTrapPDU.getVarBinds(reqPDU) else: varBinds = pMod.apiPDU.getVarBinds(reqPDU) print('Var-binds:') for oid, val in varBinds: print('%s = %s' % (oid.prettyPrint(), val.prettyPrint())) return wholeMsg
transportDispatcher = AsyncoreDispatcher()
transportDispatcher.registerRecvCbFun(cbFun)
transportDispatcher.registerTransport( udp.DOMAIN_NAME, udp.UdpSocketTransport().openServerMode(('localhost', 162)) )
transportDispatcher.registerTransport( udp6.DOMAIN_NAME, udp6.Udp6SocketTransport().openServerMode(('::1', 162)) )
transportDispatcher.jobStarted(1)
try:
transportDispatcher.runDispatcher()
finally: transportDispatcher.closeDispatcher()
You can find a more recent sample here,
https://github.com/lextudio/pysnmp/blob/v5.0.35/examples/v3arch/asyncio/agent/cmdrsp/multiple-snmp-communities.py#L40
To add v3 users, simply use config.addV3User method, which works similar to config.addV1System but requires more parameters.
config.addV3User
config.addV1System
Hi, I am new to SNMP and want to create a SNMP Trap Receiver.
I found following code for Trap Receiver but not sure where and how to add snmpv3 user in following code snippet. kindly help. code found: https://pysnmp.readthedocs.io/en/latest/examples/v1arch/asyncore/manager/ntfrcv/transport-tweaks.html#listen-for-notifications-at-ipv4-ipv6-interfaces
from pysnmp.carrier.asyncore.dispatch import AsyncoreDispatcher from pysnmp.carrier.asyncore.dgram import udp, udp6 from pyasn1.codec.ber import decoder from pysnmp.proto import api
noinspection PyUnusedLocal
def cbFun(transportDispatcher, transportDomain, transportAddress, wholeMsg):
transportDispatcher = AsyncoreDispatcher()
transportDispatcher.registerRecvCbFun(cbFun)
UDP/IPv4
transportDispatcher.registerTransport( udp.DOMAIN_NAME, udp.UdpSocketTransport().openServerMode(('localhost', 162)) )
UDP/IPv6
transportDispatcher.registerTransport( udp6.DOMAIN_NAME, udp6.Udp6SocketTransport().openServerMode(('::1', 162)) )
transportDispatcher.jobStarted(1)
try:
Dispatcher will never finish as job#1 never reaches zero
finally: transportDispatcher.closeDispatcher()