
Framework de reconnaissance automatisé avec plus de 17 modules pour l'énumération de sous-domaines, le brute-forcing de répertoires, l'extraction de JS/liens, le fingerprinting WAF et la détection de takeover. Dispose d'un backend FastAPI, d'un tableau de bord React, de notifications Telegram et du traitement de cibles en masse.
Reconator est un framework automatisé de reconnaissance. Ajoutez une cible — seule ou en masse — et le worker exécute environ 17 modules de reconnaissance (enum de sous-domaines, dirbrute, exploration JS/liens, empreinte WAF, vérification de prise de contrôle, tri GF, etc.). Le tableau de bord affiche les résultats par module dès leur arrivée.
| Couche | Technologie |
|---|---|
| API | FastAPI · SQLAlchemy 2 · Alembic · Pydantic v2 |
| Worker | Lanceur de sous-processus Python avec timeouts + annulation |
| DB | PostgreSQL 16 |
| Web | React 18 · TypeScript · Tailwind · shadcn/ui · thème clair/sombre |
| Auth | Clé API (X-API-Key) en écriture ; ouvert en dev |
| Notify | Telegram + webhook générique / Slack / Discord |
| Observe | Logs JSON · IDs de requête · Prometheus /metrics · Sentry optionnel |
| Déploiement | Docker Compose · Stack de conteneurs Heroku |
git clone https://github.com/gokulapap/Reconator
cd Reconator
cp .env.example .env # optionnel : ajouter les clés Telegram / webhook / clé API
docker compose up --build
| Service | URL |
|---|---|
| Interface Web | http://localhost:3000 |
| Documentation API | http://localhost:8000/docs |
| Métriques | http://localhost:8000/api/v1/metrics |
Ou via CLI (utilise le stack de conteneurs heroku.yml — une seule image sert l'UI + l'API, le dyno worker exécute la file d'attente) :
heroku create my-reconator --stack=container
heroku addons:create heroku-postgresql:essential-0
heroku config:set ADMIN_API_KEY=$(openssl rand -hex 32) # recommandé
heroku config:set TELEGRAM_API_KEY=... TELEGRAM_CHAT_ID=... # optionnel
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 séparé)
python -m app.worker
# web (terminal séparé)
cd frontend && npm install && npm run dev # proxy /api → :8000
# tests + lint
cd backend && pytest && ruff check .
ADMIN_API_KEY, toutes les mutations nécessitent X-API-Key| Méthode | Chemin | Auth | But |
|---|---|---|---|
| GET | /api/v1/targets | — | Lister + filtrer (statut, recherche, étiquette) |
| POST | /api/v1/targets | ✓ | Mettre en file un domaine |
| POST | /api/v1/targets/bulk | ✓ | Mettre en file plusieurs à la fois |
| GET | /api/v1/targets/stats | — | Compteurs + durée moyenne |
| GET | /api/v1/targets/export?format=csv|json | — | Export en masse |
| GET | /api/v1/targets/{id} | — | Détail + résumé des modules |
| DELETE | /api/v1/targets/{id} | ✓ | Supprimer (ou annuler si en cours) |
| POST | /api/v1/targets/{id}/cancel | ✓ | Annuler en file / en cours |
| POST | /api/v1/targets/{id}/rescan | ✓ | Remettre en file avec les mêmes étiquettes / modules |
| GET | /api/v1/targets/{id}/results | — | Toutes les sorties de modules |
| GET | /api/v1/targets/{id}/results/{module} | — | Sortie d'un module |
| GET | /api/v1/targets/{id}/results/{module}/download | — | Téléchargement .txt |
| GET | /api/v1/modules | — | Modules disponibles |
| GET | /api/v1/system/info | — | Version + auth + statut du notifieur |
| POST | /api/v1/system/test-notify | ✓ | Déclencher une notification de test |
| GET | /api/v1/health · /ready · /metrics | — | Sondes + Prometheus |
OpenAPI sur /docs.
| Variable d'env | Par défaut | Remarques |
|---|---|---|
DATABASE_URL | composée | postgresql://… (format Heroku accepté) |
ADMIN_API_KEY | non défini | Quand défini, les mutations nécessitent X-API-Key |
RATE_LIMIT_WRITES | 20/minute | expression slowapi |
RATE_LIMIT_BULK | 5/minute | |
TELEGRAM_API_KEY / _CHAT_ID | non défini | Désactive telegram si vide |
WEBHOOK_URL / WEBHOOK_KIND | non défini / generic | generic | slack | discord |
SENTRY_DSN | non défini | Active Sentry si défini |
WORKER_POLL_INTERVAL_SECONDS | 30 | |
MODULE_TIMEOUT_SECONDS | 1800 | Timeout dur par module |
CORS_ORIGINS | * | Séparé par des virgules |
cron.py → worker avec verrouillage de ligne, arrêt gracieux, annulationheroku.yml