feat(infra): auto-commit con 88 cambios
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
"""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
|
||||
Reference in New Issue
Block a user