diff options
| author | handingkang <[email protected]> | 2024-04-16 18:55:05 +0800 |
|---|---|---|
| committer | handingkang <[email protected]> | 2024-04-16 18:55:05 +0800 |
| commit | aa5a97873cafb15c105342bae14c5498d48d7e4e (patch) | |
| tree | e47f60bd7f3a6b3ca9a27881f206238f291d5955 | |
| parent | 97bd83cdc1953a1169ad30cd04b476fa41268ef1 (diff) | |
接口定义同步并完善
| -rw-r--r-- | server/apps/sysmange.py | 12 | ||||
| -rw-r--r-- | server/apps/target.py | 47 | ||||
| -rw-r--r-- | server/apps/task.py | 73 |
3 files changed, 101 insertions, 31 deletions
diff --git a/server/apps/sysmange.py b/server/apps/sysmange.py index 9f391c7..4143d5c 100644 --- a/server/apps/sysmange.py +++ b/server/apps/sysmange.py @@ -23,7 +23,9 @@ class User(Schema): "page": Integer(load_default=1) }, location='query') @bp.output({ - "data": List(Nested(User())) + "code": Integer(), + "data": List(Nested(User())), + "total": Integer() }) def list_user(query_data): # TODO:具体实现 @@ -41,7 +43,7 @@ def list_user(query_data): "created_by": "管理员", "group": "Admin" }) - return {"data": user_list} + return {"code": 200, "data": user_list} @bp.post("/") @@ -52,7 +54,11 @@ def list_user(query_data): "pwd": String(required=True), "cur_user": String(load_default="Root") }) + "code": Integer(), + "msg": String() +}) def create_user(json_data): # TODO:具体实现 print(json_data) - return {"msg": "ok"} + return {"code": 200, "msg": "ok"} diff --git a/server/apps/target.py b/server/apps/target.py index 98a5294..0a47599 100644 --- a/server/apps/target.py +++ b/server/apps/target.py @@ -56,6 +56,7 @@ class Delay(Schema): class DelayOut(Schema): + code = Integer() delay_data = List(Nested(Delay())) @@ -77,7 +78,7 @@ def get_pernode_delay(query_data, type): threads.append(mythread) for t in threads: t.join() - return {'delay_data': ans} + return {"code": 200, 'delay_data': ans} threadLock = threading.Lock() @@ -175,6 +176,7 @@ from dns import resolver 'qtype': String(required=True, validate=OneOf(['A', 'AAAA', "CNAME", "NS"])) }, location='query') @bp.output({ + "code": Integer(), "ans": List(Dict(String(validate=ContainsOnly(["rrset"])), String())) }) def record(query_data): @@ -209,18 +211,23 @@ def record(query_data): if myAnswers.rrset is not None: for r in myAnswers.rrset: ans.append({"rrset": str(r)}) - return {'ans': ans} + return {"code": 200, 'ans': ans} @bp.get("/") [email protected]("目标信息获取接口", "返回目标信息,已测试") [email protected]("(表格)目标信息获取接口", "返回目标信息") @bp.input({ + "protocol": String(validate=OneOf(['IPv6', 'DNSSEC', "DoH", "DoT"])), + "cou": String(), + "isp": String(), "per_page": Integer(load_default=10), "page": Integer(load_default=1), "ip": IP(load_default=None) }, location='query') @bp.output({ - "data": List(Nested(Target())) + "code": Integer(), + "data": List(Nested(Target())), + "total": Integer() }) def target_info(query_data): per_page = query_data["per_page"] @@ -253,4 +260,34 @@ def target_info(query_data): # 原数据的值赋给经过映射之后的键 target[target_map[k]] = r[k] target_list.append(target) - return {"data": target_list} + # TODO:total + return {"code": 200, "data": target_list} + + [email protected]("/filter") [email protected]("目标可筛选信息获取接口") + "code": Integer(), + "proto": List(String()), + "isp": List(String()), + "cou": List(String()) +}) +# TODO:实现 +def filter_info(): + proto = ["IPv6", "DNSSEC", "DoH", "DoT"] + isp = ["google", "cloudflare", "阿里云", "DNSPod", "quad9"] + cou = ["美国", "中国", "日本", "澳大利亚", "新加坡"] + return {"code": 200, "proto": proto, "isp": isp, "cou": cou} + + [email protected]("/map") [email protected]("地图信息获取接口", hide=True) + "code": Integer(), + "proto": List(String()), + "isp": List(String()), + "cou": List(String()) +}) +def map_info(query_data): + # TODO:实现 + return {"code": 200} diff --git a/server/apps/task.py b/server/apps/task.py index b5edae1..c3d36ce 100644 --- a/server/apps/task.py +++ b/server/apps/task.py @@ -45,15 +45,17 @@ class TaskState(Schema): policy_name = String() # 策略参数 policy_param = String() - # 执行输出 - policy_output = List(Nested(TaskLog())) + # 执行策略编号 + policy_id = String() # 效果评估 policy_status = String() # 创建任务接口 @bp.post("/create") [email protected]("任务创建接口", "字段含义详见task.py文件注释") [email protected]("任务创建接口", "部分字段值的映射关系:</br>" + + "policy 期望策略,可选参数范围及对应含义为:,auto-自动,ddos-拒绝服务,sjqp-数据欺骗</br>" + + "scan 状态感知方式,可选参数范围及对应含义为:auto-自动,icmp-icmp/v6时延,tcp-tcp时延,dns-dns时延,record-记录正确性验证") @bp.input({ # 任务名称 "name": String(), @@ -68,7 +70,7 @@ class TaskState(Schema): # 期望策略 "policy": String(validate=OneOf(["auto", "ddos", "sjqp"])), # 状态感知方式 - "scan": String(validate=OneOf(["auto", "delay", "record"])), + "scan": String(validate=OneOf(["auto", "icmp", "dns", "tcp", "record"])), # 策略切换时限 "policy_time": Integer(), # 任务执行时限 @@ -76,10 +78,14 @@ class TaskState(Schema): # 运行配置 "run_flag": String(validate=OneOf(["now", "man"])) }) + "code": Integer(), + "msg": String() +}) # TODO:创建任务接口具体实现 def make_task(json_data): print(json_data) - return {"msg": "ok"} + return {"code": 200, "msg": "ok"} opsmap = {"start": "开始", "stop": "暂停", "cancel": "停止"} @@ -92,10 +98,14 @@ opsmap = {"start": "开始", "stop": "暂停", "cancel": "停止"} "taskid": String(required=True), "ops": String(required=True, validate=OneOf(["start", "stop", "cancel"])) }) + "code": Integer(), + "msg": String(), +}) # TODO:操作任务开始停止控制接口具体实现 def ops_task(json_data): ops = opsmap[json_data["ops"]] - return {"msg": "任务" + json_data["taskid"] + "已" + ops} + return {"code": 200, "msg": "任务" + json_data["taskid"] + "已" + ops} # 查询任务列表接口 @@ -106,7 +116,9 @@ def ops_task(json_data): "per_page": Integer(load_default=10) }, location="query") @bp.output({ - "data": List(Nested(Task())) + "code": Integer(), + "data": List(Nested(Task())), + "total": Integer() }) # TODO:查询任务状态接口具体实现 def tasks_state(query_data): @@ -123,7 +135,7 @@ def tasks_state(query_data): "create_time": fake.date_time_between(start_date="-1y"), "status": random.choice(["working", "stop", "finish"]) }) - return {"data": task_list} + return {"code": 200, "data": task_list} # 任务详情接口 @@ -133,6 +145,7 @@ def tasks_state(query_data): "taskid": String(required=True), }, location="query") @bp.output({ + "code": Integer(), "data": List(Nested(TaskState())) }) # TODO:任务详情接口具体实现 @@ -146,13 +159,7 @@ def task_info(query_data): "start_time": fake.date_time_between(start_date="-1y"), "policy_name": random.choice(["IPv6", "DNSSEC", "DoT", "DoH"]) + " " + random.choice(["DDoS", "数据欺骗"]), "policy_param": random.choice(["攻击速率: 1000pps", "目标域名: www.google.com | 目标记录: NS attack.com"]), - "policy_output": [{ - "time": fake.date_time_between(start_date="-1y"), - "ip": "192.168.1.1", - "targetip": "2406:1234:1234:1234:1234:1234:1234:1234", - "level": random.choice(["INFO", "WARNING", "ERROR"]), - "info": fake.text(max_nb_chars=20, ext_word_list=None) - } for _ in range(20)], + "policy_id": str(fake.random.randint(1, 10000)), "policy_status": "无效;原因为:超时未成功" }) # 当前正在执行的策略 @@ -160,13 +167,33 @@ def task_info(query_data): "start_time": datetime.datetime.now(), "policy_name": random.choice(["IPv6", "DNSSEC", "DoT", "DoH"]) + " " + random.choice(["DDoS", "数据欺骗"]), "policy_param": random.choice(["攻击速率: 1000pps", "目标域名: www.google.com | 目标记录: NS attack.com"]), - "policy_output": [{ - "time": fake.date_time_between(start_date="-1y"), - "ip": "192.168.1.1", - "targetip": "2406:1234:1234:1234:1234:1234:1234:1234", - "level": random.choice(["INFO", "WARNING", "ERROR"]), - "info": fake.text(max_nb_chars=20, ext_word_list=None) - } for _ in range(20)], + "policy_id": str(fake.random.randint(1, 10000)), "policy_status": "评估中" }) - return {"data": task_state_list} + return {"code": 200, "data": task_state_list} + + [email protected]("/tp") [email protected]("任务策略执行日志获取接口") + "id": String(required=True), + "per_page": Integer(load_default=10), + "page": Integer(load_default=1) +}, location="query") + "code": Integer(), + "data": List(Nested(TaskLog())), + "total": Integer() +}) +def taskpolicy_log(query_data): + per_page = query_data["per_page"] + page = query_data["page"] + policy_output = [{ + "time": fake.date_time_between(start_date="-1y"), + "ip": "192.168.1.1", + "targetip": "2406:1234:1234:1234:1234:1234:1234:1234", + "level": random.choice(["INFO", "WARNING", "ERROR"]), + "info": fake.text(max_nb_chars=20, ext_word_list=None) + } for _ in range(per_page)] + + return {"code": 200, "data": policy_output, "total": 10 * per_page} |
