
Reconnaissance automatisée pour le pentesting et le bug bounty
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-KeyOpenAPI sur /docs.
cron.py → worker avec verrouillage de ligne, arrêt gracieux, annulationheroku.ymlUniquement pour des tests autorisés. Utilisez sur des systèmes que vous possédez ou pour lesquels vous avez la permission de tester. Publié sous GPL-3.0.
| 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 |
| 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 |