コード例 #1
0
    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()
コード例 #2
0
ファイル: snmpif.py プロジェクト: DaguoPY/snmpmod
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
コード例 #3
0
ファイル: mibview.py プロジェクト: tjtunnell/pysnmp-apps
 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()
コード例 #4
0
                    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'
)
コード例 #5
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()
コード例 #6
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)