示例#1
0
    def set_by_name(self, obj_name, value, idx=(0, )):
        """Does a SNMP SET request.

        See `Get` for more information on possible OID notations.

        Automatic converting to the SNMP type expected by the remote system is
        only supported for OIDs for which there is a MIB describing it. If you
        want to use an OID which is not described by a MIB, you'll have to use
        the `Set XXX`-keyword or `Convert To XXX`-keyword.

        The optional `idx` is appended to the OID (defaults to `.0`).

        Example:
        | Set | SNMPv2::sysDescr | New System Description |
        """

        if self._active_connection is None:
            raise RuntimeError('No transport host set')

        mibViewCtl = view.MibViewController(self._active_connection.builder)
        objIdentity = ObjectIdentity(self.DTM_MIB_LIB_NAME, obj_name)
        objIdentity.resolveWithMib(mibViewCtl)
        oid = '.' + str(objIdentity.getOid())

        idx = utils.parse_idx(idx)
        oid = utils.parse_oid(oid) + idx
        self._set((oid, value))
示例#2
0
    def get_oid_by_name(self, *names):
        """get oid from custom names.

        """
        if len(names):
            self._info('get_oid_by_name %s' % ' '.join(list(names)))
            mibViewCtl = view.MibViewController(
                self._active_connection.builder)
            objIdentity = ObjectIdentity(*names)
            objIdentity.resolveWithMib(mibViewCtl)
            return '.' + str(objIdentity.getOid())
示例#3
0
    def get_value_by_name2(self, idx, *names):
        """get value from custom names direcly.

        """
        if len(names):
            self._info('get_oid_by_name %s' % ' '.join(list(names)))
            mibViewCtl = view.MibViewController(
                self._active_connection.builder)
            objIdentity = ObjectIdentity(*names)
            objIdentity.resolveWithMib(mibViewCtl)
            oid = '.' + str(idx) + '.' + str(objIdentity.getOid())
            return self._get(oid)
示例#4
0
    def set_many_by_name(self, *name_value_pairs):
        """ Does a SNMP SET request with multiple values.

        Set one or more values simultaneously. See `Set` for more information
        about the OID and possible value. After each value, you can give an
        index (`idx`, see example below) which is appended to the OIDs. By
        default the index is `.0`.

        Examples:
        | Set Many | SNMPv2::sysDescr | New System Description | |
        | ...      | SNMPv2-MIB::sysName | New System Name | |
        | Set Many | IF-MIB::ifDescr | IF1 Description | idx=1 |
        | ...      | IF-MIB::ifDescr | IF2 Description | idx=2 |
        """

        if self._active_connection is None:
            raise RuntimeError('No transport host set')

        args = list(name_value_pairs)
        oid_values = list()
        try:
            while len(args):
                obj_name = args.pop(0)
                mibViewCtl = view.MibViewController(
                    self._active_connection.builder)
                objIdentity = ObjectIdentity(self.DTM_MIB_LIB_NAME, obj_name)
                objIdentity.resolveWithMib(mibViewCtl)
                oid = '.' + str(objIdentity.getOid())
                value = args.pop(0)
                possible_idx = args[0] if len(args) > 0 else ''
                if possible_idx.startswith('idx='):
                    idx = args.pop(0)[4:]
                else:
                    idx = (0, )
                idx = utils.parse_idx(idx)
                oid = utils.parse_oid(oid) + idx
                oid_values.append((oid, value))
        except IndexError:
            raise RuntimeError('Invalid Object Name/value(/index) format')
        if len(oid_values) < 1:
            raise RuntimeError(
                'You must specify at least one Object Name/value pair')

        self._set(*oid_values)
示例#5
0
    def get_by_name(self, obj_name, idx=(0, )):
        """Does a SNMP GET request for the specified 'obj_name'.

        The optional `idx` can be specified as tuple or as a string and
        defaults to `.0`.

        Examples:
        | ${value}=  | Get | SNMPv2-MIB::sysDescr | |
        | ${value}=  | Get | .1.3.6.1.2.1.1.1 | |
        | ${value}=  | Get | .iso.org.6.internet.2.1.1.1 | |
        | ${value}=  | Get | sysDescr | |
        | ${value}=  | Get | ifDescr | 2 |
        """
        mibViewCtl = view.MibViewController(self._active_connection.builder)
        objIdentity = ObjectIdentity(self.DTM_MIB_LIB_NAME, obj_name)
        objIdentity.resolveWithMib(mibViewCtl)
        oid = '.' + str(objIdentity.getOid())

        return self._get(oid, idx)
示例#6
0
    config.addSocketTransport(snmpEngine, udp.domainName,
                              udp.UdpSocketTransport().openClientMode())
    config.addTargetAddr(snmpEngine, 'tgt', udp.domainName, agentUDPv4Endpoint,
                         'pms', timeout, retryCount)
    log.info('Querying UDP/IPv4 agent at %s:%s' % agentUDPv4Endpoint)

log.info('Agent response timeout: %.2f secs, retries: %s' %
         (timeout / 100, retryCount))

if (isinstance(startOID, ObjectIdentity)
        or isinstance(stopOID, ObjectIdentity)):
    compiler.addMibCompiler(snmpEngine.getMibBuilder(),
                            sources=mibSources or defaultMibSources)
    mibViewController = view.MibViewController(snmpEngine.getMibBuilder())
    if isinstance(startOID, ObjectIdentity):
        startOID.resolveWithMib(mibViewController)
    if isinstance(stopOID, ObjectIdentity):
        stopOID.resolveWithMib(mibViewController)

# Variation module initialization

if variationModule:
    log.info('Initializing variation module...')
    for x in ('init', 'record', 'shutdown'):
        if x not in variationModule:
            log.error('missing "%s" handler at variation module "%s"' %
                      (x, variationModuleName))
            sys.exit(-1)
    try:
        variationModule['init'](snmpEngine=snmpEngine,
                                options=variationModuleOptions,
示例#7
0
    'SNMPv2-SMI',
    'MibScalar',
    'MibTable',
    'MibTableRow',
    'MibTableColumn'
)

mibViewController = view.MibViewController(mibBuilder)

compiler.addMibCompiler(
    mibBuilder, sources=mibSources or defaultMibSources
)

try:
    if isinstance(startOID, ObjectIdentity):
        startOID.resolveWithMib(mibViewController)

    if isinstance(stopOID, ObjectIdentity):
        stopOID.resolveWithMib(mibViewController)

except error.PySnmpError:
    sys.stderr.write('ERROR: %s\r\n' % sys.exc_info()[1])
    sys.exit(-1)

output = []

# MIBs walk
for modName in modNames:
    if verboseFlag:
        sys.stderr.write(
            '# MIB module: %s, from %s till '
class SnmpResponse(object):
    def __init__(self, oid, value, snmp_engine, logger):
        self._raw_oid = oid
        self._snmp_mib_translator = CommandGeneratorVarBinds.getMibViewController(
            snmp_engine)
        self._logger = logger
        self._mib_id = None
        self._mib_name = None
        self._index = None
        self._raw_value = value
        self._object_id = ObjectIdentity(self._raw_oid)
        self._object_type = ObjectType(self._object_id, self._raw_value)

    @property
    def _object_identity(self):
        if not self._object_id.isFullyResolved():
            self._object_id.resolveWithMib(self._snmp_mib_translator)
        return self._object_id

    @property
    def object_type(self):
        if not self._object_type.isFullyResolved():
            self._object_type.resolveWithMib(self._snmp_mib_translator)
        return self._object_type

    @property
    def raw_value(self):
        return self._raw_value

    @property
    def oid(self):
        return self._object_identity.getOid()

    @property
    def mib_name(self):
        if not self._mib_name:
            self._get_oid()
        return self._mib_name

    @property
    def mib_id(self):
        if not self._mib_id:
            self._get_oid()
        return self._mib_id

    @property
    def index(self):
        if not self._index:
            self._get_oid()
        return self._index

    @property
    def safe_value(self):
        result = ""
        try:
            result = self.value or ""
        except TranslateSNMPException:
            pass

        return result

    @property
    def value(self):
        try:
            if self._raw_value is None or not self.object_type:
                return
            if hasattr(self.object_type[1], "prettyPrint"):
                value = self.object_type[1].prettyPrint()
            else:
                value = str(self.object_type[1])
            if value.lower().startswith("0x"):
                value = str(self._raw_value)
            return value
        except (PySnmpError, SmiError):
            raise TranslateSNMPException("Error parsing snmp response")

    def _get_oid(self):
        oid = self._object_identity.getMibSymbol()
        self._mib_name = oid[0]
        self._mib_id = oid[1]
        if isinstance(oid[-1], tuple):
            self._index = ".".join(map(lambda x: x.prettyPrint(), oid[-1]))

    def __str__(self):
        return self.safe_value

    def __repr__(self):
        return self.__str__()