def parse_ness_host_vulns(workbook, scanner, scans, config_file=None):
    table_data = []
    table_headers = [{
        "header": "Scan"
    }, {
        "header": "Host IP"
    }, {
        "header": "Port"
    }, {
        "header": "Vulnerability"
    }, {
        "header": "Severity Rating"
    }]

    for scan in scans:
        host_vulns = nessus.get_host_vulns(scanner, scan)

        if config_file:
            host_vulns = nessus.post_process_vulns(config_file,
                                                   host_vulns,
                                                   type=0)

        for host_id, plugin_id in host_vulns.items():
            for plugin_id, values in plugin_id.items():
                for value in values:
                    table_data.append([
                        value["scan"], value["host_ip"],
                        ";".join(value["plugin_output"]["ports"]),
                        value["plugin_name"], value["severity"]
                    ])

    write_worksheet(workbook, "Hosts vs Vulnerabilties", 2, table_headers,
                    table_data)
def parse_vulns(workbook, scanner, scans, config_file=None):
    table_data = []
    table_headers = [{
        "header": "Scan"
    }, {
        "header": "Vulnerability"
    }, {
        "header": "IP Count"
    }, {
        "header": "Host IP"
    }, {
        "header": "Port Count"
    }, {
        "header": "Port"
    }, {
        "header": "Severity Rating"
    }]

    for scan in scans:
        vuln_hosts = nessus.get_vuln_hosts(scanner, scan)

        if config_file:
            vuln_hosts = nessus.post_process_vulns(config_file,
                                                   vuln_hosts,
                                                   type=1)

        for value in vuln_hosts.values():
            # unify, sort and stringify
            table_data.append([
                ";".join(sorted(set(value["scan"]))), value["plugin_name"],
                len(value["host_ip"]), ";".join(
                    sorted(set(value["host_ip"]),
                           key=lambda x: tuple(map(int, x.split('.'))))),
                len(set(value["plugin_output"]["ports"])), ";".join(
                    sorted(set(value["plugin_output"]["ports"]),
                           key=lambda x: int(x.split("/")[0]))),
                value["severity"]
            ])

    write_worksheet(workbook, "Vulnerability vs Hosts", 2, table_headers,
                    table_data)