Beispiel #1
0
def openvas_download(request, id):
    scanner = VulnscanManager("localhost", openvas_username, openvas_password)
    task = openvas_requests.objects.get(id=id)
    if task.state == "Finished":
        result = openvas_results.objects.get(id=task.id)
        print(result.report)
        # Retornant pdf
        report = scanner.get_report_pdf(str(result.report))
        nomArxiu = "Report_" + task.name.replace(
            " ", "-") + "_" + datetime.strftime(result.finish_date,
                                                "%Y%m%d%H%M") + ".pdf"
        #print("Report:" + report)
        reportXML = ElementTree.tostring(report.find("report"),
                                         encoding='utf-8',
                                         method='xml')
        print("ReportXML:" + str(reportXML).split(">")[-2].split("<")[0])
        #fullReport = ElementTree.fromstring(reportXML)
        #response = HttpResponse(base64.b64decode(fullReport.find("in_use").tail), content_type='application/pdf')
        response = HttpResponse(base64.b64decode(
            str(reportXML).split(">")[-2].split("<")[0]),
                                content_type='application/pdf')
        response['Content-Disposition'] = 'attachment; filename=' + nomArxiu
        return response
    else:
        context = crearContextBase(request)
        context.update({'openvas_tasks': "active"})
        results = "fail"
        context.update({'task': task, 'results': results})
        return render(request, 'openvas_task.html', context)
Beispiel #2
0
 def put(self, request, id, format=None):
     task = openvas_requests.objects.get(id=id)
     print(task.id)
     e = request.data['state']
     task.state = e
     task.save()
     if e == "Finished":
         result = openvas_results.objects.get(id=id)
         # Parsejar XML per treure High Medium i Low
         scanner = VulnscanManager("localhost", openvas_username,
                                   openvas_password)
         auxReport = scanner.get_report_xml(str(result.report))
         auxReportString = ElementTree.tostring(
             auxReport.find("report").find("report").find("results"),
             encoding='utf-8',
             method='xml')
         auxReportXML = ElementTree.fromstring(auxReportString)
         print(auxReportString)
         high = 0
         medium = 0
         low = 0
         log = 0
         for v in auxReportXML:
             print(str(v.find("threat").text))
             if v.find("threat").text == "High":
                 high += 1
             elif v.find("threat").text == "Medium":
                 medium += 1
             elif v.find("threat").text == "Low":
                 low += 1
             elif v.find("threat").text == "Log":
                 log += 1
         parsed = "High: " + str(high) + " / Medium: " + str(
             medium) + " / Low: " + str(low) + " / Log: " + str(log)
         print(parsed)
         # Inserting finish date and results
         result.finish_date = timezone.now()
         result.output = parsed
         result.save()
         if task.mail:
             report = scanner.get_report_pdf(str(result.report))
             fileName = "Report_" + task.name + "_" + datetime.strftime(
                 result.finish_date, "%Y%m%d%H%M") + ".pdf"
             reportXML = ElementTree.tostring(report.find("report"),
                                              encoding='utf-8',
                                              method='xml')
             fullReport = ElementTree.fromstring(reportXML)
             pdf = base64.b64decode(fullReport.find("in_use").tail)
             username = User.objects.get(id=task.user.id).username
             print("Username: "******"*****@*****.**",
                               To=[task.mail],
                               Subject=u'[AAPT] OpenVAS Report')
             message.Body = body.encode('utf-8')
             sender = Mailer('localhost')
             message.attach(filename=fileName,
                            content=pdf,
                            mimetype="application/pdf")
             sender.send(message)
     return Response(status=204)