def RebootOutlet(self, command):
        if "Option" in command:
            #isinstance(command["Option"],( int, long )):
            if command["Option"].isdigit():
                id = int(command["Option"])

                #get number of outputs
                snmpDevice = lib_SNMP.SNMPv2(self.ipaddr)
                outletCount = snmpDevice.readSNMP(
                    self.getDataDict['OutletCount'])

                if outletCount is not None:
                    outletCount = int(outletCount)

                if id > 0 and id <= outletCount:
                    self.log.printInfo("Rebooting outlet %s" % id)
                    #outletControlAction 1.3.6.1.4.1.1718.3.2.3.1.11.1.1.1-8
                    # readWrite ! - 0 none, 1 on, 2 off, 3 reboot
                    oid = netsnmp.Varbind(
                        '.1.3.6.1.4.1.13742.6.4.1.2.1.2.1.' + str(id), '', '2',
                        'INTEGER')
                    netsnmp.snmpset(oid,
                                    Version=2,
                                    DestHost=self.ipaddr,
                                    Community='RadioHolland')

                    return False
            else:
                self.log.printWarning("Given outlet was not a number")
                return True
        else:
            self.log.printWarning("No outlet-number was given")
            return True
Пример #2
0
    def down_iff(self, id_iff):
        sw.down_iff(self, id_iff)

        var = netsnmp.Varbind('.1.3.6.1.4.1',
                              '8691.7.19.1.9.1.1.3.%s' % id_iff, '0',
                              'INTEGER')
        netsnmp.snmpset(var,
                        Version=2,
                        Community=self.snmp_rw_pass,
                        DestHost=self.ip)
    def power_cycle_port(self, port):
        """
        Issues a power_cycle via SNMPSET to a specified PORT.
        """
        if not self.hostname:
            raise PduHostnameError("A hostname does not exist for the entity: %s in Jinx..." % self.name)

        port_oid = '318.1.1.4.4.2.1.3.%s' % port 
        oid = netsnmp.Varbind('.1.3.6.1.4.1', port_oid, '3', 'INTEGER')
        netsnmp.snmpset(oid, Version = 1, DestHost=self.hostname, Community='private')
        return "port: %s power cycled..." % port 
    def power_cycle_port(self, port):
        """
        Issues a power_cycle via SNMPSET to a specified PORT.
        """
        if not self.hostname:
            raise PduHostnameError(
                "A hostname does not exist for the entity: %s in Jinx..." %
                self.name)

        port_oid = '318.1.1.4.4.2.1.3.%s' % port
        oid = netsnmp.Varbind('.1.3.6.1.4.1', port_oid, '3', 'INTEGER')
        netsnmp.snmpset(oid,
                        Version=1,
                        DestHost=self.hostname,
                        Community='private')
        return "port: %s power cycled..." % port
Пример #5
0
	    def run(self):
		for id_ in self.ids4thr:
		    devline = self.devices[id_]
		    ip = devline['ip']
		    snmp_comm_this_device = snmp_wcomm
		    # Если community для устройства задано явно - переопределяем переменную
		    if devline['wcomm'] != '': snmp_comm_this_device = devline['wcomm']
		    device_model = devline['mname']
		    if device_model in oids_set:
			query = 'skipped'
			for paramname in sorted(oids_set[device_model].keys()):
			    start_time = time.time()
			    if paramname in self.WorkMetricsListS:
				current_snmp_retries = snmp_retries
				if paramname in no_retries:
				    current_snmp_retries = 0
				varlist = netsnmp.VarList(*[netsnmp.Varbind(*VarBindItem) for VarBindItem in oids_set[device_model][paramname]])
				query   = netsnmp.snmpset(*varlist, Version = 2, DestHost = ip, Community = snmp_comm_this_device, Timeout = snmp_timeout, Retries = current_snmp_retries, UseNumeric = 1)
				time.sleep(set_iter_delay)
			    # Время, затраченное на опрос
			    query_time = int((time.time()-start_time)*1000)
			    devline['time'] += query_time
			    devline['set_res'][paramname] = query
		    devline['set_timestamp'] = int(time.time())
		    self.devices[id_] = devline
Пример #6
0
 def set_snmp(self, host_address, values):
     values = [values] if type(values) == netsnmp.Varbind else values
     result = netsnmp.snmpset(*values,
                              Version=SNMP_VERSION,
                              DestHost=host_address,
                              Community=SNMP_SET_COMMUNITY)
     return bool(result)
Пример #7
0
def SnmpSet(ip, model, info):  # TODO:继续完善
    if info == "reboot" and model.find("S") == 0:
        oid = S2700_reboot
    elif info == "reboot" and model.find("E") == 0:
        oid = H3C_reboot
    else:
        oid = S2700_reboot

    if SNMP_MODE == "lib":
        netsnmp.snmpset(
            ['.' + oid, 0, 1],
            DestHost=ip,
            Version=2,
            Community=SNMP_WRITE_COMMUNITY,
            Timeout=500000)  # 此句有BUG:TypeError: expected string or buffer
    elif SNMP_MODE == "bin":
        type = 'i'
        value = "3"
        try:
            a = subprocess.Popen([
                SNMP_SET_BIN_PATH, "-O", "qv", "-t", "1", "-r", "3", "-v",
                "2c", "-c", SNMP_WRITE_COMMUNITY, ip, oid, type, value
            ],
                                 bufsize=0,
                                 shell=False,
                                 stdin=subprocess.PIPE,
                                 stdout=subprocess.PIPE,
                                 stderr=subprocess.PIPE)
            b = a.stdout.read().decode('utf-8').strip('\n')
            # 下面清空流,防止爆内存,参考http://blog.csdn.net/pugongying1988/article/details/54616797 似乎没用,TODO:没问题就注释掉
            if a.stdin:
                a.stdin.close()
            if a.stdout:
                a.stdout.close()
            if a.stderr:
                a.stderr.close()
            try:
                a.kill()
            except OSError:
                pass
            # 下面返回数据
            if b == "": return "获取失败"
            if b.find("No Such Object") >= 0: return "设备不支持"
            b = list(map(lambda x: x.strip("\""), b.split("\n")))
            return b
        except:
            return "设置失败"
Пример #8
0
    def testFunc(self):
        """HexStringSet"""
        session = setup_v2()

        varlist = netsnmp.VarList(netsnmp.Varbind('.1.3.6.1.6.3.10.2.1.1.0'))
        session.get(varlist)
        print("varlist length =", len(varlist))
        for var in varlist:
            print(var)
        self.assertEqual(varlist[0].iid, '0')
        res = netsnmp.snmpset(var, **snmp_dest())
        print("first SNMP set result:", res)
        self.assertEqual(res, 0)
        var.val = ""
        res = netsnmp.snmpset(var, **snmp_dest())
        print("second SNMP set result:", res)
        self.assertEqual(res, 0)
Пример #9
0
 def _perform_cmd(self, action, outlet):
     cmd = netsnmp.Varbind(PDU.CMD % (outlet), val=action, type="INTEGER")
     result = netsnmp.snmpset(cmd,
                              Version=1,
                              DestHost=self._ip,
                              Community="private")
     if (PDU.SUCCESS_CODE != result):
         raise DeviceError(self.id)
 def testsnmpsetfrucontrol(self):
     '''snmp set frucontrol'''
     var = netsnmp.Varbind('.1.3.6.1.4.1.2011.2.235.1.1.7.50.1.2', '1', '1')
     res = netsnmp.snmpset(var,
                           Version=self.snmpver,
                           DestHost=self.ipstr,
                           Community=self.community)
     print res
     self.assertEqual(0, res)
Пример #11
0
 def testsnmpsetbootsequence(self):
     '''snmp set bootsequence'''
     var = netsnmp.Varbind('.1.3.6.1.4.1.2011.2.235.1.1.1.2.0', '1')
     res = netsnmp.snmpset(var,
                           Version=self.snmpver,
                           DestHost=self.ipstr,
                           Community=self.community)
     print res
     self.assertEqual(0, res)
Пример #12
0
 def testsnmpset(self):
     '''snmp set test'''
     var = netsnmp.Varbind('.1.3.6.1.2.1.1.6', '0', 'zenoss')
     res = netsnmp.snmpset(var,
                           Version=self.snmpver,
                           DestHost=self.ipstr,
                           Community=self.community)
     print res
     self.assertEqual(0, res)
Пример #13
0
def SnmpSet(ip, model, info):  # TODO:继续完善
    if info == "reboot" and model.find("S") == 0:
        oid = S2700_reboot
    elif info == "reboot" and model.find("E") == 0:
        oid = H3C_reboot
    else:
        oid = S2700_reboot

    if SNMP_MODE == "lib":
        netsnmp.snmpset(['.' + oid, 0, 1], DestHost=ip, Version=2, Community=SNMP_WRITE_COMMUNITY,
                        Timeout=500000)  # 此句有BUG:TypeError: expected string or buffer
    elif SNMP_MODE == "bin":
        type = 'i'
        value = "3"
        try:
            a = subprocess.Popen(
                [SNMP_SET_BIN_PATH, "-O", "qv", "-t", "1", "-r", "3", "-v", "2c", "-c", SNMP_WRITE_COMMUNITY, ip, oid,
                 type, value], bufsize=0, shell=False, stdin=subprocess.PIPE, stdout=subprocess.PIPE,
                stderr=subprocess.PIPE)
            b = a.stdout.read().decode('utf-8').strip('\n')
            # 下面清空流,防止爆内存,参考http://blog.csdn.net/pugongying1988/article/details/54616797 似乎没用,TODO:没问题就注释掉
            if a.stdin:
                a.stdin.close()
            if a.stdout:
                a.stdout.close()
            if a.stderr:
                a.stderr.close()
            try:
                a.kill()
            except OSError:
                pass
            # 下面返回数据
            if b == "": return "获取失败"
            if b.find("No Such Object") >= 0: return "设备不支持"
            b = list(map(lambda x: x.strip("\""), b.split("\n")))
            return b
        except:
            return "设置失败"
Пример #14
0
    def test_v1_set(self):
        print "\n"
        print "---v1 SET tests-------------------------------------\n"
        var = netsnmp.Varbind('sysLocation', '0', 'my new location')
        res = netsnmp.snmpset(var, **snmp_dest())

        print "v1 snmpset result: ", res, "\n"
        self.assertEqual(res, 1)

        print "v1 set var: ", var.tag, var.iid, "=", var.val, '(', var.type, ')'
        self.assertEqual(var.tag, 'sysLocation')
        self.assertEqual(var.iid, '0')
        self.assertEqual(var.val, 'my new location')
        self.assertTrue(var.type is None)
Пример #15
0
 def _set_oid(self,snmp_agent,oid):
     try:
         return netsnmp.snmpset(oid,DestHost=snmp_agent,
             Version=3,
             Retries=int(self.ops['retries']),
             SecLevel=self.ops['seclevel'],
             AuthProto=self.ops['authproto'],
             AuthPass=self.ops['authpass'],
             PrivProto=self.ops['privproto'],
             PrivPass=self.ops['privpass'],
             SecName=self.ops['secname'])
     except Exception as e :
         print e
         raise e
Пример #16
0
    def test_v1_set(self):
        print "\n"
        print "---v1 SET tests-------------------------------------\n"
        var = netsnmp.Varbind('sysLocation', '0', 'my new location')
        res = netsnmp.snmpset(var, **snmp_dest())

        print "v1 snmpset result: ", res, "\n"
        self.assertEqual(res, 1)

        print "v1 set var: ", var.tag, var.iid, "=", var.val, '(', var.type, ')'
        self.assertEqual(var.tag, 'sysLocation')
        self.assertEqual(var.iid, '0')
        self.assertEqual(var.val, 'my new location')
        self.assertTrue(var.type is None)
Пример #17
0
    def test_v1_set(self):
        print("\n")
        print("---v1 SET tests-------------------------------------\n")
        # snmpset fails for the 'sysLocation' variable, 
        # as the syslocation token is configured in the
        # snmpd.conf file, which disables write access
        # to the variable.
        # Hence using the 'sysName' variable for the set tests.
        var = netsnmp.Varbind('sysName', '0', 'my new name')
        res = netsnmp.snmpset(var, **snmp_dest())

        print("v1 snmpset result: ", res, "\n")
        self.assertEqual(res, 1)

        print("v1 set var: ", var.tag, var.iid, "=", var.val, '(', var.type, ')')
        self.assertEqual(var.tag, 'sysName')
        self.assertEqual(var.iid, '0')
        self.assertEqual(var.val, 'my new name')
        self.assertTrue(var.type is None)
Пример #18
0
    def SetPower(self, unit, outlet, state):
        """
         @brief: This function changes the state of the specified outlet. 

         @param outlet: The ID-number of the outlet which will be switched on/off.
         @param state: The state to which to outlet will be switched.
      """

        if unit == "nasmyth": dest_host = pdu_config.DestHost_nasmyth
        elif unit == "container": dest_host = pdu_config.DestHost_container
        elif unit == "side_ports": dest_host = pdu_config.DestHost_side_ports
        elif unit == "nasmyth_2": dest_host = pdu_config.DestHost_nasmyth_2
        else: print "Error, wrong unit provided!"

        clock = song_timeclass.TimeClass()

        OID = ".1.3.6.1.4.1.318.1.1.4.4.2.1.3.%i" % int(
            outlet
        )  # .1.3.6.1.4.1.318 defines that the connection is to a APC device.
        # the .1.1.4.4.2.1.3 is defining that changes is made to the power outlet.
        # %i % int(outlet) is the outlet number which will be chanced.
        var = netsnmp.Varbind(".1.3.6.1.4.1.318.1.1.4.4.2.1.3.%i" %
                              int(outlet))
        res = netsnmp.snmpget(var,
                              Version=1,
                              DestHost=dest_host,
                              Community=pdu_config.Community)

        var.tag = OID
        var.val = int(
            state)  # The value of the outlet is set to the given state.

        setpower = ""
        try:
            setpower = netsnmp.snmpset(
                var,
                Version=1,
                DestHost=dest_host,
                Community=pdu_config.Community
            )  # Here the outlet, number int(outlet), is chanced to int(state
        except Exception, e:
            sys.exit("ERROR, connection to PDU could not be made!")
Пример #19
0
def button_release_event(widget, event):
    global wire_prop, trace_l2, node_tr, o, n
    fin = near((event.x, event.y))
    w = widget.allocation.width
    h = widget.allocation.height
    nv = int((w - 201) / 100)
    nh = int((h - 99) / 100)
    if fin[0] <100*10 and fin[0] > 50 and fin[1] < h-49 and fin[1] > 50:
        if event.button == 1 and cr is not None:
            if inicio == fin:
                if not nodolist.run and not any(x.pos == inicio for x in nodolist):
                    nodolist.append(NodoClass(inicio))
                    nodolist.set_cur_pos(inicio)
            elif any(x.pos == inicio for x in nodolist) and any(x.pos == fin for x in nodolist):
                if nodolist.run and trace_l2:
                    for x in nodolist:
                        if x.pos == fin:
                            trace_fin_mac = str(x.bat0.mac)
                        if x.pos == inicio:
                            trace_nicio_ip = str(x.eth0.ip)
                            pos_ini = str(x)
                    l = []
                    mibr = netsnmp.Varbind('iso', '3.6.1.4.1.32.1.4', trace_fin_mac, 'OCTETSTR')
                    orig = netsnmp.snmpset(mibr, Version=2, DestHost=trace_nicio_ip, Community='private', Timeout=10000000, Retries=1)
                    mibr = netsnmp.Varbind('iso.3.6.1.4.1.32.1.4')
                    orig = netsnmp.snmpget(mibr, Version=2, DestHost=trace_nicio_ip, Community='private', Timeout=1000000, Retries=1)
                    for i in str(orig[0]).split():
                        l.append(i.split(':')[-1:])
                    node_tr = reduce(lambda x, y: x + y, l)
                    node_tr.insert(0, pos_ini)
                else:
                    link_color24.current_wire = [(inicio, fin), (fin, inicio)]
                    link_color50.current_wire = [(inicio, fin), (fin, inicio)]
                    if wire_prop['ch'] == '24GHz':
                        if (not any(x.sd in link_color24.current_wire for x in link_color24)):
                            link_color24.append(WireClass(inicio, fin, wire_prop))
                            if nodolist.run:
                                link_color24.start()
                                link_color50.start()
                    if wire_prop['ch'] == '50GHz':
                        if (not any(x.sd in link_color50.current_wire for x in link_color50)):
                            link_color50.append(WireClass(inicio, fin, wire_prop))
                            if nodolist.run:
                                link_color24.start()
                                link_color50.start()
        if event.button == 2 and cr is not None:
            if inicio == fin:
                if any(x.pos == inicio for x in nodolist):
                    nodolist.set_cur_pos(inicio)
                    if nodolist.run:
                        for x in nodolist:
                            if x.pos == fin:
                                o, n = x.get_originators_nexthop()
            else:
                link_color24.current_wire = [(inicio, fin), (fin, inicio)]
                if wire_prop['ch'] == '24GHz':
                    if any(x.pos in [inicio, fin] for x in nodolist):
                        if any(x.sd in link_color24.current_wire for x in link_color24):
                            for x in link_color24:
                                if x.ds in link_color24.current_wire:
                                    wire_prop = x.prop
                link_color50.current_wire = [(inicio, fin), (fin, inicio)]
                if wire_prop['ch'] == '50GHz':
                    if any(x.pos in [inicio, fin] for x in nodolist):
                        if any(x.sd in link_color50.current_wire for x in link_color50):
                            for x in link_color50:
                                if x.ds in link_color50.current_wire:
                                    wire_prop = x.prop

        elif event.button == 3 and cr is not None:
            if inicio == fin:
                if not nodolist.run:
                    if any(x.pos == inicio for x in nodolist):
                        for x in nodolist:
                            if x.pos == inicio:
                                nid = nodolist.index(x)
                                i = nodolist.pop(nid)
            elif any(x.pos == inicio for x in nodolist) and any(x.pos == fin for x in nodolist):
                if wire_prop['ch'] == '24GHz':
                    for x in link_color24:
                        if x.sd in [(inicio, fin), (fin, inicio)]:
                            lid = link_color24.index(x)
                            i = link_color24.pop(lid)
                if wire_prop['ch'] == '50GHz':
                    for x in link_color50:
                        if x.sd in [(inicio, fin), (fin, inicio)]:
                            lid = link_color50.index(x)
                            i = link_color50.pop(lid)

        dibujar(widget)
    return True
def worker(cablediag_queue, result_queue):
    for host in iter(cablediag_queue.get, 'STOP'):
        # print 'Start check ', host['ip_addr']
        if_oper_status = netsnmp.snmpgetbulk(0, 24,
                                             netsnmp.Varbind(IF_TABLE_OID, 8),
                                             Version=2,
                                             Community=COMMUNITY,
                                             DestHost=host['ip_addr'])
        if len(if_oper_status) != 24:
            result_queue.put(host)
            continue

        # run cablediag on 'down' ports
        for port in range(24):
            if if_oper_status[port] == '2' or int(host['pair1len'][port]) == 0:
                netsnmp.snmpset(
                    netsnmp.Varbind(CABLEDIAG_OID, '12.%d' %
                                    (port + 1), 1, 'INTEGER'),
                    Version=2,
                    Community=COMMUNITY,
                    DestHost=host['ip_addr'])

# 1 - Port UP
# 2 - Port DOWN

        pair1status = netsnmp.snmpgetbulk(0, 24,
                                          netsnmp.Varbind(CABLEDIAG_OID, 4),
                                          Version=2,
                                          Community=COMMUNITY,
                                          DestHost=host['ip_addr'])

# 0 - Pair OPEN
# 1 - Pair OK

        pair1len = netsnmp.snmpgetbulk(0, 24,
                                       netsnmp.Varbind(CABLEDIAG_OID, 8),
                                       Version=2,
                                       Community=COMMUNITY,
                                       DestHost=host['ip_addr'])

        if len(pair1status) != 24 or len(pair1len) != 24:
            result_queue.put(host)
            continue

        # check if cable length is changed
        cable_deltas = {}
        for port in range(24):
            if (if_oper_status[port] == '2' and pair1status[port] in ['1', '2', '3']):
                cable_delta = int(host['pair1len'][port]) - int(pair1len[port])
                if cable_delta > LEN_DELTA and int(pair1len[port]) > 0:
                    cable_deltas[port + 1] = cable_delta

        if len(cable_deltas) >= MIN_PORTS:
            ssh = paramiko.SSHClient()
            ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
            ssh.connect("192.168.0.1", username="******",
                        password="******")
            stdin, stdout, stderr = ssh.exec_command(
                "/usr/local/bin/call.py %s" % host['ip_addr'])
            notify(host['ip_addr'], cable_deltas)'

        # put new data
        host['pair1status'] = pair1status
        host['pair1len'] = pair1len
        result_queue.put(host)
Пример #21
0
 def testsnmpsetbladebiosoption(self):
     '''snmp set bladebiosoption'''
     var = netsnmp.Varbind('.1.3.6.1.4.1.2011.2.82.1.82.4.32.32', '0', '1')
     res = netsnmp.snmpset(var)
     print res
     self.assertEqual(0, res)
Пример #22
0
def set_plug(index, status):
    message = netsnmp.Varbind('.1.3.6.1.4.1.318.1.1.12.3.3.1.1.4.{0}'.format(index),
                              val = 1 if status else 2, type = 'int')
    netsnmp.snmpset(message, Version = 1,
                    Community = pdu_community,
                    DestHost = pdu_hostname)
Пример #23
0
    def run(self):
        # Задаем структуру словаря, который будет добавляться в общий словарь ответов
        json_resp = {
            'target': '',
            'sys_descr': '',
            'sys_uptime': '',
            'sys_name': '',
            'sys_location': '',
            'model': '',
            'query_time': '',
            'data': {}
        }
        # Получаем IP адрес устройства
        target_ip = self.requests[self.client_ip][self.client_port]['target']
        # Получаем список параметров (данные) для устройства
        data_params = self.requests[self.client_ip][self.client_port]['data']
        # Получаем SNMP-Community для устройства
        snmp_comm = self.users[self.requests[self.client_ip][self.client_port]
                               ['user']][self.requests[self.client_ip][
                                   self.client_port]['comm_index']]
        # Формируем структуру varlist/varbind из параметров, перечисленных в default_info
        snmp_var = netsnmp.VarList(*[
            netsnmp.Varbind(default_info[def_param])
            for def_param in default_info
        ])
        # Фиксируем текущее время
        start_time = time.time()
        # Выполняем опрос устройства
        snmp_query = netsnmp.snmpget(*snmp_var,
                                     Version=2,
                                     DestHost=target_ip,
                                     Community=snmp_comm,
                                     Timeout=snmp_timeout,
                                     Retries=snmp_retries,
                                     UseNumeric=1)
        # Время, затраченное на опрос
        snmp_query_time = str(int((time.time() - start_time) * 1000))
        # Заполняем словарь данными
        json_resp['target'] = self.requests[self.client_ip][
            self.client_port]['target']
        # Помещаем в словарь результаты опроса параметров из default_info
        for def_param_index, def_param in enumerate(default_info):
            json_resp[def_param] = snmp_query[def_param_index]
        # Определяем модель по вхождению подстроки в значения sysDescr и sysName
        # Проверка идет до первого соответствия. Сначала проверяется sysName
        model = 'None'
        for item in models_by_desc:
            for desc_model in item:
                if json_resp['sys_name'] is not None:
                    if desc_model in json_resp['sys_name']:
                        model = item[desc_model]
                if json_resp['sys_descr'] is not None:
                    if desc_model in json_resp['sys_descr']:
                        model = item[desc_model]
            if model != 'None':
                break
        json_resp['model'] = model
        json_resp['query_time'] = snmp_query_time

        # Если в списке команд (методов) есть зарезервированная команда (метод), то выполняем опрос оборудования даже если оно недоступно
        forced = False
        for data_param in data_params:
            if len(set(data_param.values()) & set(forced_mtd)) > 0:
                forced = True

        # Работаем, если устройство доступно (определили модель) или выставлен флаг 'forced'
        if model != 'None' or forced:
            # Пробуем импортировать модуль, описывающий методы для данной модели
            try:
                device = __import__(model)
                reload(device)
            except:
                logging.info("WARNING: Can't import module '%s' for '%s'!",
                             model, target_ip)
            else:
                # Пробуем получить из модуля множитель 'timeout_mf' и применить его. При неудаче используем таймаут из файла конфигурации сервиса
                try:
                    timeout_mf = getattr(device, 'timeout_mf')
                    current_snmp_timeout = int(snmp_timeout * timeout_mf)
                except:
                    current_snmp_timeout = snmp_timeout
                # data_params - все, что содержится в ключе 'data' из запроса ('request'). Представлен в виде списка
                # data_param - конкретный элемент списка, содержащий параметры конкретного запроса. Представлен в виде словаря. В debug-лог пишется как 'URL Params'.
                # "data": [{"1": "2", "0": "swL2PortCtrlAdminState"}, {"0": ""}]
                # dataset - словарь вида {'Metric':'OID'}, список списков вида [['tag', 'iid', 'value', 'type']] или->
                # ->кортеж со словарем внутри ({'2':'enable'},) из файла с таким же именем, как имя модели устройства (model)
                for data_param in data_params:
                    if '0' in data_param:
                        # Пробуем извлечь параметр (метод) из файла модуля
                        try:
                            dataset = getattr(device, data_param['0'])
                        except:
                            if data_param['0'] == 'list':
                                #				logging.info("INFO: Requested 'list' command from client %s:%s.", self.client_ip, self.client_port)
                                json_resp['data']['list'] = [
                                    str(d) for d in dir(device) if d[0] != '_'
                                ]
                            else:
                                logging.info(
                                    "WARNING: Can't find param '%s' from module '%s'!",
                                    data_param['0'], model)
                        else:
                            # Для режима отладки пишем в лог кто и что у нас запросил
                            if debug_mode:
                                logging.info(
                                    "DEBUG: Request from %s:%s. Dataset: '%s', URL Params: %s",
                                    self.client_ip, self.client_port,
                                    str(dataset), str(data_param))
                            current_snmp_retries = snmp_retries
                            # Если параметр находится в списке 'no_retries', сбрасываем для него число дополнительных попыток в 0
                            if data_param['0'] in no_retries:
                                current_snmp_retries = 0
                            # dataset может быть как словарем (для get/walk) так и списком (для set) и кортежем (для неизменяемых пользовательских данных). Обрабатываем эти случаи отдельно
                            if isinstance(dataset, dict):
                                get_notwalk = False
                                for paramname in dataset.keys():
                                    if '.' in paramname:
                                        get_notwalk = True
                                big_bada_boom = False
                                snmp_var = netsnmp.VarList(*[
                                    netsnmp.Varbind(
                                        prepare_oid(data_param.copy(),
                                                    dataset[paramname]))
                                    for paramname in dataset.keys()
                                ])
                                # Формируем структуру varlist/varbind в зависимости о метода запроса (get или walk)
                                if get_notwalk:
                                    snmp_query = netsnmp.snmpget(
                                        *snmp_var,
                                        Version=2,
                                        DestHost=target_ip,
                                        Community=snmp_comm,
                                        Timeout=current_snmp_timeout,
                                        Retries=current_snmp_retries,
                                        UseNumeric=1)
                                else:
                                    snmp_query = netsnmp.snmpwalk(
                                        snmp_var,
                                        Version=2,
                                        DestHost=target_ip,
                                        Community=snmp_comm,
                                        Timeout=current_snmp_timeout,
                                        Retries=current_snmp_retries,
                                        UseNumeric=1)
                                # ВНИМАНИЕ! Это обход бага. _Если в конфиге (модуле) задать OID задать без точки в самом начале_, то при формировании varlist/varbind может возникнуть проблема
                                # Заключается она в том, что нельзя перебрать snmp_var, хотя по формальным признакам для этого нет препятствий
                                # Плюс попутно возникают другие странности, например logging.info выбрасывает исключение
                                # Отладка результатов не дала, похоже что это именно БАГ
                                # Если задавать все OID, начинающиеся с точки, то все работает хорошо
                                try:
                                    for var_ in snmp_var:
                                        pass
                                except:
                                    big_bada_boom = True
                                if not big_bada_boom:
                                    for var_ in snmp_var:
                                        # Убеждаемся, что ответ распознан, т.е. не None
                                        if ((var_.tag is not None) &
                                            (var_.iid is not None)):
                                            # Получаем полный OID. В ответе он разбит на части, находящиеся в tag и iid, которые мы склеиваем вместе
                                            full_oid = var_.tag + '.' + var_.iid
                                            # Здесь k - имя параметра, по которому получим значение, а prep_k - имя ключа в 'data'
                                            # В случае walk-запроса значения k и prep_k равны, а в случае get имя prep_k обрезается до первой точки, не включая ее
                                            for k in dataset:
                                                # Если используем метод get, то получаем имя ключа из параметра k с начала до первой точки, не включая ее, и задаем трейлер
                                                # Для метода опроса walk имя ключа будет равно параметру k, а трейлер должен быть пустым
                                                if get_notwalk:
                                                    prep_k = k[0:k.find('.')]
                                                    trailer = '*'
                                                else:
                                                    prep_k = k
                                                    trailer = '.'
                                                # Значение trailer прибавляем для избежания ложного срабатывания при сравнении OID, например ...1.2.3.2 и ....1.2.3.20
                                                # При Get-запросе full_oid всегда является "конечным", поскольку это "прицельный" запрос. Поэтому здесь используем "жесткий" трейлер = '*'
                                                # Теперь будут сравниваться .1.2.3.2* и .1.2.3.20*. Первое значение уже не входит во второе, как было бы в предыдущем случае
                                                # При Walk-запросе full_oid заранее неизвестен, поэтому используем "мягкий" трейлер = '.' (символ точки является частью OID)
                                                # Также при Walk-запросе у нас есть отдельное требование - ветки должны быть одной длины
                                                # Если оно выполнено, значит сравниваемые ветки разные и точку использовать допустимо. Ниже пример tmp_oid, которые "пересеклись" бы без трейлера
                                                # full_oid: .1.3.6.1.2.1.31.1.1.1.18.1, tmp_oid: .1.3.6.1.2.1.31.1.1.1.18 (вместе с трейлером '.' входит в full_oid)
                                                # full_oid: .1.3.6.1.2.1.31.1.1.1.1.1,  tmp_oid: .1.3.6.1.2.1.31.1.1.1.1  (вместе с трейлером '.' входит в full_oid)

                                                # Временный OID, полученный из конфигурационного файла, и в который уже подставлены пользовательские параметры
                                                tmp_oid = prepare_oid(
                                                    data_param.copy(),
                                                    dataset[k])
                                                # Проверяем, есть ли значение временного OID в полном OID
                                                if (tmp_oid + trailer
                                                        in full_oid + trailer):
                                                    # Получаем оставшуюся часть от OID
                                                    remainder = full_oid.replace(
                                                        tmp_oid + '.', '')
                                                    # Если используем метод get, оставшаяся часть будет равна iid
                                                    if get_notwalk:
                                                        remainder = var_.iid
                                                        # Альтернативный вариант для использования нескольких последних чисел OID в имени подраздела, например '7.100'
                                                        if k.count('.') > 1:
                                                            remainder = ".".join(
                                                                full_oid.split(
                                                                    ".")
                                                                [-k.count('.'
                                                                          ):])
                                                    # Например в конфиге указан OID 1.2.3.2.1, tag будет 1.2.3.2.1.X, iid - Y (может быть пустым). Полный OID (full_oid) будет 1.2.3.2.1.X.Y
                                                    # Имя раздела (словаря) будет k, а подраздела (ключа метрики) - remainder
                                                    if (prep_k not in
                                                            json_resp['data']):
                                                        json_resp['data'][
                                                            prep_k] = {}
                                                    # Выполняем проверку на наличие непечатаемых символов. Если таких нет, возвращаем исходную строку, а иначе возвращаем hex-string
                                                    if var_.val == filter(
                                                            lambda x: x in
                                                            string.printable,
                                                            var_.val):
                                                        json_resp['data'][prep_k][
                                                            remainder] = var_.val.replace(
                                                                '\"', '')
                                                    else:
                                                        json_resp['data'][prep_k][
                                                            remainder] = var_.val.encode(
                                                                "hex")

                            # Если dataset является списком, выполняем для него set-операции
                            if isinstance(dataset, list):
                                query = 'skipped'
                                varlist = netsnmp.VarList(*[
                                    netsnmp.Varbind(*prepare_oid(
                                        data_param.copy(), VarBindItem[:]))
                                    for VarBindItem in dataset
                                ])
                                query = netsnmp.snmpset(
                                    *varlist,
                                    Version=2,
                                    DestHost=target_ip,
                                    Community=snmp_comm,
                                    Timeout=current_snmp_timeout,
                                    Retries=current_snmp_retries,
                                    UseNumeric=1)
                                time.sleep(set_iter_delay)
                                json_resp['data'][data_param['0']] = query

                            # Если dataset является кортежем, просто возвращаем его первый элемент. Это нужно для хранения пользовательских словарей в конфиге swtoolz-core
                            if isinstance(dataset, tuple):
                                json_resp['data'][data_param['0']] = dataset[0]

        # --- Если для данного IP уже был получен ответ, обновляем словарь, а если нет - создаем
        if self.client_ip in self.responses.keys():
            self.responses[self.client_ip].update(
                {self.client_port: json_resp})
        else:
            self.responses[self.client_ip] = {self.client_port: json_resp}
Пример #24
0
    def testFuncs(self):
        """Test code"""
        print("\n-------------- SET Test Start ----------------------------\n")

        var = netsnmp.Varbind('sysUpTime', '0')
        res = netsnmp.snmpget(var, **snmp_dest())
        print("uptime = ", res[0])
        self.assertEqual(len(res), 1)

        var = netsnmp.Varbind('versionRestartAgent', '0', 1)
        res = netsnmp.snmpset(var, **snmp_dest())
        self.assertEqual(res, 1)

        var = netsnmp.Varbind('sysUpTime', '0')
        res = netsnmp.snmpget(var, **snmp_dest())
        print("uptime = ", res[0])
        self.assertEqual(len(res), 1)

        var = netsnmp.Varbind('nsCacheEntry')
        res = netsnmp.snmpgetnext(var, **snmp_dest())
        print("var = ", var.tag, var.iid, "=", var.val, '(', var.type, ')')
        self.assertEqual(len(res), 1)

        var.val = 65
        res = netsnmp.snmpset(var, **snmp_dest())
        self.assertEqual(res, 1)
        res = netsnmp.snmpget(var, **snmp_dest())
        print("var = ", var.tag, var.iid, "=", var.val, '(', var.type, ')')
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0], '65')

        sess = setup_v1()

        varlist = netsnmp.VarList(
            netsnmp.Varbind('.1.3.6.1.6.3.12.1.2.1.2.116.101.115.116', '',
                            '.1.3.6.1.6.1.1'),
            netsnmp.Varbind('.1.3.6.1.6.3.12.1.2.1.3.116.101.115.116', '',
                            '1234'),
            netsnmp.Varbind('.1.3.6.1.6.3.12.1.2.1.9.116.101.115.116', '', 4))
        res = sess.set(varlist)

        print("res = ", res)
        self.assertEqual(res, 1)

        varlist = netsnmp.VarList(netsnmp.Varbind('snmpTargetAddrTDomain'),
                                  netsnmp.Varbind('snmpTargetAddrTAddress'),
                                  netsnmp.Varbind('snmpTargetAddrRowStatus'))

        res = sess.getnext(varlist)
        self.assertEqual(len(res), 3)
        self.assertEqual(varlist[0].tag, 'snmpTargetAddrTDomain')
        self.assertEqual(varlist[0].iid, '116.101.115.116')
        self.assertEqual(varlist[0].val, '.1.3.6.1.6.1.1')
        self.assertEqual(varlist[1].tag, 'snmpTargetAddrTAddress')
        self.assertEqual(varlist[1].iid, '116.101.115.116')
        self.assertEqual(varlist[1].val, '1234')
        self.assertEqual(varlist[2].tag, 'snmpTargetAddrRowStatus')
        self.assertEqual(varlist[2].iid, '116.101.115.116')
        self.assertEqual(varlist[2].val, '3')

        for var in varlist:
            print(var.tag, var.iid, "=", var.val, '(', var.type, ')')
        print("\n")

        varlist = netsnmp.VarList(
            netsnmp.Varbind('.1.3.6.1.6.3.12.1.2.1.9.116.101.115.116', '', 6))

        res = sess.set(varlist)

        print("res = ", res)
        self.assertEqual(res, 1)

        varlist = netsnmp.VarList(netsnmp.Varbind('snmpTargetAddrTDomain'),
                                  netsnmp.Varbind('snmpTargetAddrTAddress'),
                                  netsnmp.Varbind('snmpTargetAddrRowStatus'))

        res = sess.getnext(varlist)
        self.assertEqual(len(res), 3)
        self.assertNotEqual(varlist[0].tag, 'snmpTargetAddrTDomain')
        self.assertNotEqual(varlist[1].tag, 'snmpTargetAddrTAddress')
        self.assertNotEqual(varlist[2].tag, 'snmpTargetAddrRowStatus')

        for var in varlist:
            print(var.tag, var.iid, "=", var.val, '(', var.type, ')')
        print("\n")

        print("\n-------------- SET Test End ----------------------------\n")
Пример #25
0
def button_release_event(widget, event):
    global wire_prop, trace_l2, node_tr, o, n
    fin = near((event.x, event.y))
    if fin[0] < 950 and fin[0] > 50 and fin[1] < 950 and fin[1] > 50:
        if event.button == 1 and cr != None:
            if inicio == fin:
                if not nodolist.run and not any(x.pos == inicio
                                                for x in nodolist):
                    nodolist.append(nodoClass(inicio))
                    nodolist.set_cur_pos(inicio)
            elif any(x.pos == inicio
                     for x in nodolist) and any(x.pos == fin
                                                for x in nodolist):
                if nodolist.run and trace_l2:
                    for x in nodolist:
                        if x.pos == fin:
                            trace_fin_mac = str(x.bat0.mac)
                        if x.pos == inicio:
                            trace_nicio_ip = str(x.eth0.ip)
                            pos_ini = str(x)
                    l = []
                    mibr = netsnmp.Varbind('iso', '3.6.1.4.1.32.1.4',
                                           trace_fin_mac, 'OCTETSTR')
                    orig = netsnmp.snmpset(mibr,
                                           Version=2,
                                           DestHost=trace_nicio_ip,
                                           Community='private',
                                           Timeout=10000000,
                                           Retries=1)
                    mibr = netsnmp.Varbind('iso.3.6.1.4.1.32.1.4')
                    orig = netsnmp.snmpget(mibr,
                                           Version=2,
                                           DestHost=trace_nicio_ip,
                                           Community='private',
                                           Timeout=1000000,
                                           Retries=1)
                    for i in str(orig[0]).split():
                        l.append(i.split(':')[-1:])
                    node_tr = reduce(lambda x, y: x + y, l)
                    node_tr.insert(0, pos_ini)
                else:
                    link_color24.current_wire = [(inicio, fin), (fin, inicio)]
                    link_color50.current_wire = [(inicio, fin), (fin, inicio)]
                    if wire_prop['channel'] == 'c24GHz':
                        if (not any(x.sd in link_color24.current_wire
                                    for x in link_color24)):
                            link_color24.append(
                                wireClass(inicio, fin, wire_prop))
                            if nodolist.run:
                                link_color24.start()
                                link_color50.start()
                    if wire_prop['channel'] == 'c50GHz':
                        if (not any(x.sd in link_color50.current_wire
                                    for x in link_color50)):
                            link_color50.append(
                                wireClass(inicio, fin, wire_prop))
                            if nodolist.run:
                                link_color24.start()
                                link_color50.start()
        if event.button == 2 and cr != None:
            if inicio == fin:
                if any(x.pos == inicio for x in nodolist):
                    nodolist.set_cur_pos(inicio)
                    if nodolist.run:
                        for x in nodolist:
                            if x.pos == fin:
                                o, n = x.get_originators_nexthop()
            else:
                link_color24.current_wire = [(inicio, fin), (fin, inicio)]
                if wire_prop['channel'] == 'c24GHz':
                    if any(x.pos in [inicio, fin] for x in nodolist):
                        if any(x.sd in link_color24.current_wire
                               for x in link_color24):
                            for x in link_color24:
                                if x.ds in link_color24.current_wire:
                                    wire_prop = x.prop
                link_color50.current_wire = [(inicio, fin), (fin, inicio)]
                if wire_prop['channel'] == 'c50GHz':
                    if any(x.pos in [inicio, fin] for x in nodolist):
                        if any(x.sd in link_color50.current_wire
                               for x in link_color50):
                            for x in link_color50:
                                if x.ds in link_color50.current_wire:
                                    wire_prop = x.prop

        elif event.button == 3 and cr != None:
            if inicio == fin:
                if not nodolist.run:
                    if any(x.pos == inicio for x in nodolist):
                        for x in nodolist:
                            if x.pos == inicio:
                                nid = nodolist.index(x)
                                i = nodolist.pop(nid)
            elif any(x.pos == inicio
                     for x in nodolist) and any(x.pos == fin
                                                for x in nodolist):
                if wire_prop['channel'] == 'c24GHz':
                    for x in link_color24:
                        if x.sd in [(inicio, fin), (fin, inicio)]:
                            lid = link_color24.index(x)
                            i = link_color24.pop(lid)
                if wire_prop['channel'] == 'c50GHz':
                    for x in link_color50:
                        if x.sd in [(inicio, fin), (fin, inicio)]:
                            lid = link_color50.index(x)
                            i = link_color50.pop(lid)

        dibujar(widget)
    return True
Пример #26
0
    def testFuncs(self):
        print "\n-------------- SET Test Start ----------------------------\n"

        var = netsnmp.Varbind('sysUpTime', '0')
        res = netsnmp.snmpget(var,
                              Version=1,
                              DestHost='localhost',
                              Community='public')
        print "uptime = ", res[0]

        var = netsnmp.Varbind('versionRestartAgent', '0', 1)
        res = netsnmp.snmpset(var,
                              Version=1,
                              DestHost='localhost',
                              Community='public')

        var = netsnmp.Varbind('sysUpTime', '0')
        res = netsnmp.snmpget(var,
                              Version=1,
                              DestHost='localhost',
                              Community='public')
        print "uptime = ", res[0]

        var = netsnmp.Varbind('nsCacheEntry')
        res = netsnmp.snmpgetnext(var,
                                  Version=1,
                                  DestHost='localhost',
                                  Community='public')
        print "var = ", var.tag, var.iid, "=", var.val, '(', var.type, ')'

        var.val = 65
        res = netsnmp.snmpset(var,
                              Version=1,
                              DestHost='localhost',
                              Community='public')
        res = netsnmp.snmpget(var,
                              Version=1,
                              DestHost='localhost',
                              Community='public')
        print "var = ", var.tag, var.iid, "=", var.val, '(', var.type, ')'

        sess = netsnmp.Session(Version=1,
                               DestHost='localhost',
                               Community='public')

        vars = netsnmp.VarList(
            netsnmp.Varbind('.1.3.6.1.6.3.12.1.2.1.2.116.101.115.116', '',
                            '.1.3.6.1.6.1.1'),
            netsnmp.Varbind('.1.3.6.1.6.3.12.1.2.1.3.116.101.115.116', '',
                            '1234'),
            netsnmp.Varbind('.1.3.6.1.6.3.12.1.2.1.9.116.101.115.116', '', 4))
        res = sess.set(vars)

        print "res = ", res

        vars = netsnmp.VarList(netsnmp.Varbind('snmpTargetAddrTDomain'),
                               netsnmp.Varbind('snmpTargetAddrTAddress'),
                               netsnmp.Varbind('snmpTargetAddrRowStatus'))

        res = sess.getnext(vars)

        for var in vars:
            print var.tag, var.iid, "=", var.val, '(', var.type, ')'
        print "\n"

        vars = netsnmp.VarList(
            netsnmp.Varbind('.1.3.6.1.6.3.12.1.2.1.9.116.101.115.116', '', 6))

        res = sess.set(vars)

        print "res = ", res

        vars = netsnmp.VarList(netsnmp.Varbind('snmpTargetAddrTDomain'),
                               netsnmp.Varbind('snmpTargetAddrTAddress'),
                               netsnmp.Varbind('snmpTargetAddrRowStatus'))

        res = sess.getnext(vars)

        for var in vars:
            print var.tag, var.iid, "=", var.val, '(', var.type, ')'
        print "\n"

        print "\n-------------- SET Test End ----------------------------\n"
Пример #27
0
    def testFuncs(self):
        print ""
        var = netsnmp.Varbind('sysDescr.0')
        var = netsnmp.Varbind('sysDescr', '0')
        var = netsnmp.Varbind(
            '.iso.org.dod.internet.mgmt.mib-2.system.sysDescr', '0')
        var = netsnmp.Varbind(
            '.iso.org.dod.internet.mgmt.mib-2.system.sysDescr.0')
        var = netsnmp.Varbind('.1.3.6.1.2.1.1.1.0')

        var = netsnmp.Varbind('.1.3.6.1.2.1.1.1', '0')

        print "----------------------------------------\n"
        res = netsnmp.snmpget(var,
                              Version=1,
                              DestHost='localhost',
                              Community='public')

        print "v1 snmpget result: ", res, "\n"

        print "v1 get var: ", var.tag, var.iid, "=", var.val, '(', var.type, ')'

        print "----------------------------------------\n"
        res = netsnmp.snmpgetnext(var,
                                  Version=1,
                                  DestHost='localhost',
                                  Community='public')

        print "v1 snmpgetnext result: ", res, "\n"

        print "v1 getnext var: ", var.tag, var.iid, "=", var.val, '(', var.type, ')'

        print "----------------------------------------\n"
        var = netsnmp.Varbind('sysLocation', '0', 'my new location')
        res = netsnmp.snmpset(var,
                              Version=1,
                              DestHost='localhost',
                              Community='public')

        print "v1 snmpset result: ", res, "\n"

        print "v1 set var: ", var.tag, var.iid, "=", var.val, '(', var.type, ')'

        print "----------------------------------------\n"
        vars = netsnmp.VarList(netsnmp.Varbind('system'))

        print "v1 varlist walk in: "
        for var in vars:
            print "  ", var.tag, var.iid, "=", var.val, '(', var.type, ')'

        res = netsnmp.snmpwalk(vars,
                               Version=1,
                               DestHost='localhost',
                               Community='public')
        print "v1 snmpwalk result: ", res, "\n"

        for var in vars:
            print var.tag, var.iid, "=", var.val, '(', var.type, ')'

        print "----------------------------------------\n"

        print "v1 varbind walk in: "
        var = netsnmp.Varbind('system')
        res = netsnmp.snmpwalk(var,
                               Version=1,
                               DestHost='localhost',
                               Community='public')
        print "v1 snmpwalk result (should be = orig): ", res, "\n"

        print var.tag, var.iid, "=", var.val, '(', var.type, ')'

        print "----------------------------------------\n"
        sess = netsnmp.Session(Version=1,
                               DestHost='localhost',
                               Community='public')

        vars = netsnmp.VarList(netsnmp.Varbind('sysUpTime', 0),
                               netsnmp.Varbind('sysContact', 0),
                               netsnmp.Varbind('sysLocation', 0))
        vals = sess.get(vars)
        print "v1 sess.get result: ", vals, "\n"

        for var in vars:
            print var.tag, var.iid, "=", var.val, '(', var.type, ')'

        vals = sess.getnext(vars)
        print "v1 sess.getnext result: ", vals, "\n"

        for var in vars:
            print var.tag, var.iid, "=", var.val, '(', var.type, ')'

        vars = netsnmp.VarList(netsnmp.Varbind('sysUpTime'),
                               netsnmp.Varbind('sysORLastChange'),
                               netsnmp.Varbind('sysORID'),
                               netsnmp.Varbind('sysORDescr'),
                               netsnmp.Varbind('sysORUpTime'))

        vals = sess.getbulk(2, 8, vars)
        print "v1 sess.getbulk result: ", vals, "\n"

        for var in vars:
            print var.tag, var.iid, "=", var.val, '(', var.type, ')'

        print "----------------------------------------\n"

        vars = netsnmp.VarList(
            netsnmp.Varbind('sysLocation', '0', 'my newer location'))
        res = sess.set(vars)
        print "v1 sess.set result: ", res, "\n"

        print "----------------------------------------\n"
        vars = netsnmp.VarList(netsnmp.Varbind('system'))

        vals = sess.walk(vars)
        print "v1 sess.walk result: ", vals, "\n"

        for var in vars:
            print "  ", var.tag, var.iid, "=", var.val, '(', var.type, ')'

        print "----------------------------------------\n"

        sess = netsnmp.Session(Version=2,
                               DestHost='localhost',
                               Community='public')

        sess.UseEnums = 1
        sess.UseLongNames = 1

        vars = netsnmp.VarList(netsnmp.Varbind('sysUpTime', 0),
                               netsnmp.Varbind('sysContact', 0),
                               netsnmp.Varbind('sysLocation', 0))
        vals = sess.get(vars)
        print "v2 sess.get result: ", vals, "\n"

        print "----------------------------------------\n"

        for var in vars:
            print var.tag, var.iid, "=", var.val, '(', var.type, ')'
        print "\n"

        vals = sess.getnext(vars)
        print "v2 sess.getnext result: ", vals, "\n"

        for var in vars:
            print var.tag, var.iid, "=", var.val, '(', var.type, ')'
        print "\n"

        print "----------------------------------------\n"

        vars = netsnmp.VarList(netsnmp.Varbind('sysUpTime'),
                               netsnmp.Varbind('sysORLastChange'),
                               netsnmp.Varbind('sysORID'),
                               netsnmp.Varbind('sysORDescr'),
                               netsnmp.Varbind('sysORUpTime'))

        vals = sess.getbulk(2, 8, vars)
        print "v2 sess.getbulk result: ", vals, "\n"

        for var in vars:
            print var.tag, var.iid, "=", var.val, '(', var.type, ')'
        print "\n"

        print "----------------------------------------\n"

        vars = netsnmp.VarList(
            netsnmp.Varbind('sysLocation', '0', 'my even newer location'))

        res = sess.set(vars)
        print "v2 sess.set result: ", res, "\n"

        print "----------------------------------------\n"
        vars = netsnmp.VarList(netsnmp.Varbind('system'))

        vals = sess.walk(vars)
        print "v2 sess.walk result: ", vals, "\n"

        for var in vars:
            print "  ", var.tag, var.iid, "=", var.val, '(', var.type, ')'

        print "----------------------------------------\n"
        sess = netsnmp.Session(Version=3,
                               DestHost='localhost',
                               SecLevel='authPriv',
                               SecName='initial',
                               PrivPass='******',
                               AuthPass='******')

        sess.UseSprintValue = 1

        vars = netsnmp.VarList(netsnmp.Varbind('sysUpTime', 0),
                               netsnmp.Varbind('sysContact', 0),
                               netsnmp.Varbind('sysLocation', 0))
        print "----------------------------------------\n"
        vals = sess.get(vars)
        print "v3 sess.get result: ", vals, "\n"

        for var in vars:
            print var.tag, var.iid, "=", var.val, '(', var.type, ')'
        print "\n"

        print "----------------------------------------\n"

        vals = sess.getnext(vars)
        print "v3 sess.getnext result: ", vals, "\n"

        for var in vars:
            print var.tag, var.iid, "=", var.val, '(', var.type, ')'
        print "\n"

        vars = netsnmp.VarList(netsnmp.Varbind('sysUpTime'),
                               netsnmp.Varbind('sysORLastChange'),
                               netsnmp.Varbind('sysORID'),
                               netsnmp.Varbind('sysORDescr'),
                               netsnmp.Varbind('sysORUpTime'))

        vals = sess.getbulk(2, 8, vars)
        print "v3 sess.getbulk result: ", vals, "\n"

        for var in vars:
            print var.tag, var.iid, "=", var.val, '(', var.type, ')'
        print "\n"

        print "----------------------------------------\n"

        vars = netsnmp.VarList(
            netsnmp.Varbind('sysLocation', '0', 'my final destination'))
        res = sess.set(vars)
        print "v3 sess.set result: ", res, "\n"

        print "----------------------------------------\n"
        vars = netsnmp.VarList(netsnmp.Varbind('system'))

        vals = sess.walk(vars)
        print "v3 sess.walk result: ", vals, "\n"

        for var in vars:
            print "  ", var.tag, var.iid, "=", var.val, '(', var.type, ')'
Пример #28
0
#!/usr/bin/env python
#uploads new router config
import netsnmp

vars = netsnmp.Varbind(netsnmp.VarList(netsnmp.Varbind(".1.2.6.1.4.1.9.2.10.6.0", "1"),
        (netsnmp.Varbind("cisco.example.com.1.3.6.1.4.1.9.2.10.12.172.25.1.1", 
                        "iso-config.bin")

result = netsnmp.snmpset(vars,
                        Version = 1,
                        DestHost='cisco.example.com',
                        Community='readWrite')




Пример #29
0
    def testFuncs(self):
        """Test code"""
        print "\n-------------- SET Test Start ----------------------------\n"

        var = netsnmp.Varbind('sysUpTime', '0')
        res = netsnmp.snmpget(var, **snmp_dest())
        print "uptime = ", res[0]
        self.assertEqual(len(res), 1)


        var = netsnmp.Varbind('versionRestartAgent', '0', 1)
        res = netsnmp.snmpset(var, **snmp_dest())
        self.assertEqual(res, 1)

        var = netsnmp.Varbind('sysUpTime', '0')
        res = netsnmp.snmpget(var, **snmp_dest())
        print "uptime = ", res[0]
        self.assertEqual(len(res), 1)

        var = netsnmp.Varbind('nsCacheEntry')
        res = netsnmp.snmpgetnext(var, **snmp_dest())
        print "var = ", var.tag, var.iid, "=", var.val, '(', var.type, ')'
        self.assertEqual(len(res), 1)

        var.val = 65
        res = netsnmp.snmpset(var, **snmp_dest())
        self.assertEqual(res, 1)
        res = netsnmp.snmpget(var, **snmp_dest())
        print "var = ", var.tag, var.iid, "=", var.val, '(', var.type, ')'
        self.assertEqual(len(res), 1)
        self.assertEqual(res[0], '65');

        sess = setup_v1()

        varlist = netsnmp.VarList(
            netsnmp.Varbind('.1.3.6.1.6.3.12.1.2.1.2.116.101.115.116', '', '.1.3.6.1.6.1.1'),
            netsnmp.Varbind('.1.3.6.1.6.3.12.1.2.1.3.116.101.115.116', '', '1234'),
            netsnmp.Varbind('.1.3.6.1.6.3.12.1.2.1.9.116.101.115.116', '', 4))
        res = sess.set(varlist)

        print "res = ", res
        self.assertEqual(res, 1)

        varlist = netsnmp.VarList(netsnmp.Varbind('snmpTargetAddrTDomain'),
                                  netsnmp.Varbind('snmpTargetAddrTAddress'),
                                  netsnmp.Varbind('snmpTargetAddrRowStatus'))

        res = sess.getnext(varlist)
        self.assertEqual(len(res), 3)
        self.assertEqual(varlist[0].tag, 'snmpTargetAddrTDomain')
        self.assertEqual(varlist[0].iid, '116.101.115.116')
        self.assertEqual(varlist[0].val, '.1.3.6.1.6.1.1')
        self.assertEqual(varlist[1].tag, 'snmpTargetAddrTAddress')
        self.assertEqual(varlist[1].iid, '116.101.115.116')
        self.assertEqual(varlist[1].val, '1234')
        self.assertEqual(varlist[2].tag, 'snmpTargetAddrRowStatus')
        self.assertEqual(varlist[2].iid, '116.101.115.116')
        self.assertEqual(varlist[2].val, '3')

        for var in varlist:
            print var.tag, var.iid, "=", var.val, '(', var.type, ')'
        print "\n"

        varlist = netsnmp.VarList(
            netsnmp.Varbind('.1.3.6.1.6.3.12.1.2.1.9.116.101.115.116', '', 6))

        res = sess.set(varlist)

        print "res = ", res
        self.assertEqual(res, 1)

        varlist = netsnmp.VarList(netsnmp.Varbind('snmpTargetAddrTDomain'),
                                  netsnmp.Varbind('snmpTargetAddrTAddress'),
                                  netsnmp.Varbind('snmpTargetAddrRowStatus'))

        res = sess.getnext(varlist)
        self.assertEqual(len(res), 3)
        self.assertNotEqual(varlist[0].tag, 'snmpTargetAddrTDomain')
        self.assertNotEqual(varlist[1].tag, 'snmpTargetAddrTAddress')
        self.assertNotEqual(varlist[2].tag, 'snmpTargetAddrRowStatus')

        for var in varlist:
            print var.tag, var.iid, "=", var.val, '(', var.type, ')'
        print "\n"

        print "\n-------------- SET Test End ----------------------------\n"
Пример #30
0
    def testFuncs(self):        
        print ""
        var = netsnmp.Varbind('sysDescr.0')
        var = netsnmp.Varbind('sysDescr','0')
        var = netsnmp.Varbind(
            '.iso.org.dod.internet.mgmt.mib-2.system.sysDescr','0')
        var = netsnmp.Varbind(
            '.iso.org.dod.internet.mgmt.mib-2.system.sysDescr.0')
        var = netsnmp.Varbind('.1.3.6.1.2.1.1.1.0')

        var = netsnmp.Varbind('.1.3.6.1.2.1.1.1','0')

        print "---v1 GET tests -------------------------------------\n"
        res = netsnmp.snmpget(var,
                              Version = 1,
                              DestHost='localhost',
                              Community='public')

        print "v1 snmpget result: ", res, "\n"

        print "v1 get var: ",  var.tag, var.iid, "=", var.val, '(',var.type,')'
        
        print "---v1 GETNEXT tests-------------------------------------\n"
        res = netsnmp.snmpgetnext(var,
                                  Version = 1,
                                  DestHost='localhost',
                                  Community='public')

        print "v1 snmpgetnext result: ", res, "\n"
                
        print "v1 getnext var: ",  var.tag, var.iid, "=", var.val, '(',var.type,')'
        
        print "---v1 SET tests-------------------------------------\n"
        var = netsnmp.Varbind('sysLocation','0', 'my new location')
        res = netsnmp.snmpset(var,
                        Version = 1,
                        DestHost='localhost',
                        Community='public')

        print "v1 snmpset result: ", res, "\n"

        print "v1 set var: ",  var.tag, var.iid, "=", var.val, '(',var.type,')'
        
        print "---v1 walk tests-------------------------------------\n"
        vars = netsnmp.VarList(netsnmp.Varbind('system'))

        print "v1 varlist walk in: "
        for var in vars:
            print "  ",var.tag, var.iid, "=", var.val, '(',var.type,')'

        res = netsnmp.snmpwalk(vars,
                               Version = 1,
                               DestHost='localhost',
                               Community='public')
        print "v1 snmpwalk result: ", res, "\n"

        for var in vars:
            print var.tag, var.iid, "=", var.val, '(',var.type,')'
       
        
        print "---v1 walk 2-------------------------------------\n"

        print "v1 varbind walk in: "
        var = netsnmp.Varbind('system')
        res = netsnmp.snmpwalk(var,
                               Version = 1,
                               DestHost='localhost',
                               Community='public')
        print "v1 snmpwalk result (should be = orig): ", res, "\n"

        print var.tag, var.iid, "=", var.val, '(',var.type,')'
        
        print "---v1 multi-varbind test-------------------------------------\n"
        sess = netsnmp.Session(Version=1,
                               DestHost='localhost',
                               Community='public')
        
        vars = netsnmp.VarList(netsnmp.Varbind('sysUpTime', 0),
                               netsnmp.Varbind('sysContact', 0),
                               netsnmp.Varbind('sysLocation', 0))
        vals = sess.get(vars)
        print "v1 sess.get result: ", vals, "\n"

        for var in vars:
            print var.tag, var.iid, "=", var.val, '(',var.type,')'
       
        vals = sess.getnext(vars)
        print "v1 sess.getnext result: ", vals, "\n"

        for var in vars:
            print var.tag, var.iid, "=", var.val, '(',var.type,')'
       
        vars = netsnmp.VarList(netsnmp.Varbind('sysUpTime'),
                               netsnmp.Varbind('sysORLastChange'),
                               netsnmp.Varbind('sysORID'),
                               netsnmp.Varbind('sysORDescr'),
                               netsnmp.Varbind('sysORUpTime'))

        vals = sess.getbulk(2, 8, vars)
        print "v1 sess.getbulk result: ", vals, "\n"

        for var in vars:
            print var.tag, var.iid, "=", var.val, '(',var.type,')'

        print "---v1 set2-------------------------------------\n"

        vars = netsnmp.VarList(
            netsnmp.Varbind('sysLocation', '0', 'my newer location'))
        res = sess.set(vars)
        print "v1 sess.set result: ", res, "\n"

        print "---v1 walk3-------------------------------------\n"
        vars = netsnmp.VarList(netsnmp.Varbind('system'))
                
        vals = sess.walk(vars)
        print "v1 sess.walk result: ", vals, "\n"
        
        for var in vars:
            print "  ",var.tag, var.iid, "=", var.val, '(',var.type,')'
            
        print "---v2c get-------------------------------------\n"

        sess = netsnmp.Session(Version=2,
                               DestHost='localhost',
                               Community='public')

        sess.UseEnums = 1
        sess.UseLongNames = 1
        
        vars = netsnmp.VarList(netsnmp.Varbind('sysUpTime', 0),
                               netsnmp.Varbind('sysContact', 0),
                               netsnmp.Varbind('sysLocation', 0))
        vals = sess.get(vars)
        print "v2 sess.get result: ", vals, "\n"

        print "---v2c getnext-------------------------------------\n"

        for var in vars:
            print var.tag, var.iid, "=", var.val, '(',var.type,')'
        print "\n"
       
        vals = sess.getnext(vars)
        print "v2 sess.getnext result: ", vals, "\n"

        for var in vars:
            print var.tag, var.iid, "=", var.val, '(',var.type,')'
        print "\n"
       
        print "---v2c getbulk-------------------------------------\n"

        vars = netsnmp.VarList(netsnmp.Varbind('sysUpTime'),
                               netsnmp.Varbind('sysORLastChange'),
                               netsnmp.Varbind('sysORID'),
                               netsnmp.Varbind('sysORDescr'),
                               netsnmp.Varbind('sysORUpTime'))

        vals = sess.getbulk(2, 8, vars)
        print "v2 sess.getbulk result: ", vals, "\n"

        for var in vars:
            print var.tag, var.iid, "=", var.val, '(',var.type,')'
        print "\n"

        print "---v2c set-------------------------------------\n"

        vars = netsnmp.VarList(
            netsnmp.Varbind('sysLocation','0','my even newer location'))
        
        res = sess.set(vars)
        print "v2 sess.set result: ", res, "\n"

        print "---v2c walk-------------------------------------\n"
        vars = netsnmp.VarList(netsnmp.Varbind('system'))
                
        vals = sess.walk(vars)
        print "v2 sess.walk result: ", vals, "\n"
        
        for var in vars:
            print "  ",var.tag, var.iid, "=", var.val, '(',var.type,')'
            
        print "---v3 setup-------------------------------------\n"
        sess = netsnmp.Session(Version=3,
                               DestHost='localhost',
                               SecLevel='authPriv',
                               SecName='initial',
                               PrivPass='******',
                               AuthPass='******')

        sess.UseSprintValue = 1

        vars = netsnmp.VarList(netsnmp.Varbind('sysUpTime', 0),
                               netsnmp.Varbind('sysContact', 0),
                               netsnmp.Varbind('sysLocation', 0))
        print "---v3 get-------------------------------------\n"
        vals = sess.get(vars)
        print "v3 sess.get result: ", vals, "\n"
        
        for var in vars:
            print var.tag, var.iid, "=", var.val, '(',var.type,')'
        print "\n"

        print "---v3 getnext-------------------------------------\n"
       
        vals = sess.getnext(vars)
        print "v3 sess.getnext result: ", vals, "\n"

        for var in vars:
            print var.tag, var.iid, "=", var.val, '(',var.type,')'
        print "\n"
       
        vars = netsnmp.VarList(netsnmp.Varbind('sysUpTime'),
                               netsnmp.Varbind('sysORLastChange'),
                               netsnmp.Varbind('sysORID'),
                               netsnmp.Varbind('sysORDescr'),
                               netsnmp.Varbind('sysORUpTime'))

        vals = sess.getbulk(2, 8, vars)
        print "v3 sess.getbulk result: ", vals, "\n"

        for var in vars:
            print var.tag, var.iid, "=", var.val, '(',var.type,')'
        print "\n"

        print "---v3 set-------------------------------------\n"

        vars = netsnmp.VarList(
            netsnmp.Varbind('sysLocation','0', 'my final destination'))
        res = sess.set(vars)
        print "v3 sess.set result: ", res, "\n"
        
        print "---v3 walk-------------------------------------\n"
        vars = netsnmp.VarList(netsnmp.Varbind('system'))
                
        vals = sess.walk(vars)
        print "v3 sess.walk result: ", vals, "\n"
        
        for var in vars:
            print "  ",var.tag, var.iid, "=", var.val, '(',var.type,')'
Пример #31
0
    def testFuncs(self):        
        print "\n-------------- SET Test Start ----------------------------\n"

        var = netsnmp.Varbind('sysUpTime','0')
        res = netsnmp.snmpget(var, Version = 1, DestHost='localhost',
                        Community='public')
        print "uptime = ", res[0]

        
        var = netsnmp.Varbind('versionRestartAgent','0', 1)
        res = netsnmp.snmpset(var, Version = 1, DestHost='localhost',
                        Community='public')

        var = netsnmp.Varbind('sysUpTime','0')
        res = netsnmp.snmpget(var, Version = 1, DestHost='localhost',
                        Community='public')
        print "uptime = ", res[0]

        var = netsnmp.Varbind('nsCacheEntry')
        res = netsnmp.snmpgetnext(var, Version = 1, DestHost='localhost',
                        Community='public')
        print "var = ", var.tag, var.iid, "=", var.val, '(',var.type,')'

        var.val = 65
        res = netsnmp.snmpset(var, Version = 1, DestHost='localhost',
                        Community='public')
        res = netsnmp.snmpget(var, Version = 1, DestHost='localhost',
                        Community='public')
        print "var = ", var.tag, var.iid, "=", var.val, '(',var.type,')'

        sess = netsnmp.Session(Version = 1, DestHost='localhost',
                        Community='public')

        vars = netsnmp.VarList(netsnmp.Varbind('.1.3.6.1.6.3.12.1.2.1.2.116.101.115.116','','.1.3.6.1.6.1.1'),
                              netsnmp.Varbind('.1.3.6.1.6.3.12.1.2.1.3.116.101.115.116','','1234'),
                              netsnmp.Varbind('.1.3.6.1.6.3.12.1.2.1.9.116.101.115.116','', 4))
        res = sess.set(vars)

        print "res = ", res

        vars = netsnmp.VarList(netsnmp.Varbind('snmpTargetAddrTDomain'),
                               netsnmp.Varbind('snmpTargetAddrTAddress'),
                               netsnmp.Varbind('snmpTargetAddrRowStatus'))

        res = sess.getnext(vars)

        for var in vars:
            print var.tag, var.iid, "=", var.val, '(',var.type,')'
        print "\n"

        vars = netsnmp.VarList(netsnmp.Varbind('.1.3.6.1.6.3.12.1.2.1.9.116.101.115.116','', 6))      

        res = sess.set(vars)

        print "res = ", res

        vars = netsnmp.VarList(netsnmp.Varbind('snmpTargetAddrTDomain'),
                               netsnmp.Varbind('snmpTargetAddrTAddress'),
                               netsnmp.Varbind('snmpTargetAddrRowStatus'))

        res = sess.getnext(vars)

        for var in vars:
            print var.tag, var.iid, "=", var.val, '(',var.type,')'
        print "\n"

        print "\n-------------- SET Test End ----------------------------\n"
Пример #32
0
    def run(self):
	# Задаем структуру словаря, который будет добавляться в общий словарь ответов
	json_resp   = {'target':'', 'sys_descr':'', 'sys_uptime':'', 'sys_name':'', 'sys_location':'', 'model':'', 'query_time':'', 'data':{}}
	# Получаем IP адрес устройства
	target_ip   = self.requests[self.client_ip][self.client_port]['target']
	# Получаем список параметров (данные) для устройства
	data_params = self.requests[self.client_ip][self.client_port]['data']
	# Получаем SNMP-Community для устройства
	snmp_comm   = self.users[self.requests[self.client_ip][self.client_port]['user']][self.requests[self.client_ip][self.client_port]['comm_index']]
	# Формируем структуру varlist/varbind из параметров, перечисленных в default_info
	snmp_var    = netsnmp.VarList(*[ netsnmp.Varbind(default_info[def_param]) for def_param in default_info ])
	# Фиксируем текущее время
	start_time  = time.time()
	# Выполняем опрос устройства
	snmp_query  = netsnmp.snmpget(*snmp_var, Version = 2, DestHost = target_ip, Community = snmp_comm, Timeout = snmp_timeout, Retries = snmp_retries, UseNumeric = 1)
	# Время, затраченное на опрос
	snmp_query_time = str(int((time.time()-start_time)*1000))
	# Заполняем словарь данными
	json_resp['target']       = self.requests[self.client_ip][self.client_port]['target']
	# Помещаем в словарь результаты опроса параметров из default_info
	for def_param_index, def_param in enumerate(default_info):
	    json_resp[def_param] = snmp_query[def_param_index]
	# Определяем модель по вхождению подстроки в значения sysDescr и sysName
	# Проверка идет до первого соответствия. Сначала проверяется sysName
	model = 'None'
	for item in models_by_desc:
	    for desc_model in item:
		if json_resp['sys_name'] is not None:
		    if desc_model in json_resp['sys_name']:
			model = item[desc_model]
		if json_resp['sys_descr'] is not None:
		    if desc_model in json_resp['sys_descr']:
			model = item[desc_model]
	    if model != 'None':
		break
	json_resp['model']        = model
	json_resp['query_time']   = snmp_query_time

	# Если в списке команд (методов) есть зарезервированная команда (метод), то выполняем опрос оборудования даже если оно недоступно
	forced = False
	for data_param in data_params:
	    if len( set(data_param.values()) & set(forced_mtd) ) > 0:
		forced = True

	# Работаем, если устройство доступно (определили модель) или выставлен флаг 'forced'
	if model != 'None' or forced:
	    # Пробуем импортировать модуль, описывающий методы для данной модели
	    try:
		device = __import__(model)
		reload(device)
	    except:
		logging.info("WARNING: Can't import module '%s' for '%s'!", model, target_ip)
	    else:
		# Пробуем получить из модуля множитель 'timeout_mf' и применить его. При неудаче используем таймаут из файла конфигурации сервиса
		try:
		    timeout_mf = getattr(device, 'timeout_mf')
		    current_snmp_timeout = int(snmp_timeout * timeout_mf)
		except:
		    current_snmp_timeout = snmp_timeout
		# data_params - все, что содержится в ключе 'data' из запроса ('request'). Представлен в виде списка
		# data_param - конкретный элемент списка, содержащий параметры конкретного запроса. Представлен в виде словаря. В debug-лог пишется как 'URL Params'.
		# "data": [{"1": "2", "0": "swL2PortCtrlAdminState"}, {"0": ""}]
		# dataset - словарь вида {'Metric':'OID'}, список списков вида [['tag', 'iid', 'value', 'type']] или->
		# ->кортеж со словарем внутри ({'2':'enable'},) из файла с таким же именем, как имя модели устройства (model)
		for data_param in data_params:
		    if '0' in data_param:
			# Пробуем извлечь параметр (метод) из файла модуля
			try:
			    dataset = getattr(device, data_param['0'])
			except:
			    if data_param['0'] == 'list':
#				logging.info("INFO: Requested 'list' command from client %s:%s.", self.client_ip, self.client_port)
				json_resp['data']['list'] = [str(d) for d in dir(device) if d[0]!='_']
			    else:
				logging.info("WARNING: Can't find param '%s' from module '%s'!", data_param['0'], model)
			else:
			    # Для режима отладки пишем в лог кто и что у нас запросил
			    if debug_mode:
				logging.info("DEBUG: Request from %s:%s. Dataset: '%s', URL Params: %s", self.client_ip, self.client_port, str(dataset), str(data_param))
			    current_snmp_retries = snmp_retries
			    # Если параметр находится в списке 'no_retries', сбрасываем для него число дополнительных попыток в 0
			    if data_param['0'] in no_retries:
				current_snmp_retries = 0
			    # dataset может быть как словарем (для get/walk) так и списком (для set) и кортежем (для неизменяемых пользовательских данных). Обрабатываем эти случаи отдельно
			    if isinstance(dataset, dict):
				get_notwalk = False
				for paramname in dataset.keys():
				    if '.' in paramname:
					get_notwalk = True
				big_bada_boom = False
				snmp_var = netsnmp.VarList(*[ netsnmp.Varbind(prepare_oid(data_param.copy(), dataset[paramname])) for paramname in dataset.keys() ])
				# Формируем структуру varlist/varbind в зависимости о метода запроса (get или walk)
				if get_notwalk:
				    snmp_query   = netsnmp.snmpget(*snmp_var,Version = 2, DestHost = target_ip, Community = snmp_comm, Timeout = current_snmp_timeout, Retries = current_snmp_retries, UseNumeric = 1)
				else:
				    snmp_query   = netsnmp.snmpwalk(snmp_var,Version = 2, DestHost = target_ip, Community = snmp_comm, Timeout = current_snmp_timeout, Retries = current_snmp_retries, UseNumeric = 1)
				# ВНИМАНИЕ! Это обход бага. _Если в конфиге (модуле) задать OID задать без точки в самом начале_, то при формировании varlist/varbind может возникнуть проблема
				# Заключается она в том, что нельзя перебрать snmp_var, хотя по формальным признакам для этого нет препятствий
				# Плюс попутно возникают другие странности, например logging.info выбрасывает исключение
				# Отладка результатов не дала, похоже что это именно БАГ
				# Если задавать все OID, начинающиеся с точки, то все работает хорошо
				try:
				    for var_ in snmp_var:
					pass
				except:
				    big_bada_boom = True
				if not big_bada_boom:
				    for var_ in snmp_var:
					# Убеждаемся, что ответ распознан, т.е. не None
					if ( (var_.tag is not None) & (var_.iid is not None) ):
					    # Получаем полный OID. В ответе он разбит на части, находящиеся в tag и iid, которые мы склеиваем вместе
					    full_oid = var_.tag+'.'+var_.iid
					    # Здесь k - имя параметра, по которому получим значение, а prep_k - имя ключа в 'data'
					    # В случае walk-запроса значения k и prep_k равны, а в случае get имя prep_k обрезается до первой точки, не включая ее
					    for k in dataset:
						# Если используем метод get, то получаем имя ключа из параметра k с начала до первой точки, не включая ее, и задаем трейлер
						# Для метода опроса walk имя ключа будет равно параметру k, а трейлер должен быть пустым
						if get_notwalk:
						    prep_k = k[0:k.find('.')]
						    trailer = '*'
						else:
						    prep_k = k
						    trailer = '.'
						# Значение trailer прибавляем для избежания ложного срабатывания при сравнении OID, например ...1.2.3.2 и ....1.2.3.20
						# При Get-запросе full_oid всегда является "конечным", поскольку это "прицельный" запрос. Поэтому здесь используем "жесткий" трейлер = '*'
						# Теперь будут сравниваться .1.2.3.2* и .1.2.3.20*. Первое значение уже не входит во второе, как было бы в предыдущем случае
						# При Walk-запросе full_oid заранее неизвестен, поэтому используем "мягкий" трейлер = '.' (символ точки является частью OID)
						# Также при Walk-запросе у нас есть отдельное требование - ветки должны быть одной длины
						# Если оно выполнено, значит сравниваемые ветки разные и точку использовать допустимо. Ниже пример tmp_oid, которые "пересеклись" бы без трейлера
						# full_oid: .1.3.6.1.2.1.31.1.1.1.18.1, tmp_oid: .1.3.6.1.2.1.31.1.1.1.18 (вместе с трейлером '.' входит в full_oid)
						# full_oid: .1.3.6.1.2.1.31.1.1.1.1.1,  tmp_oid: .1.3.6.1.2.1.31.1.1.1.1  (вместе с трейлером '.' входит в full_oid)

						# Временный OID, полученный из конфигурационного файла, и в который уже подставлены пользовательские параметры
						tmp_oid = prepare_oid(data_param.copy(),dataset[k])
						# Проверяем, есть ли значение временного OID в полном OID
						if (tmp_oid+trailer in full_oid+trailer):
						    # Получаем оставшуюся часть от OID
						    remainder = full_oid.replace(tmp_oid+'.','')
						    # Если используем метод get, оставшаяся часть будет равна iid
						    if get_notwalk:
							remainder = var_.iid
							# Альтернативный вариант для использования нескольких последних чисел OID в имени подраздела, например '7.100'
							if k.count('.')>1:
							    remainder = ".".join(full_oid.split(".")[-k.count('.'):])
						    # Например в конфиге указан OID 1.2.3.2.1, tag будет 1.2.3.2.1.X, iid - Y (может быть пустым). Полный OID (full_oid) будет 1.2.3.2.1.X.Y
						    # Имя раздела (словаря) будет k, а подраздела (ключа метрики) - remainder
						    if (prep_k not in json_resp['data']):
							json_resp['data'][prep_k]={}
						    # Выполняем проверку на наличие непечатаемых символов. Если таких нет, возвращаем исходную строку, а иначе возвращаем hex-string
						    if var_.val == filter(lambda x: x in string.printable, var_.val):
							json_resp['data'][prep_k][remainder] = var_.val.replace('\"','')
						    else:
							json_resp['data'][prep_k][remainder] = var_.val.encode("hex")

			    # Если dataset является списком, выполняем для него set-операции
			    if isinstance(dataset, list):
				query = 'skipped'
				varlist = netsnmp.VarList(*[netsnmp.Varbind(*prepare_oid(data_param.copy(), VarBindItem[:])) for VarBindItem in dataset])
				query   = netsnmp.snmpset(*varlist, Version = 2, DestHost = target_ip, Community = snmp_comm, Timeout = current_snmp_timeout, Retries = current_snmp_retries, UseNumeric = 1)
				time.sleep(set_iter_delay)
				json_resp['data'][data_param['0']] = query

			    # Если dataset является кортежем, просто возвращаем его первый элемент. Это нужно для хранения пользовательских словарей в конфиге swtoolz-core
			    if isinstance(dataset, tuple):
				json_resp['data'][data_param['0']] = dataset[0]

	# --- Если для данного IP уже был получен ответ, обновляем словарь, а если нет - создаем
	if self.client_ip in self.responses.keys():
	    self.responses[self.client_ip].update({self.client_port:json_resp})
	else:
	    self.responses[self.client_ip]    =   {self.client_port:json_resp}