935008ec3f
Añade el capability group `recon` (dominio cybersecurity + pipelines, Python),
con la política de archivado OSINT y página madre docs/capabilities/recon.md.
Lookups y sondeo (wrappers de CLI):
- whois_lookup, rdap_lookup, dns_records, ping_host, traceroute_host, nmap_scan
- save_scan_to_osint (sink común) + recon_osint (pipeline one-shot scan+archivado)
Escaneo de puertos/servicios nativo (stdlib, sin nmap ni sudo):
- scan_tcp_ports: connect-scan TCP concurrente (open/closed/filtered)
- grab_service_banner: banner grab + identificación de servicio/versión real
- identify_port_service: puro, puerto -> servicio IANA esperado (~120 puertos)
- scan_port_services: pipeline one-shot (scan -> identify + banner por puerto abierto)
Fingerprint de tecnología web (estilo Wappalyzer), patrón pura/impura:
- fetch_http_fingerprint: GET stdlib, recoge headers/html/cookies (solo nombres)
- detect_web_tech: puro, matchea ~50 firmas regex -> tecnologías por categoría
- fingerprint_web_stack: pipeline one-shot url -> tecnologías
Todas devuelven dict {status} sin lanzar. Tests: 43 verdes, sin red externa.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
6.0 KiB
6.0 KiB
name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, params, output, tested, tests, test_file_path, file_path
| name | kind | lang | domain | version | purity | signature | description | tags | uses_functions | uses_types | returns | returns_optional | error_type | imports | params | output | tested | tests | test_file_path | file_path | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| recon_osint | pipeline | py | pipelines | 1.1.0 | impure | def recon_osint(target: str, scan_type: str = 'whois', save: bool = True, profile: str = 'quick', record_types: list[str] | None = None, count: int = 4, max_hops: int = 30, timeout_s: int | None = None, confirm: bool = False) -> dict | One-shot que ejecuta un escaneo de red atomico (whois/rdap/dns/ping/traceroute/nmap) y SIEMPRE lo archiva en OSINT. Materializa la politica 'todo escaneo se guarda en osint': convierte el patron de 2 llamadas (scan atomico + sink) en 1 sola. |
|
|
false | error_py_core |
|
dict con status ('ok'|'error'), target, scan_type, scan (dict crudo del atomico) y osint (dict de save_scan_to_osint con note_path/registered/scan_id, o None si save=False). scan_type invalido -> {status:error, stage:validate, valid:[...]}. Escaneo fallido -> {status:error, stage:scan, scan:<dict>} sin intentar guardar. Nunca lanza. | false | python/functions/pipelines/recon_osint.py |
Ejemplo
from pipelines.recon_osint import recon_osint
# WHOIS de un dominio: ejecuta el lookup y lo archiva en OSINT (1 paso).
r = recon_osint("google.com", "whois")
print(r["status"]) # "ok"
print(r["osint"]["note_path"]) # ruta de la nota creada en el vault osint
from pipelines.recon_osint import recon_osint
# Escaneo nmap rapido de un host autorizado, archivado en OSINT.
r = recon_osint("scanme.nmap.org", "nmap", profile="quick")
print(r["scan"]["open_ports"]) # puertos abiertos detectados
print(r["osint"]["registered"]) # True si el service osint_db lo registro
Cuando usarla
Para lanzar un escaneo de red y archivarlo en OSINT en un solo paso. Usalo en
vez de llamar el atomico (whois_lookup, nmap_scan, ...) + save_scan_to_osint
por separado. Garantiza que el resultado queda en el vault: es la materializacion
de la politica "todo escaneo que lancemos se guarda en osint".
Gotchas
- Hereda los gotchas de cada escaneo atomico que compone:
- nmap: guard anti-escaneo no autorizado — un target publico/desconocido
se rechaza (status error + needs_confirm) salvo que pases
confirm=True(o, por CLI,--confirm/--allowlist). Los privados/local proceden sin confirm. Solo escanea objetivos para los que tengas autorizacion legal; escaneos sin permiso pueden ser ilegales. Requierenmapinstalado. - ping / traceroute: el ICMP puede estar filtrado por firewalls; un
loss_pct100% o pocoshopsno implican que el host este caido, solo que no responde a ICMP. - whois / rdap: dependen de la disponibilidad y rate-limit del servidor WHOIS/RDAP del TLD; respuestas truncadas o vacias son posibles.
- dns: resuelve contra el resolver del sistema; resultados varian segun el DNS configurado.
- nmap: guard anti-escaneo no autorizado — un target publico/desconocido
se rechaza (status error + needs_confirm) salvo que pases
- Requiere el service
osint_dbvivo (http://127.0.0.1:8771) para el registro estructurado; si no responde,save_scan_to_osintdegrada a guardar solo la nota en el vault (sin entrada en DuckDB). El pipeline no falla por eso. - Para nmap largos (
full-tcp,vuln) pasaprofile+ untimeout_salto y considera lanzarlo en background; el defaulttimeout_sdel atomico nmap es amplio (1800s) pero un escaneo completo puede excederlo. - Si el escaneo atomico falla (
status == "error"), el pipeline devuelve{"status":"error","stage":"scan",...}y no intenta guardar nada en OSINT. - Pipeline impuro: hace red (escaneos) y FS/HTTP (vault + service). No es determinista entre ejecuciones.
Notas
Pipeline que compone 7 funciones atomicas del dominio cybersecurity. No
reimplementa logica de escaneo ni de persistencia; solo despacha, normaliza un
summary por tipo de escaneo y delega el guardado. Nunca lanza excepciones:
todo fallo se refleja en la clave status del dict devuelto.
Capability growth log
- v1.1.0 (2026-06-14) — param
confirmpropagado anmap_scan(confirm=...)(solo scan_type='nmap') para el guard anti-escaneo-no-autorizado; CLI gana flag--confirmy--allowlist a,b,c(activa confirm si el target esta autorizado). Sin el flag, confirm=False (compatibilidad intacta).