Example #1
0
def do_validate():
    try:
        config = get_input_config()

        port = config.get("port")
        trap_port = config.get("trap_port")
        snmpinterval = config.get("snmpinterval")
        max_repetitions = config.get("max_repetitions")
        non_repeaters = config.get("non_repeaters")

        validation_failed = False

        if not port is None and int(port) < 1:
            print_validation_error("Port value must be a positive integer")
            validation_failed = True
        if not trap_port is None and int(trap_port) < 1:
            print_validation_error("Trap port value must be a positive integer")
            validation_failed = True
        if not non_repeaters is None and int(non_repeaters) < 0:
            print_validation_error("Non Repeaters value must be zero or a positive integer")
            validation_failed = True
        if not max_repetitions is None and int(max_repetitions) < 0:
            print_validation_error("Max Repetitions value must be zero or a positive integer")
            validation_failed = True
        if not snmpinterval is None and int(snmpinterval) < 1:
            print_validation_error("SNMP Polling interval must be a positive integer")
            validation_failed = True
        if validation_failed:
            sys.exit(2)

    except:  # catch *all* exceptions
        e = sys.exc_info()[1]
        logging.error("Exception getting config: %s" % str(e))
        sys.exit(1)
def do_run():
    
    config = get_input_config() 
    #params
    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))
    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 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)
Example #3
0
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() 
    
    activation_key = config.get("activation_key").strip()
    app_name = "SNMP Modular Input"
    
    if len(activation_key) > 32:
        activation_hash = activation_key[:32]
        activation_ts = activation_key[32:][::-1]
        current_ts = time.time()
        m = hashlib.md5()
        m.update((app_name + activation_ts))
        if not m.hexdigest().upper() == activation_hash.upper():
            logging.error("FATAL Trial Activation key for App '%s' failed. Please ensure that you copy/pasted the key correctly." % app_name)
            sys.exit(2)
        if ((current_ts - long(activation_ts)) > 604800):
            logging.error("FATAL Trial Activation key for App '%s' has now expired. Please visit http://www.baboonbones.com/#activation to purchase a non expiring key." % app_name)
            sys.exit(2)
    else:
        m = hashlib.md5()
        m.update((app_name))
        if not m.hexdigest().upper() == activation_key.upper():
            logging.error("FATAL Activation key for App '%s' failed. Please ensure that you copy/pasted the key correctly." % 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()        
Example #5
0
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)