def start_exploit(self, task):
     """Start exploit network"""
     try:
         task_id = self.client.msfpro.start_exploit(task=task)
     except Exception, ex:
         Logger.error("Metasploiapi >> start_exploit >> error: " + str(ex))
         return None
    def __init__(self):
        """
        Manager server connection object
        """
        self.server = settings.config["tool"]["address"].encode("utf8")
        self.port = settings.config["tool"]["port"]
        self.token = settings.config["tool"]["token"].encode("utf8")
        self.uri_base = "/rest_api/v2"
        # Manager server connection object
        if settings.config["tool"]["proxy_connect"] == "1":
            self.manager_server = NetworkConnection(
                settings.config["tool"]["address"],
                settings.config["tool"]["port"],
                is_https=settings.config["tool"]["using_https"],
                proxies=settings.config["tool"]["http_proxy"])
        else:
            self.manager_server = NetworkConnection(
                settings.config["tool"]["address"],
                settings.config["tool"]["port"],
                is_https=settings.config["tool"]["using_https"])

        self.headers = {
            "token": self.token,
            "Content-Type": "application/json"
        }
        if self.check_service() is True:
            self.client = MsfRpcClient(self,
                                       server=self.server,
                                       port=self.port,
                                       token=self.token)
            Logger.info("Metasploit service ready!")
        else:
            Logger.error(
                ">> MetasploitAPI >> CAN NOT LOGIN TO METASPLOIT SERVICE")
            sys.exit()
 def stop(self, task_id):
     """Stop task with task_id"""
     try:
         response = self.client.msfpro.task_stop(task_id=task_id)
     except Exception, ex:
         Logger.error("MetasploiApi >> stop >> error: " + str(ex))
         return None
Exemple #4
0
def sjoin_noise_values(gdf,
                       noise_layers: dict,
                       log: Logger = None) -> gpd.GeoDataFrame:
    sample_gdf = gdf.copy()
    sample_gdf['sample_idx'] = sample_gdf.index
    for name, noise_gdf in noise_layers.items():
        log.debug(f'joining noise layer [{name}] to sampling points')
        sample_gdf = gpd.sjoin(sample_gdf, noise_gdf, how='left',
                               op='within').drop(['index_right'], axis=1)

    if (len(sample_gdf.index) > len(gdf.index)):
        log.warning(
            f'joined multiple noise values for one or more sampling points ({len(sample_gdf.index)} != {len(gdf.index)})'
        )

    distinct_samples = remove_duplicate_samples(sample_gdf, 'sample_idx',
                                                noise_layers)

    if (len(distinct_samples.index) == len(gdf.index)):
        log.info('successfully removed duplicate samples')
    else:
        log.error('error in removing duplicate samples')

    if (list(sample_gdf.columns).sort() != list(
            distinct_samples.columns).sort()):
        log.error(
            'schema of the dataframe was altered during removing duplicate samples'
        )

    return distinct_samples.drop(columns=['sample_idx'])
class Context:
    """
    上下文关联参数读写
    """
    def __init__(self):
        self._cg = configparser.ConfigParser()
        self._cg.read(constant.context_data_path.encode('utf-8'))
        self._log = Logger('关联参数').get_logger()

    def get(self, option):
        """
        获取参数值
        :param option: key
        :return: value
        """
        if option in self._cg.options(section='DATA'):
            value = self._cg.get('DATA', option=option)
            self._log.info('成功获取关联参数:{} = {}'.format(option, value))
            return value
        else:
            self._log.error('不存在关联参数:{}'.format(option))

    def write(self, option, value):
        """
        把传入的数据写入到文件
        :param option: key
        :param value: value
        :return: None
        """
        self._cg.set('DATA', option, value)
        with open(constant.context_data_path, 'w') as fp:
            self._cg.write(fp)
        self._log.info('成功写回关联参数:{} = {}'.format(option, value))
def start_export_process(args):
    args.body = read_request_body()
    export_filename = get_filename(args.index)
    line_number = 0
    csv_writer = None
    first_line = True
    with open(export_filename, 'wb') as json_file:
        if args.out == 'csv':
            csv_writer = csv.writer(json_file)
        for source_data in export_data_from_elasticsearch(
                args.http, args.index, args.body, args.size, args.skip,
                args.limit):
            if source_data:
                line_number += 1
                if args.out == 'json':
                    json_file.write(json.dumps(source_data) + '\n')
                elif args.out == 'csv':
                    if first_line:
                        first_line = False
                        csv_writer.writerow(tuple(source_data.keys()))

                    try:
                        csv_writer.writerow(tuple(source_data.values()))
                    except Exception as error:
                        Logger.error(u"CSV文件写入出错%s" % error)
                print u"当前导出数据量%s\r" % line_number,
        Logger.info(u"导出数据量%d" % (line_number))
    out_filename = 'data_list'
    if args.out == 'csv':
        out_filename = "%s.csv" % export_filename
    elif args.out == 'json':
        out_filename = "%s.json" % export_filename
    if rename_to_outfile(export_filename, out_filename):
        os.rename(export_filename, out_filename)
        Logger.info(u"文件生成成功 %s" % out_filename)
Exemple #7
0
class DataQueue:
    def __init__(self):
        self.dataQueue = queue.Queue()
        self.dv = datavalidator.DataValidator()
        self.log = Logger().get('database.dataqueue.DataQueue')
    """we want to check the data here and fail early
        if the data is good then we want to put it in the data queue
        we will want another python script for the validations (datavalidator.py)
        we need to enforce type constraints because the database will not
        see datavalidator.py"""
    def insert_into_data_queue(self, value):
        if not self.dv.run_all_checks(value):
            self.log.error('--> Validation failed! Unable to add data '
                           'into data queue: ' +
                           str(value))
            return False
        try:
            self.dataQueue.put(value)
        except queue.Full as e:
            self.log.critical('Data queue is full!')
        finally:
            return True

    def get_next_item(self):
        item = self.dataQueue.get()
        self.dataQueue.task_done()
        return item

    def check_empty(self):
        result = self.dataQueue.empty()
        return result
 def workspace_add(self, worksapce):
     """Add new workspace"""
     try:
         self.client.msfpro.workspace_add(workspace=worksapce)
     except Exception, ex:
         Logger.error("Metasploiapi >> workspace_add >> error: " + str(ex))
         return False
 def test_HuanKuan1(self,exist = False):
     u"""还款--默认首期"""
     print("*************执行 还款-默认首期 用例**************")
     params = Params()
     try:
         self.driver.find_element_by_id("rl_repayment").click()        #点击首页中的去还款
         time.sleep(2)
         self.driver.find_element_by_id("tv_state").click()         #选择第一条数据
         time.sleep(2)
         self.driver.find_element_by_id("tv_repayment").click()      #默认首期,直接点击还款
         time.sleep(2)
         self.driver.find_element_by_id("rl_top").click()           #跳转到银行卡管理页,选择第一个
         time.sleep(8)
         inputText(self,params['applyPWD'])                #输入支付密码
         time.sleep(8)
         exist=is_resultActivity(self)                   #判断是否成功跳转到了还款成功页
     except:
         exist = False
         #获取当前方法名作为截图名
         pic_name = get_current_function_name()
         #调用截图方法
         getScreen(self,pic_name)
         #写入日志
         logger=Logger(logname='log.txt',loglevel="INFO",logger=pic_name).getlog()
         logger.error(traceback.format_exc())
     self.assertEqual(exist, True)
 def _set_data_info(self):
     if self.get_project_name() == 'coco2014':
         return coco14_data_info
     elif self.get_project_name() == 'education':
         return edu_data_info
     else:
         log.error("Project name is not found")
         sys.exit()
Exemple #11
0
    def json2xml(json_file, xml_file):
        if not os.path.exists(json_file):
            Log.error('Json file: {} not exists.'.format(json_file))
            exit(1)

        xml_dir_name = os.path.dirname(xml_file)
        if not os.path.exists(xml_dir_name):
            Log.info('Xml Dir: {} not exists.'.format(xml_dir_name))
            os.makedirs(xml_dir_name)
Exemple #12
0
    def load_file(json_file):
        if not os.path.exists(json_file):
            Log.error('Json file: {} not exists.'.format(json_file))
            exit(1)

        with open(json_file, 'r') as read_stream:
            json_dict = json.load(read_stream)

        return json_dict
 def __init__(self):
     if settings.check_config() is False:
         Logger.error("Metasploit_observer >> observe >> error config ")
         sys.exit()
     self.web_api = WebServiceAPI()
     self.thread = MyThreadPool(
         settings.config["application"]["num_thread"])
     self.notify = {}
     self.time_wait = settings.config["application"]["time_wait"]
Exemple #14
0
    def xml2json(xml_file, json_file):
        if not os.path.exists(xml_file):
            Log.error('Xml file: {} not exists.'.format(xml_file))
            exit(1)

        json_dir_name = os.path.dirname(json_file)
        if not os.path.exists(json_dir_name):
            Log.info('Json Dir: {} not exists.'.format(json_dir_name))
            os.makedirs(json_dir_name)
Exemple #15
0
class Assertions:
    def __init__(self):
        self.logger = Logger(logger="Assertions").getlog()

    def assert_code(self, code, expected_code):
        try:
            assert code == expected_code
            return True
        except:
            self.logger.error(
                "statusCode error, expected_code is %s,statusCode %s" %
                (expected_code, cade))
            raise

    def assert_body(self, body, body_msg, expected_msg):
        try:
            msg = body[body_msg]
            assert msg == expected_msg
            return True
        except:
            self.logger.error(
                "Response body msg != expected_msg, expected_msg is %s, body_msg is %s"
                % (expected_msg, body_msg))
            raise

    def assert_in_text(self, body, expected_msg):
        try:
            text = json.dumps(
                body, ensure_ascii=False)  #转换为json格式,ensure_ascii=False:中文可读
            assert expected_msg in text
            return True
        except:
            self.logger.error(
                "Response body Dose not contain expected_msg,expected_msg is %s"
                % expected_msg)
            raise

    def assert_text(self, body, expected_msg):
        try:
            assert body == expected_msg
            return True
        except:
            self.logger.error(
                "Response body != expected_msg,expected_msg is %s, body is %s"
                % (expected_msg, body))
            raise

    def assert_time(self, time, expected_time):
        try:
            assert time == expected_time
            return True
        except:
            self.logger.error(
                "Response time > expected_time, expected_time is %s, time is %s"
                % (expected_time, time))
            raise
Exemple #16
0
def validate_port_number(givenStr):
    log = Logger().get('reportserver.manager.utilities')
    log.debug("given str is: " + givenStr)

    try:
        return int(givenStr)
    except Exception as e:
        log.error("Error:  Received invalid string to convert to int: " + givenStr)
        log.error (str(e))
        return None
def rename_to_outfile(source_filename, target_filename):
    random_string = ''.join(
        random.sample(string.ascii_letters + string.digits, 8))
    try:
        if os.path.exists(target_filename):
            os.rename(target_filename,
                      "%s.%s.bak" % (random_string, target_filename))
    except Exception as error:
        Logger.error(u"文件名修改错误 %s" % error)
        return False
    return True
Exemple #18
0
def get_date_delta(iso_date_from, iso_date_to):
    try:
        date_from = dateutil.parser.parse(iso_date_from)
        date_to = dateutil.parser.parse(iso_date_to)
        delta = date_to - date_from
    except Exception as e:
        log = Logger().get('reportserver.manager.utilities')
        log.error("Error: " + str(e))
        delta = 0

    return str(delta)
    def test_reset_pwd(self):
        u'''忘记密码'''
        print("*************执行忘记密码用例**************")
        params = Params()
        try:
            self.driver.find_element_by_id("iv_head").click()   #点击头像到个人中心页
            time.sleep(2)
            self.driver.find_element_by_id("rl_top").click()      #点击个人中心页中的登录,跳转到登录页
            time.sleep(2)
            self.driver.find_element_by_id('tv_forgetpwd').click()   #跳转到登录页,点击忘记密码
            time.sleep(2)
            #异常情况
            self.driver.find_element_by_id('et_phonenum').send_keys(params['phone'])   #输入手机号,其他不输入
            self.driver.find_element_by_id('tv_queren_reset').click()          #点击确认重置
            time.sleep(2)

            self.driver.find_element_by_id('et_phonenum').send_keys(params['phone'])   #输入手机号
            self.driver.find_element_by_id('tv_getAuthCode').click()    #获取短信验证码
            sms_yanzhengma = input("请输入短信验证码:")                 #手动输入
            time.sleep(8)
            self.driver.find_element_by_id('et_authcode').send_keys(sms_yanzhengma)   #脚本自动输入短信验证码
            time.sleep(2)
            self.driver.find_element_by_id('et_pwd').send_keys(params['loginPWD'])               #输入密码
            time.sleep(2)
            self.driver.find_element_by_id('et_queren_pwd').send_keys("111111")      #再次输入密码不一致
            self.driver.find_element_by_id('tv_queren_reset').click()          #点击确认重置

            #正确情况
            self.driver.find_element_by_id('et_phonenum').send_keys(params['phone'])   #输入手机号
            self.driver.find_element_by_id('tv_getAuthCode').click()    #获取短信验证码
            sms_yanzhengma = input("请输入短信验证码:")                 #手动输入
            time.sleep(8)
            self.driver.find_element_by_id('et_authcode').send_keys(sms_yanzhengma)   #脚本自动输入短信验证码
            time.sleep(2)
            self.driver.find_element_by_id('et_pwd').send_keys(params['loginPWD'])               #输入密码
            time.sleep(2)
            self.driver.find_element_by_id('et_queren_pwd').send_keys(params['loginPWD'])      #再次输入密码
            self.driver.find_element_by_id('tv_queren_reset').click()          #点击确认重置

            exist = False
            try:
                self.driver.find_element_by_id('tv_queren_reset').click()     #判断是否还存在确认按钮,确认是否成功修改
                print("输入密码有误")
                exist = True
            except Exception as e:
                pass

        except:
            exist = True
            pic_name = get_current_function_name()     #获取当前用例名
            getScreen(self,pic_name)   #调用截图方法
            logger=Logger(logname='log.txt',loglevel="INFO",logger=pic_name).getlog()
            logger.error(traceback.format_exc())
        self.assertEqual(exist, False)                      #修改失败,确认按钮存在
Exemple #20
0
 def get_new_scan(self, tool_name):
     if tool_name is not None:
         uri = "/scans/new/?tool=" + str(tool_name)
         response = self.manager_server.connect("GET",
                                                uri,
                                                headers=self.headers)
         if response.status_code == 200:
             return response.json()
     else:
         Logger.error(
             "web_service_api >> get_newscan >> error: cannot found tool_name"
         )
 def get_ckpt(self):
     ckpt_dir = glob.glob(
         os.path.join(self.get_backup_path(), self.net_info['ckpt'] + '.*'))
     if not len(ckpt_dir):
         log.error("{} is not found".format(ckpt_dir))
         sys.exit()
     if len(ckpt_dir) != 1:
         log.error("File {} conflict!".format(self.net_info['ckpt']))
         sys.exit()
     ckpt_dir = ckpt_dir[0]
     log.info(">>> loading ckpt from '{}'".format(ckpt_dir))
     return ckpt_dir
Exemple #22
0
    def test_credit_addCard(self):
        u'''授信'''
        print("*****************执行授信用例****************")
        params = Params()
        self.driver.find_element_by_id("tv_apply").click()  #点击马上申请
        try:
            self.driver.find_element_by_id("tv_id_verify").click()  #点击实名认证
            time.sleep(2)
            self.driver.find_element_by_id("et_cardusername").send_keys(
                params['username'])  #输入持卡人姓名
            self.driver.find_element_by_id("et_idnum").send_keys(
                params['ID'])  #输入身份证号
            time.sleep(2)
            exist = False
            while exist == False:
                self.driver.find_element_by_id(
                    "et_bankcardnum").click()  #输入银行卡号,4位一个空格
                input_text.inputText(self, params['cardNumber'])  #调用了延时方法输入
                self.driver.find_element_by_id("et_phone").send_keys(
                    params['phone'])  #输入手机号
                self.driver.find_element_by_id("tv_next").click()  #点击下一步
                time.sleep(2)
                try:
                    self.driver.find_element_by_id(
                        "et_idnum").click()  #输入银行卡信息有误
                    print("输入银行卡信息有误")
                    self.driver.find_element_by_id("iv_delete_idcard").click()
                    time.sleep(2)
                except:
                    exist = True

            sms_yanzhengma = input("请输入短信验证码:")  #输入手机验证码
            time.sleep(8)
            self.driver.find_element_by_id("et_authcode").send_keys(
                sms_yanzhengma)
            self.driver.find_element_by_id('tv_next').click()  #点击下一步
            time.sleep(15)
            try:
                self.driver.find_element_by_id("tv_complete").click()  #点击跳过按钮
                exist = False
            except:
                print("短信验证码有误")
        except:
            print("授信失败")
            pic_name = get_current_function_name()  #获取当前方法名作为截图名
            get_screen.getScreen(self, pic_name)  #调用截图方法
            logger = Logger(logname='log.txt',
                            loglevel="INFO",
                            logger=pic_name).getlog()
            logger.error(traceback.format_exc())  #写入日志
        self.assertEqual(exist, False)
Exemple #23
0
class DatabaseHandler:

    def __init__(self):
        self.global_config = GlobalConfig()
        self.db_path = self.global_config['Database']['path']
        self.log = Logger().get('reportserver.dao.DatabaseHandler.DatabaseHandler')

    # Connect to given database.
    # Defaults to the honeypot db, but another path can be passed in (mainly for testing).
    # Database needs to exist first.
    def connect(self, database_name):
        if (database_name == None):
            database_name = self.db_path

        if not os.path.exists(database_name):
            self.log.error("Database does not exist in path: " + database_name)
            return None
        try:
            conn = sqlite3.connect(database_name)
        except sqlite3.OperationalError:
            self.log.error("Problem connecting to database at: " + database_name)
        else:
            return conn

    # Query DB and return JSON
    def query_db(self, query, args=(), one=False, db=None):
        #print ("#debug args are: " +str(args))
        cur = self.connect(db).cursor()
        cur.execute(query, args)
        r = [dict((cur.description[i][0], value) \
                for i, value in enumerate(row)) for row in cur.fetchall()]
        cur.connection.close()
        return (r[0] if r else None) if one else r

    # Unit of Measure could be "weeks", "days", "hours", "minutes".
    # Return all data from the DB within that measure of time as JSON.
    def get_json_by_time(self, portnumber, uom, units):
        begin_date_iso = dateTimeUtility.get_begin_date_iso(uom, units)
        tableName = self.global_config.get_plugin_config(portnumber)['table']
        date_time_field = self.global_config.get_db_datetime_name()

        #  query = query_db("SELECT * FROM %s where (datetime > '%s')" % (tableName, query_date_iso))
        queryString = "SELECT * FROM %s where %s >= '%s' order by id, %s" % (tableName, date_time_field, begin_date_iso, date_time_field)
        #args = (tableName, date_time_field, begin_date_iso)
        self.log.info("queryString is: " + str(queryString))
        #print ("args to use: " + str(args))
        results = self.query_db(queryString)
        self.log.debug("results: " + str(results))

        return results
class DataCompare:
    """
    预期结果和实际结果比对,返回比对结果
    """
    def __init__(self):
        self._log = Logger('测试结果比对').get_logger()
        # 存放比对结果
        self._compare_result = []

    def compare(self, excepted, response):
        """
        递归比对,注:第一个参数是预期结果
        :param excepted: 预期结果dict
        :param response: 实际结果dict
        :return: 若存在结果不一致的,返回每一个键对应的比对结果元组列表;否则返回空列表
        """

        if excepted == {}:
            return self._compare_result

        if type(excepted) != type(response) and (excepted
                                                 and response is not None):
            self._log.error('预期结果格式错误,无法比对:{}'.format(excepted))
            return None

        if isinstance(excepted, dict):
            if isinstance(response, dict):
                for key in excepted:
                    self.compare(excepted[key], response[key])
            else:
                self.compare(str(excepted), str(response))
        elif isinstance(excepted, list) and isinstance(response, list):
            if excepted and response:
                if isinstance(excepted[0], dict):
                    self.compare(excepted[0], response[0])
                else:
                    for e, r in zip(excepted, response):
                        self.compare(e, r)
            else:
                self.compare(str(excepted), str(response))
        else:
            try:
                assert excepted == response, \
                    '比对结果不一致:excepted "{}" != "{}" actual'.format(excepted, response)
            except AssertionError as e:
                self._compare_result.append((excepted, response))
                self._log.error(e)
        return self._compare_result
def export_data_from_elasticsearch(http,
                                   index='*',
                                   json_body='',
                                   size_data=100,
                                   from_data=0,
                                   limit=10000000):
    elastic_search_connect = Elasticsearch(http,
                                           retry_on_timeout=True,
                                           max_retries=3,
                                           timeout=3600000)
    try:
        body = json.loads(json_body)
    except Exception as error:
        Logger.error(u"查询请求body出错%s" % error)
        body = {}
    if limit < size_data:
        size_data = limit
    Logger.info(u'查询body为 %s' % json.dumps(body))
    total_number = elastic_search_connect.count(index=index, body=body)
    Logger.info(u"数据总量为 %d" % int(total_number['count']))
    if not body.has_key('size'):
        body['size'] = size_data
    if not body.has_key('from'):
        body['from'] = from_data
    else:
        body['from'] = 0
    data_number = 0
    while True:
        response = elastic_search_connect.search(index=index, body=body)
        if len(response['hits']['hits']) > 0:
            data = response['hits']['hits']
            for _source in data:
                yield _source['_source']
                data_number += 1
                if data_number == limit:
                    break
            else:
                body['from'] += size_data
                continue
            break
        else:
            break
    yield None
Exemple #26
0
 def test_JieKuan12(self):
     u"""借款-12期"""
     params = Params()
     #点击马上申请
     self.driver.find_element_by_id('tv_apply').click()
     time.sleep(3)
     try:
         slideApplyBar(self)  #滑动借款条到500
         self.driver.find_element_by_id(
             'rl_borrow_sence').click()  #选择借款场景:家用电器
         self.driver.find_element_by_id('tv_sence').click()
         self.driver.find_element_by_id('rl_num_periods').click()  #借款周期
         self.driver.find_element_by_xpath(
             '//android.widget.ListView/android.widget.LinearLayout[3]/android.widget.TextView'
         ).click()  #选了分12期的
         time.sleep(8)
         edu = self.driver.find_element_by_id(
             'com.ibeesaas.tianbaodai:id/tv_borrow_num').text  #获取额度
         num_edu = int(edu)
         if num_edu >= 500:
             self.driver.find_element_by_id(
                 'tv_borrow_immedia').click()  #点击马上借
             time.sleep(3)
             inputText(self, params['applyPwd'])  #加了延时输入
             time.sleep(8)
             exist = is_resultActivity(self)  #判断是否成功跳转到借款成功页
         else:
             exist = False
             self.driver.find_element_by_id(
                 'tv_borrow_immedia').click()  #点击马上借
             print(u"额度小于500,无法借款")
     except:
         exist = False
         #获取方法名作为截图名
         pic_name = get_current_function_name()
         #调用截图方法
         getScreen(self, pic_name)
         #写入日志
         logger = Logger(logname='log.txt',
                         loglevel="INFO",
                         logger=pic_name).getlog()
         logger.error(traceback.format_exc())
     self.assertEqual(exist, True)
    def test_UpdateLogin(self):
        u"""修改登录密码"""
        print("*************执行修改登录密码用例**************")
        params = Params()
        self.driver.find_element_by_id("iv_head").click()    #点击进入个人中心页
        self.driver.find_element_by_id("rl_pwd_manage").click()   #点击密码管理
        try:
            self.driver.find_element_by_id("rl_reset_loginpwd").click()   #点击修改登录密码
            #异常情况
            self.driver.find_element_by_id("tv_confimchange").click()   #不输入,点击确认修改
            time.sleep(2)

            self.driver.find_element_by_id("et_originpwd").send_keys(params['loginPWD'])   # #输入原密码
            self.driver.find_element_by_id("et_pwd").send_keys(params['loginPWD'])    #输入新密码
            self.driver.find_element_by_id("et_queren_pwd").send_keys("111111")   #再次输入 不一致新密码
            self.driver.find_element_by_id("tv_confimchange").click()   #点击确认修改
            time.sleep(2)
            #正常情况
            self.driver.find_element_by_id("et_originpwd").send_keys(params['loginPWD'])   # #输入原密码
            time.sleep(2)
            self.driver.find_element_by_id("et_pwd").send_keys(params['loginPWD'])    #输入新密码
            time.sleep(2)
            self.driver.find_element_by_id("et_queren_pwd").send_keys(params['loginPWD'])   #再次输入新密码
            self.driver.find_element_by_id("tv_confimchange").click()   #点击确认修改
            time.sleep(2)

            exist = False
            try:
                self.driver.find_element_by_id("tv_confimchange").click()   #点击确认修改
                exist = True
            except:
                pass
        except:
            exist = True
            pic_name = get_current_function_name()
            #调用截图方法
            getScreen(self,pic_name)
            #写入日志
            logger=Logger(logname='log.txt',loglevel="INFO",logger=pic_name).getlog()
            logger.info("*************执行修改登录密码用例**************")
            logger.error(traceback.format_exc())
        self.assertEqual(exist,False)         #已跳转,不在修改页
Exemple #28
0
    def __list_dirs(self, root_dir):
        img_list = list()
        json_list = list()
        image_dir = os.path.join(root_dir, 'image')
        json_dir = os.path.join(root_dir, 'json')

        img_extension = os.listdir(image_dir)[0].split('.')[-1]

        for file_name in os.listdir(json_dir):
            image_name = '.'.join(file_name.split('.')[:-1])
            img_list.append(
                os.path.join(image_dir, '{}.{}'.format(image_name,
                                                       img_extension)))
            json_path = os.path.join(json_dir, file_name)
            json_list.append(json_path)
            if not os.path.exists(json_path):
                Log.error('Json Path: {} not exists.'.format(json_path))
                exit(1)

        return img_list, json_list
 def observe(self):
     while True:
         new_task = self.web_api.get_new_scan(self.web_api.tool_name)
         if type(new_task) is not type([]):
             time.sleep(self.time_wait)
             Logger.error(
                 "Metasploit_observer >> observe >> response not type demand"
             )
             continue
         try:
             for task in new_task:
                 if "id" in task:
                     # update status
                     self.thread.add_task(self.create_scan(task))
         except Exception, ex:
             message = u" Error appear when scanning   "
             Logger.error("Metasploit_observer >> observe >> error : " +
                          str(ex))
             self.web_api.post_notify(message, 1)
         time.sleep(self.time_wait)
Exemple #30
0
 def test_JieKuan3(self):
     u"""借款-3期"""
     params = Params()
     print("*************执行借款用例**************")
     self.driver.find_element_by_id('tv_apply').click()  #点击马上申请
     time.sleep(3)
     try:
         slideApplyBar(self)  #滑动借款条到500
         self.driver.find_element_by_id('rl_borrow_sence').click()  #选择借款场景
         self.driver.find_element_by_id('tv_sence').click()  #家用电器
         self.driver.find_element_by_id('rl_num_periods').click()  #借款周期
         self.driver.find_element_by_id('tv_sence').click()  #选了分3期的
         time.sleep(8)
         edu = self.driver.find_element_by_id('tv_borrow_num').text  #获取借款额度
         num_edu = int(edu)
         if num_edu >= 500:
             self.driver.find_element_by_id(
                 'tv_borrow_immedia').click()  #点击马上借
             time.sleep(3)
             inputText(self, params['applyPwd'])  #输入支付密码,加了延时输入
             time.sleep(8)
             exist = is_resultActivity(self)  #判断是否成功跳转到借款成功页
         else:
             exist = False
             self.driver.find_element_by_id(
                 'tv_borrow_immedia').click()  #点击马上借
             print(u"额度小于500,无法借款")
     except:
         exist = False
         #获取当前方法名作为截图名
         pic_name = get_current_function_name()
         #调用截图方法
         getScreen(self, pic_name)
         #写入日志
         logger = Logger(logname='log.txt',
                         loglevel="INFO",
                         logger=pic_name).getlog()
         logger.error(traceback.format_exc())
     self.assertEqual(exist, True)
 def test_HuanKuan2(self,exist = False):
     u"""还款--多期(全部还款)"""
     params = Params()
     print("*************执行 还款-多期全部还款 用例**************")
     try:
         self.driver.find_element_by_id("rl_repayment").click()           #点击首页中的去还款
         time.sleep(2)
         self.driver.find_element_by_id("tv_state").click()           #选择第一条数据
         self.driver.find_element_by_id('ll_zoom').click()     #选择多期
         swipeUp(self,1200)                    #往上拉页面
         eles = self.driver.find_elements_by_xpath('//android.widget.ListView/android.widget.LinearLayout')      #获取所有期数
         if len(eles) == 12:             #12期
             print("12期")
             self.driver.find_element_by_xpath('//android.widget.ListView/android.widget.LinearLayout[12]/android.widget.LinearLayout[1]/android.widget.RelativeLayout[1]/android.widget.ImageView').click()
         elif len(eles) ==6:              #6期
             print("6期")
             ele = self.driver.find_element_by_xpath('//android.widget.ListView/android.widget.LinearLayout[6]/android.widget.LinearLayout[1]/android.widget.RelativeLayout[1]/android.widget.ImageView').click()
         else:                           #3期
             print("3期")
             ele = self.driver.find_element_by_xpath('//android.widget.ListView/android.widget.LinearLayout[3]/android.widget.LinearLayout[1]/android.widget.RelativeLayout[1]/android.widget.ImageView').click()
         swipeUp(self,1000)         #往上滑动页面,定位还款按钮
         self.driver.find_element_by_id("tv_repayment").click()     # 点击还款
         time.sleep(2)
         self.driver.find_element_by_id("rl_top").click()            #跳转到银行卡管理页,选择第一个
         time.sleep(8)
         inputText(self,params['applyPWD'])            #输入支付密码
         time.sleep(8)
         exist = is_resultActivity(self)            #判断是否成功
     except:
         exist = False
         #获取当前方法名作为截图名
         pic_name = get_current_function_name()
         #调用截图方法
         getScreen(self,pic_name)
         #写入日志
         logger=Logger(logname='log.txt',loglevel="INFO",logger=pic_name).getlog()
         logger.error(traceback.format_exc())
     self.assertEqual(exist, True)
 def test_UpdatePay(self):
     u"""修改支付密码"""
     print("*************执行修改支付密码用例**************")
     params = Params()
     self.driver.find_element_by_id("iv_head").click()
     self.driver.find_element_by_id("rl_pwd_manage").click()     #点击密码管理
     try:
         self.driver.find_element_by_id('tv_changeTranPwd').click()  #点击修改支付密码
         self.driver.find_element_by_id('tv_getAuthCode').click()     #点击获取支付密码
         zf_pwd = input("请输入短信验证码:")    #需要手动输入
         time.sleep(8)
         self.driver.find_element_by_id('et_authcode').send_keys(zf_pwd)
         self.driver.find_element_by_id('tv_next').click()  #点击下一步
         time.sleep(2)
         try:
             #输入支付密码
             inputText(self,params['applyPWD'])    #延时输入
             time.sleep(2)
             inputText(self,params['applyPWD'])    #再次确认输入
             time.sleep(2)
         except:
              pass
         exist = False
         try:
             self.driver.find_element_by_id("inputView").click()    #输入框是否隐藏
             exist = True
         except:
             print("两次输入不一致")
             pass
     except:
         exist = True
         pic_name = get_current_function_name()   #获取方法名
         getScreen(self,pic_name)   #调用截图方法
         #写入日志
         logger=Logger(logname='log.txt',loglevel="INFO",logger=pic_name).getlog()
         logger.info("*************执行修改支付密码用例**************")
         logger.error(traceback.format_exc())
     self.assertEqual(exist,False)         #已跳转,不在修改页
Exemple #33
0
    def login(self):
        data = {
            "email": settings.config["user"]["email"],
            "password": settings.config["user"]["password"]
        }
        try:
            r = self.manager_server.connect("POST",
                                            "/auth/login/",
                                            data=json.dumps(data))
            Logger.info("Before login")
            if r.status_code == 200:
                user_info = r.json()
                if "one-token" in user_info:
                    self.token = user_info["one-token"]
                    self.headers = {
                        "one-token": self.token,
                        "Content-Type": "application/json"
                    }
                    Logger.info("Login Successful!")
                return r

        except Exception, ex:
            Logger.error(" web_service_api >>  login >> error " + str(ex))
Exemple #34
0
class ReadLocator:
    """
    所有定位器写在yaml文件中,实例化此类调用read()方法读取
    :param filename: yaml文件名
    :param page_number: 页数,yaml文件使用‘---’分割页数
    """
    def __init__(self, filename: str, page_number: int):
        self._filename = filename
        if not self._filename.endswith('.yaml'):
            self._filename = filename + '.yaml'
        self._page_number = page_number
        self._all_result = self._read_all_page()
        self._log = Logger('读取定位器').get_logger()

    def _read_all_page(self):
        """
        读取指定页全部数据
        :return: 指定页全部数据
        """
        path = os.path.join(constant.yaml_path, self._filename)
        with open(path, encoding='utf-8') as fp:
            reader = fp.read()
        all_result = yaml.load_all(reader, Loader=yaml.FullLoader)
        return list(all_result)[self._page_number - 1]

    def read(self, locator_name: str):
        """
        根据给定名称获取定位器
        :param locator_name: 定位器名称
        :return: 定位器值
        """
        locator = self._all_result.get(locator_name)
        if locator:
            self._log.debug(f'获取到定位器({locator_name}):{locator}')
            return locator
        else:
            self._log.error('定位器不存在({})!!'.format(locator_name))
Exemple #35
0
class NetworkListener(Thread):
    def __init__(self, listening_address, config, framework):
        super().__init__()
        self._config = config
        self._listening_address = listening_address
        self._port = config['port']
        self._framework = framework
        self._session_socket = None
        self._lock = Lock()
        self._running = False
        self.__connection_count = 0
        self._logger = Logger().get('framework.networklistener.NetworkListener')

    @property
    def connection_count(self):
        with self._lock:
            return self.__connection_count

    @connection_count.setter
    def connection_count(self, val):
        with self._lock:
            self.__connection_count = val

    # Override
    def run(self):
        self._running = True
        self._logger.info('%s plugin listener started on port %d'
                          % (self._config['moduleClass'], self._port))
        while self._running:
            self._session_socket = socket.socket(
                socket.AF_INET, socket.SOCK_STREAM)
            self._session_socket.setsockopt(
                socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
            self._session_socket.bind((self._listening_address, self._port))
            self._session_socket.listen(1)
            self.start_listening(self._session_socket)
            self._session_socket.close()
            self.connection_count += 1
        self._logger.info('%s plugin listener on port %d shutting down'
                          % (self._config['moduleClass'], self._port))
        self._session_socket = None

    def start_listening(self, local_socket):
        try:
            (new_socket, addr) = local_socket.accept()
            if self._running:
                self._logger.info('New connection from %s on port %d'
                                  % (addr, self._port))
                self._framework.spawn(new_socket, self._config)
        except ConnectionAbortedError as e:
            if not self._running:
                return
            raise e
        except OSError as e:
            if e.errno == 22 and not self._running:
                return
            raise e
        except Exception as e:
            self._logger.error('Error on connection: %s' % e)
            raise e

    def shutdown(self):
        self._running = False
        if self._session_socket:
            if platform.system() == 'Linux':
                self._session_socket.shutdown(socket.SHUT_RDWR)
            else:
                self._session_socket.close()
        self.join()
Exemple #36
0
class DataValidator:
    def __init__(self):
        self.config = GlobalConfig()
        self.table_schema = {}
        self.tables = []
        self.log = Logger().get('database.datavalidator.DataValidator')
        self.get_schema_from_database()

    # for updating tables and table schema class variables
    def update_tables_and_schema(self):
        self.table_schema.clear()
        self.tables.clear()
        self.get_schema_from_database()

    def get_schema_from_database(self):
        connection = sqlite3.connect(self.config['Database']['path'])
        cursor = connection.cursor()
        #will want to loop here through all tables found and store each schema
        #as an element in a list, this will require code changes throughout this file
        db_rows = cursor.execute(
            "SELECT name "
            "FROM sqlite_master "
            "WHERE type = 'table';").fetchall()
        #transform list of tuples to a list of strings
        for row in db_rows:
            self.tables.append(row[0])
        for table in self.tables:
            table_def = cursor.execute('PRAGMA table_info(' + table + ');').fetchall()
            self.table_schema[table] = table_def
        cursor.close()

    # return the class level variable tables
    def get_tables(self):
        return self.tables

    # return the class level variable table_schema
    def get_schema(self):
        return self.table_schema

    # Ensure exactly one table is written to at a time
    def check_value_len(self, value):
        if len(value) != 1:
            self.log.error('Plugin tried to save ' +
                           str(len(value)) +
                           'table(s) in one save')
            return False
        return True

    # Checks that the value is actually a dictionary
    def check_value_is_dict(self, value):
        if not isinstance(value, dict):
            self.log.error('Plugin attempted to save non-dictionary type: ' +
                           str(type(value)))
            return False
        return True

    # Checks that the key in the dictionary is a string
    def check_key_in_dict_string(self, value):
        key = get_first_key_value_of_dictionary(value)
        if not isinstance(key, str):
            self.log.error('Table name must be a string: got ' +
                           str(type(key)) +
                           ' instead')
            return False
        return True

    # Checks that the key in the dictionary is
    # a real table name in the database
    def check_key_is_valid_table_name(self,value):
        table_name = get_first_key_value_of_dictionary(value)
        if table_name not in self.tables:
            self.log.error('No such table: ' + table_name)
            return False
        return True

    # Checks that the row data is actually a dictionary
    def check_row_value_is_dict(self,value):
        key = get_first_key_value_of_dictionary(value)
        if not isinstance(value.get(key), dict):
            self.log.error('Row data must be a dictionary: got ' +
                           str(type(value.get(key))) +
                           ' instead')
            return False
        return True

    #checks that all of the keys in the row data are strings
    def check_all_col_names_strings(self,value):
        key = get_first_key_value_of_dictionary(value)
        dict = value.get(key)
        count = len(dict.keys())
        compare = 0
        for key in dict.keys():
            if isinstance(key,str):
                compare += 1
        return count == compare

    # Verifies that no additional columns were provided by a
    # plugin that aren't referred to in the database schema.
    def check_all_col_exist(self, value):
        key = get_first_key_value_of_dictionary(value)
        schema = self.table_schema[key]

        # remove default columns because we do not require the plugin author
        # to provide these
        schema_col_list = remove_default_columns_from_list([row[1] for row in schema])

        # get a list of column names from the table referenced in value
        prep_list = remove_default_columns_from_list(value[key])
        col_list = list(prep_list.keys())

        extra_cols = set(col_list) - set(schema_col_list)
        if len(extra_cols) > 0:
            self.log.error('Unknown column(s) in table \'' + key + '\': ' + str(extra_cols))
            return False
        return True

    # TODO determine how to do this with regex
    def check_data_types(self, value):
        return True

    def run_all_checks(self, value):
        return (self.check_value_len(value) and
                self.check_value_is_dict(value) and
                self.check_key_in_dict_string(value) and
                self.check_key_is_valid_table_name(value) and
                self.check_row_value_is_dict(value) and
                self.check_all_col_names_strings(value) and
                self.check_all_col_exist(value) and
                self.check_data_types(value))
Exemple #37
0
class P0fAgent(Thread):
    def __init__(self, peer_address, framework, session):
        super().__init__()
        self.config = GlobalConfig()
        self.framework = framework
        self.fs_sock = self.config['Framework']['p0f.fs_sock']
        self.log = Logger().get('recon.p0fagent.P0fAgent')
        self.peer_address = peer_address
        self.session = session

    def run(self):
        p0f = P0f(self.fs_sock)
        peer_info = None
        try:
            peer_info = p0f.get_info(self.peer_address)
        except P0fException as e:
            self.log.warn('p0f request failed for ' +
                          self.peer_address +
                          ': ' + str(e))
            return
        except KeyError as e:
            self.log.warn('p0f couldn\'t find any info for ' +
                          self.peer_address)
            return
        except ValueError as e:
            self.log.warn('p0f returned bad data for ' +
                          self.peer_address)
            return
        except FileNotFoundError as e:
            self.log.error('p0f filesystem socket not found')
            return
        except Exception as e:
            self.log.error('unknown p0f error occurred on address ' +
                           self.peer_address + ': ' + str(e))
            return

        # prettify C/null-terminated byte arrays in p0f info dict
        for key in peer_info.keys():
            if type(peer_info[key]) == bytes:
                decoded = peer_info[key].decode('utf-8')
                peer_info[key] = decoded.partition('\x00')[0]
            elif type(peer_info[key]) == datetime:
                peer_info[key] = peer_info[key].isoformat()
            elif type(peer_info[key]) == timedelta:
                peer_info[key] = str(int(peer_info[key].total_seconds()))
            elif type(peer_info[key]) == int:
                peer_info[key] = str(peer_info[key])

        data = { 'p0f': {
                 'session': self.session,
                 'first_seen': peer_info['first_seen'],
                 'last_seen': peer_info['last_seen'],
                 'uptime': peer_info['uptime'],
                 'last_nat': peer_info['last_nat'],
                 'last_chg': peer_info['last_chg'],
                 'distance': peer_info['distance'],
                 'bad_sw': peer_info['bad_sw'],
                 'os_name': peer_info['os_name'],
                 'os_flavor': peer_info['os_flavor'],
                 'os_match_q': peer_info['os_match_q'],
                 'http_name': peer_info['http_name'],
                 'http_flavor': peer_info['http_flavor'],
                 'total_conn': peer_info['total_conn'],
                 'link_type': peer_info['link_type'],
                 'language': peer_info['language']
             }
        }
        self.framework.insert_data(data)

        self.log.debug('p0f info for ' +
                       self.peer_address +
                       ': ' +
                       str(peer_info))