def __init__(self, mibViewController): if 'PYSNMPOIDPREFIX' in os.environ: self.DEFAULT_OID_PREFIX = os.environ['PYSNMPOIDPREFIX'] if 'PYSNMPMIBS' in os.environ: self.DEFAULT_MIBS = os.environ['PYSNMPMIBS'].split(os.pathsep) if 'PYSNMPMIBDIRS' in os.environ: self.DEFAULT_MIB_DIRS = os.environ['PYSNMPMIBDIRS'].split( os.pathsep) if self.DEFAULT_MIB_DIRS: mibViewController.mibBuilder.setMibSources( *(mibViewController.mibBuilder.getMibSources() + tuple([ builder.ZipMibSource(m).init() for m in self.DEFAULT_MIB_DIRS ]))) if self.DEFAULT_MIBS: mibViewController.mibBuilder.loadModules(*self.DEFAULT_MIBS) self.__oidValue = univ.ObjectIdentifier() self.__intValue = univ.Integer() self.__timeValue = rfc1902.TimeTicks() self.__bitsValue = rfc1902.Bits()
def get_cmd_gen(mib_names_args): global mib_view # load in custom MIBS cmd_gen = cmdgen.CommandGenerator() mib_builder = cmd_gen.snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder mib_sources = (builder.DirMibSource(mib_egg_dir), ) for mibfile in os.listdir(mib_egg_dir): if mibfile.endswith(".egg"): mib_sources = mib_sources + (builder.ZipMibSource(mibfile), ) mib_sources = mib_builder.getMibSources() + mib_sources mib_builder.setMibSources(*mib_sources) if mib_names_args: mib_builder.loadModules(*mib_names_args) mib_view = view.MibViewController(mib_builder) return cmd_gen, mib_view
def __init__(self, mibViewController): if 'PYSNMPOIDPREFIX' in os.environ: self.defaultOidPrefix = os.environ['PYSNMPOIDPREFIX'] if 'PYSNMPMIBS' in os.environ: self.defaultMibs = os.environ['PYSNMPMIBS'].split(':') if 'PYSNMPMIBDIRS' in os.environ: self.defaultMibDirs = os.environ['PYSNMPMIBDIRS'].split(':') if self.defaultMibDirs: mibViewController.mibBuilder.setMibSources( *(mibViewController.mibBuilder.getMibSources() + tuple([ builder.ZipMibSource(m).init() for m in self.defaultMibDirs ]))) if self.defaultMibs: mibViewController.mibBuilder.loadModules(*self.defaultMibs) self.__oidValue = univ.ObjectIdentifier() self.__intValue = univ.Integer() self.__timeValue = rfc1902.TimeTicks()
val = syntax.clone(hexValue=line[2:]) else: val = int(line[2:], 16) else: val = line dataFileHandler = snmprec.SnmprecRecord() mibBuilder = builder.MibBuilder() mibBuilder.setMibSources( *mibBuilder.getMibSources() + tuple( [builder.ZipMibSource(m).init() for m in mibDirs] ) ) # Load MIB tree foundation classes (MibScalar, MibTable, MibTableRow, MibTableColumn) = mibBuilder.importSymbols( 'SNMPv2-SMI', 'MibScalar', 'MibTable', 'MibTableRow', 'MibTableColumn' )
def do_run(): config = get_input_config() activation_key = config.get("activation_key") app_name = "SNMP Modular Input" m = hashlib.md5() m.update((app_name)) if not m.hexdigest().upper() == activation_key.upper(): logging.error("FATAL Activation key for App '%s' failed" % app_name) sys.exit(2) #params snmp_mode = config.get("snmp_mode", "") destination_list = config.get("destination") if not destination_list is None: destinations = map(str, destination_list.split(",")) #trim any whitespace using a list comprehension destinations = [x.strip(' ') for x in destinations] port = int(config.get("port", 161)) snmpinterval = int(config.get("snmpinterval", 60)) timeout_val = float(config.get("timeout", 1.0)) num_retries = int(config.get("retries", 5)) ipv6 = int(config.get("ipv6", 0)) try: # update all the root StreamHandlers with a new formatter that includes the config information for h in logging.root.handlers: if isinstance(h, logging.StreamHandler): h.setFormatter( logging.Formatter( '%(levelname)s %(message)s snmp_stanza:{0}'.format( config.get("name")))) except: # catch *all* exceptions e = sys.exc_info()[1] logging.error("Couldn't update logging templates: %s host:'" % str(e)) response_handler_args = {} response_handler_args_str = config.get("response_handler_args") if not response_handler_args_str is None: response_handler_args = dict( (k.strip(), v.strip()) for k, v in (item.split('=') for item in response_handler_args_str.split(','))) response_handler = config.get("response_handler", "DefaultResponseHandler") module = __import__("responsehandlers") class_ = getattr(module, response_handler) global RESPONSE_HANDLER_INSTANCE RESPONSE_HANDLER_INSTANCE = class_(**response_handler_args) #snmp 1 and 2C params snmp_version = config.get("snmp_version", "2C") communitystring = config.get("communitystring", "public") v3_securityName = config.get("v3_securityName", "") v3_authKey = config.get("v3_authKey", None) v3_privKey = config.get("v3_privKey", None) v3_authProtocol_str = config.get("v3_authProtocol", "usmHMACMD5AuthProtocol") v3_privProtocol_str = config.get("v3_privProtocol", "usmDESPrivProtocol") if v3_authProtocol_str == "usmHMACMD5AuthProtocol": v3_authProtocol = cmdgen.usmHMACMD5AuthProtocol elif v3_authProtocol_str == "usmHMACSHAAuthProtocol": v3_authProtocol = cmdgen.usmHMACSHAAuthProtocol elif v3_authProtocol_str == "usmNoAuthProtocol": v3_authProtocol = cmdgen.usmNoAuthProtocol else: v3_authProtocol = cmdgen.usmNoAuthProtocol if v3_privProtocol_str == "usmDESPrivProtocol": v3_privProtocol = cmdgen.usmDESPrivProtocol elif v3_privProtocol_str == "usm3DESEDEPrivProtocol": v3_privProtocol = cmdgen.usm3DESEDEPrivProtocol elif v3_privProtocol_str == "usmAesCfb128Protocol": v3_privProtocol = cmdgen.usmAesCfb128Protocol elif v3_privProtocol_str == "usmAesCfb192Protocol": v3_privProtocol = cmdgen.usmAesCfb192Protocol elif v3_privProtocol_str == "usmAesCfb256Protocol": v3_privProtocol = cmdgen.usmAesCfb256Protocol elif v3_privProtocol_str == "usmNoPrivProtocol": v3_privProtocol = cmdgen.usmNoPrivProtocol else: v3_privProtocol = cmdgen.usmNoPrivProtocol #object names to poll object_names = config.get("object_names") if not object_names is None: oid_args = map(str, object_names.split(",")) #trim any whitespace using a list comprehension oid_args = [x.strip(' ') for x in oid_args] #GET BULK params do_subtree = int(config.get("do_get_subtree", 0)) do_bulk = int(config.get("do_bulk_get", 0)) split_bulk_output = int(config.get("split_bulk_output", 0)) non_repeaters = int(config.get("non_repeaters", 0)) max_repetitions = int(config.get("max_repetitions", 25)) #TRAP listener params listen_traps = int(config.get("listen_traps", 0)) #some backwards compatibility gymnastics if snmp_mode == 'traps': listen_traps = 1 trap_port = int(config.get("trap_port", 162)) trap_host = config.get("trap_host", "localhost") global trap_rdns trap_rdns = int(config.get("trap_rdns", 0)) #MIBs to load mib_names = config.get("mib_names") mib_names_args = None if not mib_names is None: mib_names_args = map(str, mib_names.split(",")) #trim any whitespace using a list comprehension mib_names_args = [x.strip(' ') for x in mib_names_args] #load in custom MIBS cmdGen = cmdgen.CommandGenerator() mibBuilder = cmdGen.snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder mibSources = (builder.DirMibSource(mib_egg_dir), ) for filename in os.listdir(mib_egg_dir): if filename.endswith(".egg"): mibSources = mibSources + (builder.ZipMibSource(filename), ) mibSources = mibBuilder.getMibSources() + mibSources mibBuilder.setMibSources(*mibSources) if mib_names_args: mibBuilder.loadModules(*mib_names_args) global mibView mibView = view.MibViewController(mibBuilder) if listen_traps: if snmp_version == "1" or snmp_version == "2C": trapThread = TrapThread(trap_port, trap_host, ipv6) trapThread.start() if snmp_version == "3": trapThread = V3TrapThread(trap_port, trap_host, ipv6, v3_securityName, v3_authKey, v3_authProtocol, v3_privKey, v3_privProtocol) trapThread.start() if not (object_names is None) and not (destination_list is None): mp_model_val = 1 for destination in destinations: if snmp_version == "1": mp_model_val = 0 if snmp_version == "3": security_object = cmdgen.UsmUserData( v3_securityName, authKey=v3_authKey, privKey=v3_privKey, authProtocol=v3_authProtocol, privProtocol=v3_privProtocol) else: security_object = cmdgen.CommunityData(communitystring, mpModel=mp_model_val) if ipv6: transport = cmdgen.Udp6TransportTarget((destination, port), timeout=timeout_val, retries=num_retries) else: transport = cmdgen.UdpTransportTarget((destination, port), timeout=timeout_val, retries=num_retries) apt = AttributePollerThread(cmdGen, destination, port, transport, snmp_version, do_bulk, do_subtree, security_object, snmpinterval, non_repeaters, max_repetitions, oid_args, split_bulk_output) apt.start()
def do_run(): config = get_input_config() #params snmp_mode = config.get("snmp_mode", "") destination = config.get("destination") port = int(config.get("port", 161)) snmpinterval = int(config.get("snmpinterval", 60)) ipv6 = int(config.get("ipv6", 0)) try: # update all the root StreamHandlers with a new formatter that includes the config information for h in logging.root.handlers: if isinstance(h, logging.StreamHandler): h.setFormatter( logging.Formatter( '%(levelname)s %(message)s snmp_stanza:{0} snmp_destination:{1} snmp_port:{2}' .format(config.get("name"), destination, port))) except: # catch *all* exceptions e = sys.exc_info()[1] logging.error("Couldn't update logging templates: %s host:'" % str(e)) response_handler_args = {} response_handler_args_str = config.get("response_handler_args") if not response_handler_args_str is None: response_handler_args = dict((k.strip(), v.strip()) for k, v in ( item.split('=') for item in response_handler_args_str.split(delimiter))) response_handler = config.get("response_handler", "DefaultResponseHandler") module = __import__("responsehandlers") class_ = getattr(module, response_handler) global RESPONSE_HANDLER_INSTANCE RESPONSE_HANDLER_INSTANCE = class_(**response_handler_args) #snmp 1 and 2C params snmp_version = config.get("snmp_version", "2C") communitystring = config.get("communitystring", "public") v3_securityName = config.get("v3_securityName", "") v3_authKey = config.get("v3_authKey", "") v3_privKey = config.get("v3_privKey", "") v3_authProtocol_str = config.get("v3_authProtocol", "usmHMACMD5AuthProtocol") v3_privProtocol_str = config.get("v3_privProtocol", "usmDESPrivProtocol") if v3_authProtocol_str == "usmHMACMD5AuthProtocol": v3_authProtocol = cmdgen.usmHMACMD5AuthProtocol elif v3_authProtocol_str == "usmHMACSHAAuthProtocol": v3_authProtocol = cmdgen.usmHMACSHAAuthProtocol elif v3_authProtocol_str == "usmNoAuthProtocol": v3_authProtocol = cmdgen.usmNoAuthProtocol else: v3_authProtocol = cmdgen.usmNoAuthProtocol if v3_privProtocol_str == "usmDESPrivProtocol": v3_privProtocol = cmdgen.usmDESPrivProtocol elif v3_privProtocol_str == "usm3DESEDEPrivProtocol": v3_privProtocol = cmdgen.usm3DESEDEPrivProtocol elif v3_privProtocol_str == "usmAesCfb128Protocol": v3_privProtocol = cmdgen.usmAesCfb128Protocol elif v3_privProtocol_str == "usmAesCfb192Protocol": v3_privProtocol = cmdgen.usmAesCfb192Protocol elif v3_privProtocol_str == "usmAesCfb256Protocol": v3_privProtocol = cmdgen.usmAesCfb256Protocol elif v3_privProtocol_str == "usmNoPrivProtocol": v3_privProtocol = cmdgen.usmNoPrivProtocol else: v3_privProtocol = cmdgen.usmNoPrivProtocol #object names to poll object_names = config.get("object_names") if not object_names is None: oid_args = map(str, object_names.split(",")) #trim any whitespace using a list comprehension oid_args = [x.strip(' ') for x in oid_args] #GET BULK params do_bulk = int(config.get("do_bulk_get", 0)) split_bulk_output = int(config.get("split_bulk_output", 0)) non_repeaters = int(config.get("non_repeaters", 0)) max_repetitions = int(config.get("max_repetitions", 25)) #TRAP listener params listen_traps = int(config.get("listen_traps", 0)) #some backwards compatibility gymnastics if snmp_mode == 'traps': listen_traps = 1 trap_port = int(config.get("trap_port", 162)) trap_host = config.get("trap_host", "localhost") #MIBs to load mib_names = config.get("mib_names") mib_names_args = None if not mib_names is None: mib_names_args = map(str, mib_names.split(",")) #trim any whitespace using a list comprehension mib_names_args = [x.strip(' ') for x in mib_names_args] #load in custom MIBS cmdGen = cmdgen.CommandGenerator() mibBuilder = cmdGen.snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder mibSources = (builder.DirMibSource(mib_egg_dir), ) for filename in os.listdir(mib_egg_dir): if filename.endswith(".egg"): mibSources = mibSources + (builder.ZipMibSource(filename), ) mibSources = mibBuilder.getMibSources() + mibSources mibBuilder.setMibSources(*mibSources) if mib_names_args: mibBuilder.loadModules(*mib_names_args) global mibView mibView = view.MibViewController(mibBuilder) if listen_traps: if snmp_version == "1" or snmp_version == "2C": trapThread = TrapThread(trap_port, trap_host, ipv6) trapThread.start() if snmp_version == "3": trapThread = V3TrapThread(trap_port, trap_host, ipv6, v3_securityName, v3_authKey, v3_authProtocol, v3_privKey, v3_privProtocol) trapThread.start() if not (object_names is None) and not (destination is None): try: if ipv6: transport = cmdgen.Udp6TransportTarget((destination, port)) else: transport = cmdgen.UdpTransportTarget((destination, port)) mp_model_val = 1 if snmp_version == "1": mp_model_val = 0 if snmp_version == "3": security_object = cmdgen.UsmUserData( v3_securityName, authKey=v3_authKey, privKey=v3_privKey, authProtocol=v3_authProtocol, privProtocol=v3_privProtocol) else: security_object = cmdgen.CommunityData(communitystring, mpModel=mp_model_val) while True: if do_bulk and not snmp_version == "1": try: errorIndication, errorStatus, errorIndex, varBindTable = cmdGen.bulkCmd( security_object, transport, non_repeaters, max_repetitions, *oid_args, lookupNames=True, lookupValues=True) except: # catch *all* exceptions e = sys.exc_info()[1] logging.error("Exception with bulkCmd to %s:%s: %s" % (destination, port, str(e))) time.sleep(float(snmpinterval)) continue else: try: errorIndication, errorStatus, errorIndex, varBinds = cmdGen.getCmd( security_object, transport, *oid_args, lookupNames=True, lookupValues=True) except: # catch *all* exceptions e = sys.exc_info()[1] logging.error("Exception with getCmd to %s:%s: %s" % (destination, port, str(e))) time.sleep(float(snmpinterval)) continue if errorIndication: logging.error(errorIndication) elif errorStatus: logging.error(errorStatus) else: if do_bulk: handle_output(varBindTable, destination, table=True, split_bulk_output=split_bulk_output) else: handle_output(varBinds, destination, table=False, split_bulk_output=split_bulk_output) time.sleep(float(snmpinterval)) except: # catch *all* exceptions e = sys.exc_info()[1] logging.error("Looks like an error: %s" % str(e)) sys.exit(1)