You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
178 lines
6.3 KiB
178 lines
6.3 KiB
from mycode.DBManager import app_DBM
|
|
|
|
class AssetsManager:
|
|
def __init__(self):
|
|
pass
|
|
|
|
def __del__(self):
|
|
pass
|
|
|
|
def get_IP_assets(self,IP,user,safe_rank):
|
|
ip_assets = []
|
|
ip_assets = app_DBM.get_ip_assets_db(IP,user,safe_rank)
|
|
if not ip_assets:
|
|
ip_assets = []
|
|
return ip_assets
|
|
|
|
def get_IP_info(self,IP):
|
|
ip_info = app_DBM.get_ip_info_db(IP)
|
|
if not ip_info:
|
|
ip_info = []
|
|
return ip_info
|
|
|
|
def get_assets_users(self,uname):
|
|
assets_users = app_DBM.get_assets_users_db(uname)
|
|
if not assets_users:
|
|
assets_users = []
|
|
return assets_users
|
|
|
|
def update_assets_users(self,IP,owner_id,itype = 1):
|
|
return app_DBM.update_assets_users_db(IP,owner_id,itype)
|
|
|
|
def get_port_latest(self,ip):
|
|
return app_DBM.get_port_latest_db(ip)
|
|
|
|
def get_port_history(self,ip):
|
|
#拿ip_id
|
|
strsql = "select id,scan_count from ip_assets where ip_address = %s"
|
|
params = (ip,)
|
|
ip_data = app_DBM.safe_do_select(strsql,params,1)
|
|
ip_id = ip_data[0]
|
|
scan_count = ip_data[1]
|
|
# 1) 拿批次
|
|
sql_batches = '''
|
|
SELECT DISTINCT scan_count, scan_time
|
|
FROM port_assets
|
|
WHERE ip_id=%s
|
|
ORDER BY scan_count ASC;
|
|
'''
|
|
batches = app_DBM.safe_do_select(sql_batches, (ip_id,))
|
|
times = [row[1] for row in batches]
|
|
counts = [row[0] for row in batches]
|
|
if len(times) != scan_count:
|
|
print(f"*****数据批次有问题")
|
|
# 2) 拿所有端口数据
|
|
sql_ports = '''
|
|
SELECT port, service, version, status, scan_count
|
|
FROM port_assets
|
|
WHERE ip_id=%s
|
|
ORDER BY port ASC, scan_count ASC;
|
|
'''
|
|
rows = app_DBM.safe_do_select(sql_ports, (ip_id,))
|
|
# 3) 组织成: { port: { service, version, statuses: [...], changed: [...] } }
|
|
from collections import OrderedDict
|
|
port_dict = OrderedDict()
|
|
for port, service, version, status, sc in rows:
|
|
entry = port_dict.setdefault(port, {
|
|
'service': [],
|
|
'version': [],
|
|
'statuses': [],
|
|
'scancount': [],
|
|
'changed': []
|
|
})
|
|
entry['service'].append(service)
|
|
entry['version'].append(version)
|
|
entry['statuses'].append(status)
|
|
entry['scancount'].append(sc)
|
|
# 4) 计算 changed 数组:与前一批次对比
|
|
for port, info in port_dict.items():
|
|
service = info['service']
|
|
version = info['version']
|
|
statuses = info['statuses']
|
|
#scancount = info['scancount'] #执行次序不用对比
|
|
changed = []
|
|
for i in range(len(service)):
|
|
if i == 0:
|
|
changed.append(0) # 第一个批次,默认无变化
|
|
else:
|
|
if service[i] != service[i-1] or version[i] != version[i-1] or statuses[i] != statuses[i-1]:
|
|
changed.append(1)
|
|
else:
|
|
changed.append(0)
|
|
info['changed'] = changed
|
|
return times,port_dict
|
|
|
|
def get_ip_url_latest(self,ip):
|
|
return app_DBM.get_ip_url_latest_db(ip)
|
|
|
|
def get_ip_url_history(self,ip):
|
|
return app_DBM.get_ip_url_history_db(ip)
|
|
|
|
def get_vul_data(self,ip,nodeName,vulType,vulLevel):
|
|
# 先获取该IP最新的task_id
|
|
task_id = app_DBM.get_last_task_by_ip(ip)
|
|
if not task_id:
|
|
return []
|
|
vuls = app_DBM.get_task_vul(task_id, nodeName, vulType, vulLevel)
|
|
return vuls
|
|
|
|
def del_ip_assets(self,ip):
|
|
bsuccess,error = app_DBM.del_ip_assets(ip)
|
|
return bsuccess,error
|
|
|
|
def get_url_assets(self,url,owner,email):
|
|
url_assets = app_DBM.get_url_assets_db(url,owner,email)
|
|
return url_assets
|
|
|
|
def get_url_to_ip(self,url_id):
|
|
last_to_ips,his_to_ip = app_DBM.get_url_to_ip_db(url_id)
|
|
return last_to_ips,his_to_ip
|
|
|
|
def del_url_assets(self,url_id):
|
|
bsuccess, error = app_DBM.del_url_assets_db(url_id)
|
|
return bsuccess, error
|
|
|
|
def get_owners(self,owner, owner_type, contact, tellnum):
|
|
owner_list = []
|
|
owner_list = app_DBM.get_owner_db(owner, owner_type, contact, tellnum)
|
|
return owner_list
|
|
|
|
def add_update_owner(self,owner_data, do_mode):
|
|
'''
|
|
:param owner_data:
|
|
:param do_mode:
|
|
:return:
|
|
'''
|
|
id = owner_data["id"]
|
|
user = owner_data["user"]
|
|
type = owner_data["type"]
|
|
contact = owner_data["contact"]
|
|
phone = owner_data["phone"]
|
|
IDno = owner_data["IOno"]
|
|
if not user or not type or not contact or not phone or not IDno:
|
|
return False, "有信息没有填写,请补充完整!", []
|
|
if do_mode =="add":
|
|
strsql = "select ID from assets_user where ID_num = %s"
|
|
params = (IDno,)
|
|
data = app_DBM.safe_do_select(strsql, params, 1)
|
|
if data:
|
|
return False, "证件号码已经存在,请重新修改", []
|
|
|
|
strsql = "insert into assets_user (itype,uname,tellnum,tell_username,ID_num) values (%s,%s,%s,%s,%s);"
|
|
params = (type,user,phone,contact,IDno)
|
|
bok,new_id = app_DBM.safe_do_sql(strsql,params,1)
|
|
elif do_mode == "edit":
|
|
strsql = "select ID from assets_user where ID_num = %s and ID <> %s"
|
|
params = (IDno,id)
|
|
data = app_DBM.safe_do_select(strsql, params, 1)
|
|
if data:
|
|
return False, "证件号码已经存在,请重新修改", []
|
|
|
|
strsql = "update assets_user set itype=%s,uname=%s,tellnum=%s,tell_username=%s,ID_num=%s where ID=%s;"
|
|
params = (type, user, phone, contact, IDno,id)
|
|
bok,_ = app_DBM.safe_do_sql(strsql,params)
|
|
else:
|
|
return False,"操作模式超出预期",[]
|
|
|
|
if bok:
|
|
owner_list = app_DBM.get_owner_db("", "", "", "")
|
|
return True,"",owner_list
|
|
else:
|
|
return False, "数据库操作失败", []
|
|
|
|
def del_owner(self,id):
|
|
bsuccess,error = app_DBM.del_owner_db(id)
|
|
return bsuccess,error
|
|
|
|
|
|
g_AssetsM = AssetsManager()
|