def check_request_raw(self, request_raw): """ 检查流量数据包中的必要字段是否完整 :param request_raw: :return: """ if not isinstance(request_raw, dict): raise BaseHunterException( "传入的request_raw不是一个dict类型,其类型为{type}".format(type=type(request_raw) if request_raw else None)) keys = ["type", "url", "method", "headers"] miss_keys = [] for key in keys: if key not in request_raw: miss_keys.append(key) if len(miss_keys) > 0: raise RequestParseError(request_raw, miss_keys)
def parse_plugin_file(plugin_file_path): """ warnning: 插件文件路径,这里会存在安全隐患,请按照实际需求考虑是否用imp.load_source :param plugin_file_path: :return: """ import imp from exception.hunter_web_exception import BaseHunterException # 解析插件并且分类 base_checker = imp.load_source('BaseChecker', plugin_file_path) checker_instance = base_checker.Checker() checker_instance.check_plugin_info() # 检测插件是否重名 checker_name = checker_instance.info["name"] if checker_name in load_default_checkers(): raise BaseHunterException("插件%s已经存在,请重新命名" % checker_name) return checker_instance
def get_tasks_url_num(task_id, task_status): """ 获取得到任务以及其对应的扫描url数据统计 :param task_id: :param task_status: :return: """ from model.url import Url from model.user import User query = list() if task_id is not None and task_id != "": try: task_id = int(task_id) except ValueError: raise BaseHunterException("task_id 不是一个数字") query.append(Task.id == task_id) if task_status is not None and task_status != "": query.append(Task.task_status == int(task_status)) if len(query) > 0: tasks = Task.select( Task.receivers_email, Task.task_name, Task.created_time, Task.id, Task.access_key, Task.task_status, Task.hook_rule, User.select(User.user_name).alias('create_user_name').where( User.id == Task.create_user_id), Url.select(fn.COUNT(Url.id)).alias('unscaned_urls_num').where( Url.task_id == Task.id, Url.status != TaskStatus.DONE), Url.select(fn.COUNT(Url.id)).alias('scaned_urls_num').where( Url.task_id == Task.id, Url.status == TaskStatus.DONE)).where( *tuple(query)).execute() else: tasks = Task.select( Task.receivers_email, Task.task_name, Task.created_time, Task.id, Task.access_key, Task.task_status, Task.hook_rule, User.select(User.user_name).alias('create_user_name').where( User.id == Task.create_user_id), Url.select(fn.COUNT(Url.id)).alias('unscaned_urls_num').where( Url.task_id == Task.id, Url.status != TaskStatus.DONE), Url.select(fn.COUNT(Url.id)).alias('scaned_urls_num').where( Url.task_id == Task.id, Url.status == TaskStatus.DONE)).execute() return tasks
def __init__(self): BaseHunterException.__init__(self, "没有从user表中找到符合条件的记录")
def __init__(self, plugin): BaseHunterException.__init__(self, "模块{}未找到".format(plugin))
def __init__(self, info, miss_keys): BaseHunterException.__init__( self, "插件信息{}不完整,待补充的字段有{}".format(info, ','.join(miss_keys)))
def __init__(self): BaseHunterException.__init__(self, "解析http头出错")
def __init__(self, package, miss_keys): BaseHunterException.__init__( self, "{}不完整,请求报文有待补充项,待补充的字段有{}".format(package, ','.join(miss_keys)))
def __init__(self, message): BaseHunterException.__init__(self, message)