Add device scan results for admins

This commit is contained in:
sepehr 2024-08-13 18:04:40 +03:30
parent 69791457b8
commit ba155aa3d0
2 changed files with 32 additions and 6 deletions

View file

@ -37,3 +37,15 @@ def scan_network():
return buildResponse({'status': status},200) return buildResponse({'status': status},200)
else: else:
return buildResponse({'status': status},200) return buildResponse({'status': status},200)
@app.route('/api/scanner/results', methods = ['POST'])
@login_required(role='admin',perm={'device':'full'})
def scan_resutls():
"""Do scan requested network for given ip range to find mikrotik devices"""
input = request.json
tasks=db_tasks.TaskResults
#Get tasks that is task_type is ip-scan
tasks=tasks.select().where(tasks.task_type=='ip-scan')
tasks=list(tasks.dicts())
#Get task results
return buildResponse({'status': True,'data':tasks},200)

View file

@ -262,6 +262,15 @@ def scan_with_ip(*args, **kwargs):
task.status=0 task.status=0
task.save() task.save()
return True return True
now=datetime.datetime.now(datetime.timezone.utc)
#datetime to string fomat %Y-%m-%dT%H:%M:%S
now=now.strftime("%Y-%m-%dT%H:%M:%S")
info={
'username':kwargs.get('username','Unknown'),
'start_ip':start_ip,
'end_ip':end_ip,
'created':now
}
start_ip = ipaddress.IPv4Address(start_ip) start_ip = ipaddress.IPv4Address(start_ip)
end_ip = ipaddress.IPv4Address(end_ip) end_ip = ipaddress.IPv4Address(end_ip)
scan_port=kwargs.get('port',False) scan_port=kwargs.get('port',False)
@ -270,11 +279,9 @@ def scan_with_ip(*args, **kwargs):
mikrotiks=[] mikrotiks=[]
scan_results=[] scan_results=[]
dev_number=0 dev_number=0
info={
'user':kwargs.get('user','Unknown'),
'start_ip':start_ip,
'end_ip':end_ip
}
for ip_int in range(int(start_ip), int(end_ip)): for ip_int in range(int(start_ip), int(end_ip)):
ip=str(ipaddress.IPv4Address(ip_int)) ip=str(ipaddress.IPv4Address(ip_int))
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
@ -389,9 +396,15 @@ def scan_with_ip(*args, **kwargs):
dev_number+=1 dev_number+=1
log.error(e) log.error(e)
continue continue
else:
scan_results.append({})
scan_results[dev_number]['ip']=ip
scan_results[dev_number]['added']=False
scan_results[dev_number]['faileres']="Not MikroTik or Device/Api Port not accessible"
dev_number+=1
sock.close() sock.close()
try: try:
db_tasks.add_task_result('ip-scan', json.dumps(scan_results),json.dumps(info)) db_tasks.add_task_result('ip-scan', json.dumps(scan_results),json.dumps(info,default=serialize_datetime))
except: except:
pass pass
#ugly hack to reset sequnce number if device id #ugly hack to reset sequnce number if device id
@ -426,6 +439,7 @@ def exec_snipet(*args, **kwargs):
if not task.status: if not task.status:
task.status=1 task.status=1
task.save() task.save()
now=datetime.datetime.now()
default_ip=kwargs.get('default_ip',False) default_ip=kwargs.get('default_ip',False)
try: try:
if kwargs.get('devices',False) and kwargs.get('task',False): if kwargs.get('devices',False) and kwargs.get('task',False):