eb8dbf66a1
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
48 lines
1.9 KiB
Python
48 lines
1.9 KiB
Python
"""Orquestador OSINT pasivo: perfil de una organizacion por su dominio.
|
|
|
|
Compone funciones atomicas del registro (`whois_lookup`, `dns_records`,
|
|
`enum_subdomains_crtsh`) para construir un perfil pasivo de una organizacion a
|
|
partir de su dominio, usando solo fuentes publicas (WHOIS, DNS, Certificate
|
|
Transparency via crt.sh) sin contactar directamente con la infraestructura del
|
|
objetivo mas alla de las consultas DNS estandar.
|
|
|
|
Funcion IMPURA: hace consultas de red (WHOIS, DNS, HTTP a crt.sh).
|
|
"""
|
|
|
|
from cybersecurity import dns_records, enum_subdomains_crtsh, whois_lookup
|
|
|
|
|
|
def enrich_org_passive(dominio: str) -> dict:
|
|
"""Construye un perfil OSINT pasivo de una organizacion por su dominio.
|
|
|
|
Agrega tres fuentes publicas: el registro WHOIS del dominio, sus registros
|
|
DNS y los subdominios observados en Certificate Transparency (crt.sh).
|
|
|
|
Args:
|
|
dominio: dominio de la organizacion, p.ej. `organic-machine.com`.
|
|
|
|
Returns:
|
|
dict con las claves:
|
|
- whois: salida de whois_lookup(dominio).
|
|
- dns: salida de dns_records(dominio).
|
|
- subdomains: salida de enum_subdomains_crtsh(dominio).
|
|
|
|
Raises:
|
|
ValueError: si el dominio esta vacio.
|
|
"""
|
|
if not (dominio or "").strip():
|
|
raise ValueError("dominio no puede estar vacio")
|
|
|
|
dominio = dominio.strip()
|
|
|
|
# Resiliente a fallo parcial: si una fuente externa falla (p.ej. crt.sh lento o
|
|
# rate-limitado), se registra el error y se devuelven las demas igualmente.
|
|
result = {"whois": {}, "dns": {}, "subdomains": [], "errors": {}}
|
|
for key, fn in (("whois", whois_lookup), ("dns", dns_records),
|
|
("subdomains", enum_subdomains_crtsh)):
|
|
try:
|
|
result[key] = fn(dominio)
|
|
except Exception as exc: # noqa: BLE001 — captura amplia a proposito por fuente
|
|
result["errors"][key] = f"{type(exc).__name__}: {exc}"
|
|
return result
|