1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
# 代理通信与注册接口
import random
from apiflask import APIBlueprint, Schema
from apiflask.fields import String, Integer, List, Nested, Boolean, DateTime
from apiflask.validators import OneOf
from apps.util import fake
bp = APIBlueprint("代理管理接口集合", __name__, url_prefix="/agent")
class agent(Schema):
id = String()
ipaddr = List(String())
atype = String(validate=OneOf(["渗透攻击", "状态感知", "参数感知"]))
status = Boolean()
idle = Boolean()
port = Integer()
sys = String()
cpu_num = Integer()
mem = String()
start_time = DateTime()
# 代理注册接口
@bp.post("/register", )
@bp.doc("代理注册接口", "返回分配给代理的编号值", hide=True)
@bp.input({
# 代理类型
"type": String(required=True, validate=OneOf(["gjst", "mbgz", "ztgz"])),
# 代理的通信端口
"port": Integer(required=True),
# 代理所在的操作系统
"sys": String()
})
def register_agent(query_data):
print(query_data)
# 代理任务下发
def deliver_task():
pass
# 代理输出接收
@bp.post("/res")
@bp.doc("代理输出消息接收接口", hide=True)
# TODO:代理输出接收接口实现
def task_ret():
return "ok"
@bp.get("/")
@bp.doc("代理信息获取接口")
@bp.input({
"page": Integer(load_default=1),
"per_page": Integer(load_default=10)
}, location="query")
@bp.output({
"code": Integer(),
"agent_data": List(Nested(agent())),
"total": Integer()
})
def agent_info(query_data):
per_page = query_data["per_page"]
page = query_data["page"]
agent_list = []
# TODO:接口数据库贯通实现
for i in range(per_page):
agent_list.append({
"id": fake.unique.random_int(),
"ipaddr": [fake.ipv4_public(), fake.ipv6()],
"atype": fake.word(ext_word_list=["参数感知", "状态感知", "攻击渗透"]),
"status": random.choice([True, False]),
"idle": random.choice([True, False]),
"port": random.randint(1000, 65534),
"sys": random.choice(["Linux", "Windows", "Macos"]),
"cpu_num": 4,
"mem": random.choice(["4", "8", "16", "32"]) + "GB(" + str(
'{:.2f}'.format(100 * random.random())) + "%可用)",
"start_time": fake.date_time_between(start_date="-1y")})
return {"code": 200, "agent_data": agent_list, "total": 10 * per_page}
|