Skip to content
Snippets Groups Projects
Commit 4024a49a authored by qweqweasdasd's avatar qweqweasdasd
Browse files

Added multiple retries during connection creation

parent 2b6adbfc
No related branches found
No related tags found
1 merge request!6Added multiple retries during connection creation
Pipeline #89309 passed
......@@ -10,49 +10,65 @@ from sys import argv, exit
import socket
import os
def get_version():
def get_version_old():
with Gmp(connection, transform=transform) as gmp:
gmp.authenticate(auth_name, auth_passwd)
pretty_print(gmp.get_version())
def create_connection():
connection_retries = 5
retry = connection_retries
while(retry > 0):
try:
gmp = Gmp(connection, transform=transform)
gmp.authenticate(auth_name, auth_passwd)
return gmp
except:
print("WARNING: Connection error with the gmp endpoint. Remaining {retry} retries")
retry -= 1
sleep(0.5)
raise Exception("Impossible connect to the gmp endpoint after 5 retries")
def get_version():
gmp = create_connection()
res = gmp.get_version()
pretty_print(res)
########## PORT LIST ##################################
def create_port_list(port_list_name, ports):
with Gmp(connection, transform=transform) as gmp:
gmp.authenticate(auth_name, auth_passwd)
res = gmp.create_port_list(port_list_name, ','.join(ports))
status = res.xpath('@status')[0]
status_text = res.xpath('@status_text')[0]
if status == "201":
id = res.xpath('@id')[0]
return {'name': port_list_name, 'id': id}
else:
msg = f"ERROR during Port list creation. Status code: {status}, msg: {status_text}"
raise Exception(msg)
gmp = create_connection()
res = gmp.create_port_list(port_list_name, ','.join(ports))
status = res.xpath('@status')[0]
status_text = res.xpath('@status_text')[0]
if status == "201":
id = res.xpath('@id')[0]
return {'name': port_list_name, 'id': id}
else:
msg = f"ERROR during Port list creation. Status code: {status}, msg: {status_text}"
raise Exception(msg)
def get_port_lists(filter_str="rows=-1"):
l_o = []
with Gmp(connection, transform=transform) as gmp:
gmp.authenticate(auth_name, auth_passwd)
res = gmp.get_port_lists(filter_string=filter_str)
for pl in res.xpath('port_list'):
o = dict()
o['name'] = pl.xpath('name/text()')[0]
o['id'] = pl.xpath('@id')[0]
o['in_use'] = pl.xpath('in_use/text()')[0]
l_o.append(o)
gmp = create_connection()
res = gmp.get_port_lists(filter_string=filter_str)
for pl in res.xpath('port_list'):
o = dict()
o['name'] = pl.xpath('name/text()')[0]
o['id'] = pl.xpath('@id')[0]
o['in_use'] = pl.xpath('in_use/text()')[0]
l_o.append(o)
return l_o
def delete_port_list(port_list):
with Gmp(connection, transform=transform) as gmp:
gmp.authenticate(auth_name, auth_passwd)
res = gmp.delete_port_list(port_list['id'])
status = res.xpath('@status')[0]
status_text = res.xpath('@status_text')[0]
if status == "200":
print(f"Port_list with id: {port_list['id']} and name: {port_list['name']} DELETED")
else:
print(f"ERROR {status}: {status_text}")
gmp = create_connection()
res = gmp.delete_portlist(port_list['id'])
status = res.xpath('@status')[0]
status_text = res.xpath('@status_text')[0]
if status == "200":
print(f"Port_list with id: {port_list['id']} and name: {port_list['name']} DELETED")
else:
print(f"ERROR {status}: {status_text}")
def get_or_create_port_list(port_list_name, ports):
res = get_port_lists(port_list_name)
......@@ -69,48 +85,45 @@ def get_or_create_port_list(port_list_name, ports):
def create_target(name,ip,port_list,ovs_ssh_credential):
o = dict()
with Gmp(connection, transform=transform) as gmp:
gmp.authenticate(auth_name, auth_passwd)
res = gmp.create_target(
name=name,
comment = "",
hosts=[ip],
port_list_id = port_list['id'],
ssh_credential_id = ovs_ssh_credential['id'],
alive_test=AliveTest('Consider Alive'))
status = res.xpath('@status')[0]
status_text = res.xpath('@status_text')[0]
if status == "201":
id = res.xpath('@id')[0]
return {'name': name, 'id': id}
else:
msg = f"ERROR during Target creation. Status code: {status}, msg: {status_text}"
raise Exception(msg)
gmp = create_connection()
res = gmp.create_target(
name=name,
comment = "",
hosts=[ip],
port_list_id = port_list['id'],
ssh_credential_id = ovs_ssh_credential['id'],
alive_test=AliveTest('Consider Alive'))
status = res.xpath('@status')[0]
status_text = res.xpath('@status_text')[0]
if status == "201":
id = res.xpath('@id')[0]
return {'name': name, 'id': id}
else:
msg = f"ERROR during Target creation. Status code: {status}, msg: {status_text}"
raise Exception(msg)
def get_targets(filter_str):
res = []
with Gmp(connection, transform=transform) as gmp:
gmp.authenticate(auth_name, auth_passwd)
targets = gmp.get_targets(filter_string=filter_str)
for target in targets.xpath('target'):
o = dict()
o['name'] = target.xpath('name/text()')[0]
o['hosts'] = target.xpath('hosts/text()')[0]
o['id'] = target.xpath('@id')[0]
o['in_use'] = target.xpath('in_use/text()')[0]
res.append(o)
gmp = create_connection()
targets = gmp.get_targets(filter_string=filter_str)
for target in targets.xpath('target'):
o = dict()
o['name'] = target.xpath('name/text()')[0]
o['hosts'] = target.xpath('hosts/text()')[0]
o['id'] = target.xpath('@id')[0]
o['in_use'] = target.xpath('in_use/text()')[0]
res.append(o)
return res
def delete_target(target):
with Gmp(connection, transform=transform) as gmp:
gmp.authenticate(auth_name, auth_passwd)
res = gmp.delete_target(target['id'])
status = res.xpath('@status')[0]
status_text = res.xpath('@status_text')[0]
if status == "200":
print(f"Port_list with id: {target['id']} and name: {target['name']} DELETED")
else:
print(f"ERROR {status}: {status_text}")
gmp = create_connection()
res = gmp.delete_target(target['id'])
status = res.xpath('@status')[0]
status_text = res.xpath('@status_text')[0]
if status == "200":
print(f"Port_list with id: {target['id']} and name: {target['name']} DELETED")
else:
print(f"ERROR {status}: {status_text}")
def get_or_create_target(target_name,ip,port_list,ovs_ssh_credential):
res = get_targets(target_name)
......@@ -139,40 +152,38 @@ def search_and_delete_all_targets(target_name):
def create_task(name, config, target, scanner):
o = dict()
with Gmp(connection, transform=transform) as gmp:
gmp.authenticate(auth_name, auth_passwd)
res = gmp.create_task(
name=name,
config_id=config['id'],
target_id=target['id'],
scanner_id=scanner['id'])
status = res.xpath('@status')[0]
status_text = res.xpath('@status_text')[0]
if status == "201":
id = res.xpath('@id')[0]
return {'name': name, 'id': id}
else:
msg = f"ERROR during Task creation. Status code: {status}, msg: {status_text}"
raise Exception(msg)
gmp = create_connection()
res = gmp.create_task(
name=name,
config_id=config['id'],
target_id=target['id'],
scanner_id=scanner['id'])
status = res.xpath('@status')[0]
status_text = res.xpath('@status_text')[0]
if status == "201":
id = res.xpath('@id')[0]
return {'name': name, 'id': id}
else:
msg = f"ERROR during Task creation. Status code: {status}, msg: {status_text}"
raise Exception(msg)
def get_tasks(filter_str):
res = []
with Gmp(connection, transform=transform) as gmp:
gmp.authenticate(auth_name, auth_passwd)
tasks = gmp.get_tasks(filter_string=filter_str)
for task in tasks.xpath('task'):
o = dict()
o['name'] = task.xpath('name/text()')[0]
o['id'] = task.xpath('@id')[0]
o['progress'] = task.xpath('progress/text()')[0]
o['in_use'] = task.xpath('in_use/text()')[0]
o['status'] = task.xpath('status/text()')[0]
o['target_id'] = task.xpath('target/@id')[0]
try:
o['report_id'] = task.xpath('last_report/report/@id')[0]
except:
pass
res.append(o)
gmp = create_connection()
tasks = gmp.get_tasks(filter_string=filter_str)
for task in tasks.xpath('task'):
o = dict()
o['name'] = task.xpath('name/text()')[0]
o['id'] = task.xpath('@id')[0]
o['progress'] = task.xpath('progress/text()')[0]
o['in_use'] = task.xpath('in_use/text()')[0]
o['status'] = task.xpath('status/text()')[0]
o['target_id'] = task.xpath('target/@id')[0]
try:
o['report_id'] = task.xpath('last_report/report/@id')[0]
except:
pass
res.append(o)
return res
def get_or_create_task(task_name, config, target, scanner):
......@@ -188,22 +199,21 @@ def get_or_create_task(task_name, config, target, scanner):
def get_all_tasks():
res = []
with Gmp(connection, transform=transform) as gmp:
gmp.authenticate(auth_name, auth_passwd)
tasks = gmp.get_tasks(filter_string="rows=-1")
for task in tasks.xpath('task'):
o = dict()
o['name'] = task.xpath('name/text()')[0]
o['id'] = task.xpath('@id')[0]
o['progress'] = task.xpath('progress/text()')[0]
o['in_use'] = task.xpath('in_use/text()')[0]
o['status'] = task.xpath('status/text()')[0]
o['target_id'] = task.xpath('target/@id')[0]
try:
o['report_id'] = task.xpath('last_report/report/@id')[0]
except:
pass
res.append(o)
gmp = create_connection()
tasks = gmp.get_tasks(filter_string="rows=-1")
for task in tasks.xpath('task'):
o = dict()
o['name'] = task.xpath('name/text()')[0]
o['id'] = task.xpath('@id')[0]
o['progress'] = task.xpath('progress/text()')[0]
o['in_use'] = task.xpath('in_use/text()')[0]
o['status'] = task.xpath('status/text()')[0]
o['target_id'] = task.xpath('target/@id')[0]
try:
o['report_id'] = task.xpath('last_report/report/@id')[0]
except:
pass
res.append(o)
return res
def search_and_delete_all_tasks(filter_str):
......@@ -212,27 +222,25 @@ def search_and_delete_all_tasks(filter_str):
delete_task(task)
def start_task(task):
with Gmp(connection, transform=transform) as gmp:
gmp.authenticate(auth_name, auth_passwd)
res = gmp.start_task(task['id'])
task['report_id'] = res.xpath('report_id/text()')[0]
gmp = create_connection()
res = gmp.start_task(task['id'])
task['report_id'] = res.xpath('report_id/text()')[0]
return task
def stop_task(task):
with Gmp(connection, transform=transform) as gmp:
gmp.authenticate(auth_name, auth_passwd)
pretty_print(gmp.stop_task(task['id']))
gmp = create_connection()
res = gmp.stop_task(task['id'])
pretty_print(res)
def delete_task(task):
with Gmp(connection, transform=transform) as gmp:
gmp.authenticate(auth_name, auth_passwd)
res = gmp.delete_task(task['id'])
status = res.xpath('@status')[0]
status_text = res.xpath('@status_text')[0]
if status == "200":
print(f"Target with id: {task['id']} and name: {task['name']} DELETED")
else:
print(f"ERROR {status}: {status_text}")
gmp = create_connection()
res = gmp.delete_task(task['id'])
status = res.xpath('@status')[0]
status_text = res.xpath('@status_text')[0]
if status == "200":
print(f"Target with id: {task['id']} and name: {task['name']} DELETED")
else:
print(f"ERROR {status}: {status_text}")
############## REPORTS #####################################3
......@@ -245,19 +253,17 @@ class report_formats:
xml = "a994b278-1f62-11e1-96ac-406186ea4fc5"
def get_report_formats():
with Gmp(connection, transform=transform) as gmp:
gmp.authenticate(auth_name, auth_passwd)
res = gmp.get_report_formats()
for f in res.xpath('report_format'):
name = f.xpath('name/text()')[0]
id = f.xpath('@id')[0]
print(id,name)
gmp = create_connection()
res = gmp.get_report_formats()
for f in res.xpath('report_format'):
name = f.xpath('name/text()')[0]
id = f.xpath('@id')[0]
print(id,name)
def get_report_format(id):
with Gmp(connection, transform=transform) as gmp:
gmp.authenticate(auth_name, auth_passwd)
res = gmp.get_report_formats()
pretty_print(res)
gmp = create_connection()
res = gmp.get_report_formats()
pretty_print(res)
def get_progress(task):
task_info = get_tasks(task['id'])[0]
......@@ -279,64 +285,58 @@ def wait_for_task_completition(task, timeout=3600):
sleep(60)
def save_report(task,report_format_id, report_filename ):
with Gmp(connection, transform=transform) as gmp:
gmp.authenticate(auth_name, auth_passwd)
res = gmp.get_report(task['report_id'],
report_format_id=report_format_id,
ignore_pagination=True,
details="1")
code = str(res.xpath('report/text()')[0])
with open(report_filename, "wb") as fh:
fh.write(base64.b64decode(code))
gmp = create_connection()
res = gmp.get_report(task['report_id'],
report_format_id=report_format_id,
ignore_pagination=True,
details="1")
code = str(res.xpath('report/text()')[0])
with open(report_filename, "wb") as fh:
fh.write(base64.b64decode(code))
def save_severity_report(task, severity_filename):
dict_severity = {"Log": 0, "Low": 1, "Medium": 2, "High": 3}
with Gmp(connection, transform=transform) as gmp:
gmp.authenticate(auth_name, auth_passwd)
res = gmp.get_report(task['report_id'],
report_format_id=report_formats.anonymous_xml,
ignore_pagination=True,
details="1")
severities = res.xpath('report/report/ports/port/threat/text()')
old_num_severity = 0
severity = "Log"
for sev in severities:
if dict_severity[sev] > old_num_severity:
old_num_severity = dict_severity[sev]
severity = sev
with open(severity_filename, "w") as f:
f.write(severity)
gmp = create_connection()
res = gmp.get_report(task['report_id'],
report_format_id=report_formats.anonymous_xml,
ignore_pagination=True,
details="1")
severities = res.xpath('report/report/ports/port/threat/text()')
old_num_severity = 0
severity = "Log"
for sev in severities:
if dict_severity[sev] > old_num_severity:
old_num_severity = dict_severity[sev]
severity = sev
with open(severity_filename, "w") as f:
f.write(severity)
def get_severity(task):
dict_severity = {"Log": 0, "Low": 1, "Medium": 2, "High": 3}
with Gmp(connection, transform=transform) as gmp:
gmp.authenticate(auth_name, auth_passwd)
res = gmp.get_report(task['report_id'],
report_format_id=report_formats.anonymous_xml,
ignore_pagination=True,
details="1")
severities = res.xpath('report/report/ports/port/threat/text()')
old_num_severity = 0
severity = "Log"
for sev in severities:
if dict_severity[sev] > old_num_severity:
old_num_severity = dict_severity[sev]
severity = sev
return severity
gmp = create_connection()
res = gmp.get_report(task['report_id'],
report_format_id=report_formats.anonymous_xml,
ignore_pagination=True,
details="1")
severities = res.xpath('report/report/ports/port/threat/text()')
old_num_severity = 0
severity = "Log"
for sev in severities:
if dict_severity[sev] > old_num_severity:
old_num_severity = dict_severity[sev]
severity = sev
return severity
def get_reports(filter_str="rows=-1"):
lo = []
with Gmp(connection, transform=transform) as gmp:
gmp.authenticate(auth_name, auth_passwd)
reports = gmp.get_reports(filter_string = filter_str)
for report in reports.xpath('report'):
o = dict()
o['task_name'] = report.xpath('task/name/text()')[0]
o['id'] = report.xpath('@id')[0]
lo.append(o)
return lo
gmp = create_connection()
reports = gmp.get_reports(filter_string = filter_str)
for report in reports.xpath('report'):
o = dict()
o['task_name'] = report.xpath('task/name/text()')[0]
o['id'] = report.xpath('@id')[0]
lo.append(o)
return lo
def get_numeric_severity(severity):
if severity == "Log":
......@@ -392,9 +392,9 @@ def import_dep_info(file_path, endpoints_to_scan):
else:
host = url
if prefix == "https":
port = 443
port = '443'
elif prefix == 'http':
port = 80
port = '80'
else:
raise Exception(f"Impossible to parse the endpoint port. Endpoint: {endpoint}")
print(f"Endpoint: {host}:{port}")
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment