|
@ -3,7 +3,7 @@ |
|
|
''' |
|
|
''' |
|
|
from TargetManager import TargetManager # 从模块导入类 |
|
|
from TargetManager import TargetManager # 从模块导入类 |
|
|
#from LLMManager import LLMManager # 同理修正其他导入 |
|
|
#from LLMManager import LLMManager # 同理修正其他导入 |
|
|
from mycode import ControlCenter #控制中心替代LLM--控制中心要实现一定的基础逻辑和渗透测试树的维护。 |
|
|
from mycode.ControlCenter import ControlCenter #控制中心替代LLM--控制中心要实现一定的基础逻辑和渗透测试树的维护。 |
|
|
from myutils.FileManager import FileManager |
|
|
from myutils.FileManager import FileManager |
|
|
from InstructionManager import InstructionManager |
|
|
from InstructionManager import InstructionManager |
|
|
from mycode.DBManager import DBManager |
|
|
from mycode.DBManager import DBManager |
|
@ -19,7 +19,7 @@ class TaskManager: |
|
|
|
|
|
|
|
|
def __init__(self): |
|
|
def __init__(self): |
|
|
self.TargetM = TargetManager() |
|
|
self.TargetM = TargetManager() |
|
|
self.logger = LogHandler.get_logger("TaskManager") |
|
|
self.logger = LogHandler().get_logger("TaskManager") |
|
|
# 生成功能对象 |
|
|
# 生成功能对象 |
|
|
self.DBM = DBManager() #主进程一个DBM |
|
|
self.DBM = DBManager() #主进程一个DBM |
|
|
if not self.DBM.connect(): |
|
|
if not self.DBM.connect(): |
|
@ -35,7 +35,7 @@ class TaskManager: |
|
|
self.batch_num = 0 #一个批次的指令数量 |
|
|
self.batch_num = 0 #一个批次的指令数量 |
|
|
self.long_instr_num = 0 #耗时指令数量 |
|
|
self.long_instr_num = 0 #耗时指令数量 |
|
|
self.long_time_instr = ['nikto'] #耗时操作不计入批量执行的数量,不加不减 |
|
|
self.long_time_instr = ['nikto'] #耗时操作不计入批量执行的数量,不加不减 |
|
|
self.node_queue = queue.Queue() #线程安全 --待执行指令 |
|
|
self.node_queue = [] # |
|
|
|
|
|
|
|
|
self.lock = threading.Lock() #线程锁 |
|
|
self.lock = threading.Lock() #线程锁 |
|
|
self.node_num = 0 #在处理Node线程的处理 |
|
|
self.node_num = 0 #在处理Node线程的处理 |
|
@ -59,7 +59,7 @@ class TaskManager: |
|
|
self.logger.error("数据库连接失败!!") |
|
|
self.logger.error("数据库连接失败!!") |
|
|
|
|
|
|
|
|
#结果入队列---2025-3-18所有的指令均需返回给LLM便于节点状态的更新,所以bres作用要调整。 |
|
|
#结果入队列---2025-3-18所有的指令均需返回给LLM便于节点状态的更新,所以bres作用要调整。 |
|
|
res = {'instr':instr,'reslut':reslut} |
|
|
res = {'执行指令':instr,'结果':reslut} |
|
|
work_node.add_res(res) #入节点结果队列 |
|
|
work_node.add_res(res) #入节点结果队列 |
|
|
|
|
|
|
|
|
def do_worker_th(self): |
|
|
def do_worker_th(self): |
|
@ -67,12 +67,14 @@ class TaskManager: |
|
|
th_DBM = DBManager() |
|
|
th_DBM = DBManager() |
|
|
th_DBM.connect() |
|
|
th_DBM.connect() |
|
|
while self.brun: |
|
|
while self.brun: |
|
|
try: |
|
|
work_node = None |
|
|
with self.lock: |
|
|
with self.lock: |
|
|
|
|
|
if self.node_queue: |
|
|
|
|
|
# 获取测试节点 |
|
|
|
|
|
work_node = self.node_queue.pop(0) |
|
|
self.node_num += 1 |
|
|
self.node_num += 1 |
|
|
|
|
|
|
|
|
#获取测试节点 |
|
|
if work_node: |
|
|
work_node = self.node_queue.get(block=False) |
|
|
|
|
|
#开始执行指令 |
|
|
#开始执行指令 |
|
|
for instruction in work_node.instr_queue: |
|
|
for instruction in work_node.instr_queue: |
|
|
start_time = get_local_timestr() #指令执行开始时间 |
|
|
start_time = get_local_timestr() #指令执行开始时间 |
|
@ -83,7 +85,7 @@ class TaskManager: |
|
|
#保存记录--测试使用 |
|
|
#保存记录--测试使用 |
|
|
with self.lock: |
|
|
with self.lock: |
|
|
self.node_num -=1 |
|
|
self.node_num -=1 |
|
|
if self.node_num ==0 and self.node_queue.empty(): |
|
|
if self.node_num == 0 and len(self.node_queue) == 0: |
|
|
with open("attack_tree", 'wb') as f: |
|
|
with open("attack_tree", 'wb') as f: |
|
|
pickle.dump(TM.CCM.attack_tree, f) |
|
|
pickle.dump(TM.CCM.attack_tree, f) |
|
|
#针对一个节点的指令执行完成后,提交LLM规划下一步操作 |
|
|
#针对一个节点的指令执行完成后,提交LLM规划下一步操作 |
|
@ -92,7 +94,7 @@ class TaskManager: |
|
|
# continue |
|
|
# continue |
|
|
# for node in node_list: |
|
|
# for node in node_list: |
|
|
# self.node_queue.put(node) |
|
|
# self.node_queue.put(node) |
|
|
except queue.Empty: |
|
|
else: |
|
|
time.sleep(10) |
|
|
time.sleep(10) |
|
|
# try: |
|
|
# try: |
|
|
# instruction = self.instr_queue.get(block=False) #quere线程安全,block=false非阻塞get |
|
|
# instruction = self.instr_queue.get(block=False) #quere线程安全,block=false非阻塞get |
|
@ -122,8 +124,9 @@ class TaskManager: |
|
|
know_info = "无" #? |
|
|
know_info = "无" #? |
|
|
#启动--初始化指令 |
|
|
#启动--初始化指令 |
|
|
node_list = self.CCM.start_do(target,self.task_id) |
|
|
node_list = self.CCM.start_do(target,self.task_id) |
|
|
|
|
|
with self.lock: |
|
|
for node in node_list: |
|
|
for node in node_list: |
|
|
self.node_queue.put(node) |
|
|
self.node_queue.append(node) |
|
|
|
|
|
|
|
|
#创建工作线程----2025-3-18调整为一个节点一个线程, |
|
|
#创建工作线程----2025-3-18调整为一个节点一个线程, |
|
|
for i in range(self.max_thread_num): |
|
|
for i in range(self.max_thread_num): |
|
@ -158,8 +161,11 @@ if __name__ == "__main__": |
|
|
#测试执行指令 |
|
|
#测试执行指令 |
|
|
with open("attack_tree", "rb") as f: |
|
|
with open("attack_tree", "rb") as f: |
|
|
TM.CCM.attack_tree = pickle.load(f) |
|
|
TM.CCM.attack_tree = pickle.load(f) |
|
|
with open("node_list", 'rb') as f: |
|
|
# 遍历node,查看有res的数据 |
|
|
TM.node_queue = pickle.load(f) |
|
|
nodes = TM.CCM.attack_tree.traverse_bfs() |
|
|
|
|
|
for node in nodes: |
|
|
|
|
|
if node.instr_queue: # list |
|
|
|
|
|
TM.node_queue.append(node) |
|
|
|
|
|
|
|
|
#创建线程执行指令 |
|
|
#创建线程执行指令 |
|
|
for i in range(TM.max_thread_num): |
|
|
for i in range(TM.max_thread_num): |
|
@ -176,23 +182,27 @@ if __name__ == "__main__": |
|
|
#遍历node,查看有res的数据 |
|
|
#遍历node,查看有res的数据 |
|
|
nodes = TM.CCM.attack_tree.traverse_bfs() |
|
|
nodes = TM.CCM.attack_tree.traverse_bfs() |
|
|
for node in nodes: |
|
|
for node in nodes: |
|
|
if not node.res_quere.empty(): |
|
|
if node.res_quere: #list |
|
|
node_list = TM.CCM.get_llm_instruction(node) |
|
|
node_list = TM.CCM.get_llm_instruction(node) |
|
|
if not node_list:#该节点测试完成 |
|
|
if not node_list:#该节点测试完成 |
|
|
continue |
|
|
continue |
|
|
|
|
|
with TM.lock: |
|
|
for do_node in node_list: |
|
|
for do_node in node_list: |
|
|
TM.node_queue.put(do_node) |
|
|
TM.node_queue.append(do_node) |
|
|
elif test_type ==3: #新目标测试 |
|
|
# 暂存状态-- |
|
|
|
|
|
with open("attack_tree", 'wb') as f: |
|
|
|
|
|
pickle.dump(TM.CCM.attack_tree, f) |
|
|
|
|
|
elif test_type == 3: #新目标测试 |
|
|
# 启动--初始化指令 |
|
|
# 启动--初始化指令 |
|
|
node_list = TM.CCM.start_do("192.168.204.137", 0) |
|
|
node_list = TM.CCM.start_do("192.168.204.137", 0) |
|
|
|
|
|
with TM.lock: |
|
|
for node in node_list: |
|
|
for node in node_list: |
|
|
TM.node_queue.put(node) |
|
|
TM.node_queue.append(node) |
|
|
#暂存状态-- |
|
|
#暂存状态-- |
|
|
with open("attack_tree",'wb') as f: |
|
|
with open("attack_tree",'wb') as f: |
|
|
pickle.dump(TM.CCM.attack_tree,f) |
|
|
pickle.dump(TM.CCM.attack_tree,f) |
|
|
with open("node_list",'wb') as f: |
|
|
elif test_type == 4: #读取messages |
|
|
pickle.dump(TM.node_queue,f) |
|
|
pass |
|
|
|
|
|
|
|
|
else: |
|
|
else: |
|
|
#完整过程测试---要设定终止条件 |
|
|
#完整过程测试---要设定终止条件 |
|
|
pass |
|
|
pass |
|
|