Jan-31-2022, 12:16 PM
I have a snmp trap receiver for snmp v2. I want to get snmp version in coming traps. If snmp version is 1 or 3 or anything else, return an error. How can i do it, how can i check the version of coming trap?
# python snmp v2 trap receiver from pysnmp.entity import engine, config from pysnmp.carrier.asyncore.dgram import udp from pysnmp.entity.rfc3413 import ntfrcv from datetime import datetime snmpEngine = engine.SnmpEngine() # replace the agent and port with you host machine and port TrapAgentAddress = '192.168.1.27' Port = 1162 print('Agent is listening SNMP2 Trap on {} , Port : {}'.format( TrapAgentAddress, Port)) print( '--------------------------------------------------------------------------' ) config.addTransport( snmpEngine, udp.domainName + (1, ), udp.UdpTransport().openServerMode((TrapAgentAddress, Port))) # Configure community here config.addV1System(snmpEngine, ' ', 'public') def cbFun(snmpEngine, stateReference, contextEngineId, contextName, varBinds, cbCtx): print('\n{0}New trap message received on {1} {0}'.format( '-' * 20, datetime.now().strftime('%d-%b-%Y at %H:%M:%S'))) execContext = snmpEngine.observer.getExecutionContext( 'rfc3412.receiveMessage:request') print('Trap is coming from %s:%s' % execContext['transportAddress']) print('snmpEngine : {0}'.format(snmpEngine)) print('stateReference : {0}'.format(stateReference)) print('contextEngineId : {0}'.format(contextEngineId)) print('contextName : {0}'.format(contextName)) print('cbCtx : {0}'.format(cbCtx)) for name, val in varBinds: print('{0} = {1}'.format(name.prettyPrint(), val.prettyPrint())) print('{0}Trap message ends{0}\n'.format('-' * 20)) print('System Description:') ntfrcv.NotificationReceiver(snmpEngine, cbFun) snmpEngine.transportDispatcher.jobStarted(1) try: snmpEngine.transportDispatcher.runDispatcher() except: snmpEngine.transportDispatcher.closeDispatcher() raise