summaryrefslogtreecommitdiff
path: root/server/apps/agentcomm.py
blob: ab507976a6c6217d53d564074d965db1200f5966 (plain)
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}