
Reconocimiento Automatizado para Pentesting & Bug Bounty
Reconator es un framework automatizado de reconocimiento. Añade un objetivo — solo o en lote — y el trabajador ejecuta ~17 módulos de reconocimiento contra él (enumeración de subdominios, dirbrute, minería de JS/enlaces, huella de WAF, verificación de takeover, triaje GF, y más). El panel muestra la salida por módulo a medida que llega.
| Capa | Tecnología |
|---|---|
| API | FastAPI · SQLAlchemy 2 · Alembic · Pydantic v2 |
| Trabajador | Ejecutor de subprocesos Python con timeouts + cancelación |
| BD | PostgreSQL 16 |
| Web | React 18 · TypeScript · Tailwind · shadcn/ui · tema claro/oscuro |
| Autenticación | Clave API (X-API-Key) en escrituras; abierto en desarrollo |
| Notificaciones | Telegram + webhook genérico / Slack / Discord |
| Observabilidad | Registros JSON · IDs de solicitud · Prometheus /metrics · Sentry opcional |
| Despliegue | Docker Compose · Stack de contenedores Heroku |
git clone https://github.com/gokulapap/Reconator
cd Reconator
cp .env.example .env # opcional: añadir claves de Telegram / webhook / API key
docker compose up --build
| Servicio | URL |
|---|---|
| Interfaz web | http://localhost:3000 |
| Documentación API | http://localhost:8000/docs |
| Métricas | http://localhost:8000/api/v1/metrics |
O mediante CLI (usa el stack de contenedores heroku.yml — una sola imagen sirve la interfaz + API, el dyno worker ejecuta la cola):
heroku create my-reconator --stack=container
heroku addons:create heroku-postgresql:essential-0
heroku config:set ADMIN_API_KEY=$(openssl rand -hex 32) # recomendado
heroku config:set TELEGRAM_API_KEY=... TELEGRAM_CHAT_ID=... # opcional
git push heroku master
heroku ps:scale web=1 worker=1
# api
cd backend && pip install -r requirements.txt
uvicorn app.main:app --reload
# worker (terminal separada)
python -m app.worker
# web (terminal separada)
cd frontend && npm install && npm run dev # proxys /api → :8000
# pruebas + lint
cd backend && pytest && ruff check .
ADMIN_API_KEY, todas las mutaciones requieren X-API-KeyOpenAPI en /docs.
cron.py → worker con bloqueo de filas, apagado elegante, cancelaciónheroku.ymlSolo para pruebas autorizadas. Úselo en sistemas que posea o tenga permiso de evaluar. Publicado bajo GPL-3.0.
| Método | Ruta | Autenticación | Propósito |
|---|
| GET | /api/v1/targets | — | Listar + filtrar (estado, búsqueda, etiqueta) |
| POST | /api/v1/targets | ✓ | Poner en cola un dominio |
| POST | /api/v1/targets/bulk | ✓ | Poner muchos a la vez en cola |
| GET | /api/v1/targets/stats | — | Conteos + duración promedio |
| GET | /api/v1/targets/export?format=csv|json | — | Exportación masiva |
| GET | /api/v1/targets/{id} | — | Detalle + resumen de módulos |
| DELETE | /api/v1/targets/{id} | ✓ | Eliminar (o cancelar si está en ejecución) |
| POST | /api/v1/targets/{id}/cancel | ✓ | Cancelar en cola / en ejecución |
| POST | /api/v1/targets/{id}/rescan | ✓ | Volver a poner en cola con mismas etiquetas/módulos |
| GET | /api/v1/targets/{id}/results | — | Todas las salidas de módulos |
| GET | /api/v1/targets/{id}/results/{module} | — | Salida de un módulo |
| GET | /api/v1/targets/{id}/results/{module}/download | — | Descarga .txt |
| GET | /api/v1/modules | — | Módulos disponibles |
| GET | /api/v1/system/info | — | Versión + autenticación + estado del notificador |
| POST | /api/v1/system/test-notify | ✓ | Enviar una notificación de prueba |
| GET | /api/v1/health · /ready · /metrics | — | Sondas + Prometheus |
| Variable de entorno | Valor por defecto | Notas |
|---|
DATABASE_URL | compuesto | postgresql://… (estilo Heroku válido) |
ADMIN_API_KEY | sin definir | Cuando está definida, las mutaciones requieren X-API-Key |
RATE_LIMIT_WRITES | 20/minute | expresión slowapi |
RATE_LIMIT_BULK | 5/minute | |
TELEGRAM_API_KEY / _CHAT_ID | sin definir | Desactiva Telegram si está en blanco |
WEBHOOK_URL / WEBHOOK_KIND | sin definir / generic | generic | slack | discord |
SENTRY_DSN | sin definir | Habilita Sentry si está definida |
WORKER_POLL_INTERVAL_SECONDS | 30 | |
MODULE_TIMEOUT_SECONDS | 1800 | Tiempo de espera máximo por módulo |
CORS_ORIGINS | * | Separado por comas |