{% extends "base.html" %} {% block title %}Geo Recon{% endblock %} {% block content %}
Infrastructure recon — not people. Scope every run to a target/org you are authorized to assess. This answers location → what assets; the inverse (who is there) is out of scope by design.

Free mode: give a domain or ASN (e.g. AS13335); it resolves IPs, enriches each via Shodan InternetDB + geoIP (no key), and optionally filters to a city/country.

{% if result is not none %} {% if result.error %}
Geo Recon couldn't run.
{{ result.error }}
{% elif not result.configured %}
Shodan is not configured — add a Shodan API key under Integrations to run Geo Recon.
{% elif not result.query %}
Provide at least a city, country, or lat,lon to scope the search.
{% else %}

{% if result.mode == 'free' %} Scope: {{ result.query }} · {{ result.summary.hosts }} host(s) enriched via Shodan InternetDB + geoIP (free, passive). {% else %} Query: {{ result.query }} · Shodan reports {{ "{:,}".format(result.total) }} total matching hosts (showing top {{ result.assets|length }}). {% endif %}

{{ result.summary.hosts }}
Hosts
{{ result.summary.assets }}
Services
{{ result.summary.vuln_hosts }}
Vulnerable hosts
{{ result.summary.orgs|length }}
Orgs
{% if mapcfg.enabled %}
{% endif %} {% if result.summary.ports %}
Top ports: {% for port, n in result.summary.ports %}{{ port }} ×{{ n }}{% endfor %}
{% endif %} {% for a in result.assets %} {% else %} {% endfor %}
IPPortProductOrgCityVulns
{{ a.ip }}{% if a.hostnames %}
{{ a.hostnames[0] }}{% endif %}
{{ a.port }}/{{ a.transport }} {{ a.product }}{% if a.version %} {{ a.version }}{% endif %} {{ a.org or '—' }} {{ a.city or a.country or '—' }} {% for v in a.vulns %}{{ v }} {% endfor %}
No assets returned for this scope.
{% endif %} {% endif %} {% endblock %} {% block scripts %} {% if mapcfg.enabled and result is not none and result.assets %} {% endif %} {% endblock %}