![]() |
Receiving snmp traps with more than one Community String - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: General Coding Help (https://python-forum.io/forum-8.html) +--- Thread: Receiving snmp traps with more than one Community String (/thread-36131.html) |
Receiving snmp traps with more than one Community String - ilknurg - Jan-19-2022 I have the below snmp trap receiver. I have two community string, public and private. I want to get traps from the devices who has com. string public and private. In my db my com. strings are: public private My code only get traps from private community strings. How can i use it with more community strings? #!/usr/bin/env python3.8 import asyncio import concurrent.futures from pysnmp.entity import engine, config from pysnmp.carrier.asyncio.dgram import udp from pysnmp.entity.rfc3413 import ntfrcv import json from datetime import datetime exec(open("/etc/epp/SNMP/mysqlconnector.py").read()) query= "SELECT community_string FROM nat_snmp_string WHERE status ='enable'" cursor = connection.cursor(dictionary=True) cursor.execute(query) com_str = cursor.fetchall() for data in com_str: # print(data['community_string']) community = data['community_string'] print(community) class SnmpTrapDaemon(): # @staticmethod def run_daemon(pool): # Create SNMP engine with autogenernated engineID and pre-bound # to socket transport dispatcher snmpEngine = engine.SnmpEngine() # Transport Setup config.addTransport( snmpEngine, udp.domainName, udp.UdpTransport().openServerMode(('192.168.1.200', '162')) ) # SNMPv1/2c setup config.addV1System( snmpEngine, community, community) # Callback function for receiving notifications # noinspection PyUnusedLocal def cbFun(snmpEngine, stateReference, contextEngineId, contextName, varBinds, cbCtx): trap = {} for oid, val in varBinds: trap[oid.prettyPrint()] = val.prettyPrint() pool.submit(asyncio.run, process_trap(trap)) # Register SNMP Application at the SNMP engine ntfrcv.NotificationReceiver(snmpEngine, cbFun) snmpEngine.transportDispatcher.jobStarted(1) try: print('Trap Listener started on port 162. Press Ctrl-c to quit.') snmpEngine.transportDispatcher.runDispatcher() except KeyboardInterrupt: print('user quit') finally: snmpEngine.transportDispatcher.closeDispatcher() async def process_trap(trap): print('Processing TRAP - this might take while...') await asyncio.sleep(3) for item in trap.items(): print(item) print('...done') def main(): print('Starting SNMP-TRAP Processor') query= "SELECT community_string FROM nat_snmp_string WHERE status ='enable'" cursor = connection.cursor(dictionary=True) cursor.execute(query) com_str = cursor.fetchall() for data in com_str: # print(data['community_string']) community = data['community_string'] print(community) pool = concurrent.futures.ThreadPoolExecutor(max_workers=50) SnmpTrapDaemon.run_daemon(pool) if __name__ == '__main__': main() |