{{ title }}

📅 Scan Time: {{ scan_time | format_date }} ⏱️ Duration: {{ scan_duration | format_duration }} {% if config_id %} 📄 Config ID: {{ config_id }} {% endif %}

Scan Summary

Scan Statistics

Total IPs Scanned {{ summary_stats.total_ips }}
TCP Ports Found {{ summary_stats.tcp_ports }}
UDP Ports Found {{ summary_stats.udp_ports }}
Services Identified {{ summary_stats.services }}
Web Services {{ summary_stats.web_services }}
Screenshots Captured {{ summary_stats.screenshots }}

Drift Alerts

{% if drift_alerts.unexpected_tcp > 0 %}
Unexpected TCP Ports {{ drift_alerts.unexpected_tcp }}
{% endif %} {% if drift_alerts.unexpected_udp > 0 %}
Unexpected UDP Ports {{ drift_alerts.unexpected_udp }}
{% endif %} {% if drift_alerts.missing_tcp > 0 or drift_alerts.missing_udp > 0 %}
Missing Expected Services {{ drift_alerts.missing_tcp + drift_alerts.missing_udp }}
{% endif %} {% if drift_alerts.new_services > 0 %}
New Services Detected {{ drift_alerts.new_services }}
{% endif %} {% if drift_alerts.unexpected_tcp == 0 and drift_alerts.unexpected_udp == 0 and drift_alerts.missing_tcp == 0 and drift_alerts.missing_udp == 0 %}
No drift detected - all services match expectations
{% endif %}

Security Warnings

{% if security_warnings.expiring_certs > 0 %}
Certificates Expiring Soon (<30 days) {{ security_warnings.expiring_certs }}
{% endif %} {% if security_warnings.weak_tls > 0 %}
Weak TLS Versions (1.0/1.1) {{ security_warnings.weak_tls }}
{% endif %} {% if security_warnings.self_signed > 0 %}
Self-Signed Certificates {{ security_warnings.self_signed }}
{% endif %} {% if security_warnings.high_ports > 0 %}
High Port Services (>10000) {{ security_warnings.high_ports }}
{% endif %} {% if security_warnings.expiring_certs == 0 and security_warnings.weak_tls == 0 and security_warnings.self_signed == 0 %}
No critical security warnings detected
{% endif %}
{% for site in sites %}
{% for ip_data in site.ips %} {% set expected = ip_data.expected %} {% set actual = ip_data.actual %} {% set expected_tcp = expected.tcp_ports | default([]) | list %} {% set actual_tcp = actual.tcp_ports | default([]) | list %} {% set expected_udp = expected.udp_ports | default([]) | list %} {% set actual_udp = actual.udp_ports | default([]) | list %} {% set unexpected_tcp = actual_tcp | reject('in', expected_tcp) | list %} {% set unexpected_udp = actual_udp | reject('in', expected_udp) | list %} {% set missing_tcp = expected_tcp | reject('in', actual_tcp) | list %} {% set missing_udp = expected_udp | reject('in', actual_udp) | list %}

{{ ip_data.address }}

{% if expected.ping %} {% if actual.ping %} Ping: Expected {% else %} Ping: Missing {% endif %} {% endif %} {% if (unexpected_tcp | length) > 0 or (unexpected_udp | length) > 0 %} {{ (unexpected_tcp | length) + (unexpected_udp | length) }} Unexpected Port{{ 's' if ((unexpected_tcp | length) + (unexpected_udp | length)) > 1 else '' }} {% elif (missing_tcp | length) > 0 or (missing_udp | length) > 0 %} {{ (missing_tcp | length) + (missing_udp | length) }} Missing Service{{ 's' if ((missing_tcp | length) + (missing_udp | length)) > 1 else '' }} {% else %} All Ports Expected {% endif %}
{% for service in actual.services | default([]) %} {% set service_id = 'service_' ~ loop.index ~ '_' ~ ip_data.address | replace('.', '_') %} {% set is_expected = service.port in expected_tcp or service.port in expected_udp %} {% endfor %} {# Show expected UDP ports (UDP ports found and expected, with no service details) #} {% for port in actual_udp %} {% if port in expected_udp %} {% endif %} {% endfor %} {# Show unexpected UDP ports (UDP ports found but not expected, with no service details) #} {% for port in unexpected_udp %} {% endfor %} {# Show missing expected services #} {% for port in missing_tcp %} {% endfor %} {% for port in missing_udp %} {% endfor %}
Port Protocol Service Product Status
{{ service.port }} {{ service.protocol | upper }} {{ service.service | default('unknown') }} {{ service.product | default('') }} {% if service.version %}{{ service.version }}{% endif %} {% if is_expected %} Expected {% else %} Unexpected {% endif %}
{% if service.product %}
Product {{ service.product }}
{% endif %} {% if service.version %}
Version {{ service.version }}
{% endif %} {% if service.extrainfo %}
Extra Info {{ service.extrainfo }}
{% endif %} {% if service.ostype %}
OS Type {{ service.ostype }}
{% endif %} {% if service.http_info %}
Protocol {{ service.http_info.protocol | upper }}
{% endif %} {% if not is_expected %}
⚠️ Status Not in expected ports list
{% endif %}
{% if service.http_info and service.http_info.screenshot %} 🖼️ View Screenshot {% endif %} {% if service.http_info and service.http_info.ssl_tls %} {% set ssl_id = 'ssl_' ~ loop.index ~ '_' ~ ip_data.address | replace('.', '_') %} {% set ssl = service.http_info.ssl_tls %} {% set cert = ssl.certificate %}

🔒 SSL/TLS Details {% if cert.days_until_expiry is defined and cert.days_until_expiry < 30 %} Certificate Expiring Soon {% elif cert.issuer == cert.subject %} Self-Signed Certificate {% endif %}

Click to expand ▼
Certificate Information
{% if cert.subject %}
Subject {{ cert.subject }}
{% endif %} {% if cert.issuer %}
Issuer {{ cert.issuer }}{% if cert.issuer == cert.subject %} (Self-Signed){% endif %}
{% endif %} {% if cert.not_valid_before %}
Valid From {{ cert.not_valid_before | format_date }}
{% endif %} {% if cert.not_valid_after %}
Valid Until {{ cert.not_valid_after | format_date }}
{% endif %} {% if cert.days_until_expiry is defined %}
Days Until Expiry {{ cert.days_until_expiry }} days{% if cert.days_until_expiry < 30 %} ⚠️{% endif %}
{% endif %} {% if cert.serial_number %}
Serial Number {{ cert.serial_number }}
{% endif %}
{% if cert.sans %}
Subject Alternative Names (SANs) {{ cert.sans | join(', ') }}
{% endif %} {% if ssl.tls_versions %}
TLS Version Support
{% for version_name in ['TLS 1.0', 'TLS 1.1', 'TLS 1.2', 'TLS 1.3'] %} {% set tls_version = ssl.tls_versions.get(version_name, {}) %} {% if tls_version.supported %}
{{ version_name }} {% if version_name in ['TLS 1.0', 'TLS 1.1'] %} Supported (Weak) ⚠️ {% else %} Supported {% endif %}
{% if tls_version.cipher_suites %}
    {% for cipher in tls_version.cipher_suites %}
  • {{ cipher }}
  • {% endfor %}
{% endif %}
{% elif tls_version.supported is defined %}
{{ version_name }} Not Supported
{% endif %} {% endfor %}
{% endif %}
{% endif %}
{{ port }} UDP No service detection available Expected
Protocol UDP
Note Service detection not available for UDP ports
{{ port }} UDP No service detection available Unexpected
⚠️ Status UDP port discovered but not in expected ports list. Service detection not available for UDP.
{{ port }} TCP ❌ Expected but not found Missing
{{ port }} UDP ❌ Expected but not found Missing
{% endfor %}
{% endfor %}