Un scanner de vulnérabilités réseau professionnel avec interface web et API REST
# 1. Cloner et accéder au projet
cd "d:\Etude\Python Projs\Scanner Net"
# 2. Créer l'environnement virtuel
python -m venv .venv
.venv\Scripts\Activate.ps1
# 3. Installer les dépendances
pip install -r requirements.txt
# 4. Lancer Docker
docker compose up -d
# 5. Accéder au dashboard
# Naviguer à: http://localhost:5000✅ Scan de Réseau Complet
- Découverte d'hôtes (résolution de noms)
- Scan de ports TCP/UDP
- Détection de services
- Extraction de banners
✅ Analyse de Vulnérabilités
- Vérification CVE en base de données (11 CVEs)
- Calcul de score de risque CVSS
- Test SSL/TLS
- Test de mots de passe faibles
✅ Web Dashboard Professionnel
- Interface responsive en temps réel
- Graphiques "Vulnerability Distribution" et "Risk Assessment"
- Historique des scans
- Export multi-format (HTML, PDF, JSON)
✅ API REST Complète
- 8 endpoints pour automatisation
- WebSocket pour mises à jour en temps réel
- Récupération des statistiques
✅ Docker Intégré
- Conteneur DVWA pour tester
- Base de données MySQL
- Scanner isolé en conteneur
# Scan simple
python scanner.py scan 192.168.1.1 --ports 80,443
# Scan avec rapport HTML
python scanner.py scan vulnerable-web --ports 80 --report scan.html
# Voir l'aide
python scanner.py --help-
Remplir le formulaire:
- Target: IP ou hostname (ex:
vulnerable-web) - Ports:
80ou80,443ou1-1000 - Scan Type: Quick/Full/Custom
- Target: IP ou hostname (ex:
-
Lancer le scan
- Barre de progression en temps réel
- Graphiques mis à jour automatiquement
- Résultats sauvegardés en base
-
Exporter les résultats:
- HTML (rapport complet)
- PDF (version imprimable)
- JSON (données brutes)
# Démarrer un scan
$body = @{
target = "192.168.1.1"
ports = "80"
scan_type = "standard"
} | ConvertTo-Json
Invoke-RestMethod -Uri "http://localhost:5000/api/scan/start" `
-Method POST -ContentType "application/json" -Body $body
# Voir les statistiques
Invoke-RestMethod -Uri "http://localhost:5000/api/stats"
# Lister les scans
Invoke-RestMethod -Uri "http://localhost:5000/api/scans"VulnScanner/
├── scanner.py # Entrée principale (CLI)
├── requirements.txt # Dépendances Python
├── docker-compose.yml # Configuration Docker
├── Dockerfile # Image du scanner
│
├── src/ # Code source principal
│ ├── scanning/ # Modules de scan
│ │ ├── host_discovery.py
│ │ ├── port_scanner.py
│ │ ├── service_detector.py
│ │ └── banner_grabber.py
│ ├── analysis/ # Modules d'analyse
│ │ ├── cve_checker.py
│ │ ├── risk_calculator.py
│ │ ├── ssl_tester.py
│ │ └── password_tester.py
│ └── reporting/ # Modules de rapport
│ ├── html_reporter.py
│ └── pdf_reporter.py
│
├── web/ # Interface web
│ ├── app.py # Flask + WebSocket
│ ├── templates/
│ │ └── dashboard.html # UI responsive
│ ├── static/
│ │ ├── css/style.css # Tailwind CSS
│ │ └── js/dashboard.js # Socket.IO client
│ └── config.py
│
├── scripts/ # Scripts utilitaires
│ ├── build_cve_db.py # Créer la base CVE
│ └── populate_cve_database.py
│
└── data/ # Données persistantes
├── cve_database.db # CVEs de référence
└── scans.db # Historique des scans
| Service | Port | Rôle | Status |
|---|---|---|---|
vulnerable-web (DVWA) |
8080 | Cible de test | http://localhost:8080 |
vulnerable-mysql |
3306 | BD test | Interne |
vuln-scanner |
5000 | Dashboard web | http://localhost:5000 |
Vérifier le statut:
docker compose ps# Database
$env:DB_PATH = "data/cve_database.db"
$env:SCANS_DB_PATH = "data/scans.db"
# Flask
$env:FLASK_ENV = "production"
$env:FLASK_DEBUG = 0
# Scanner
$env:MAX_WORKERS = 50
$env:PORT_TIMEOUT = 3Éditez populate_cve_database.py puis:
python populate_cve_database.py
docker compose down
docker compose build --no-cache
docker compose up -d✅ Hôtes découverts: 1 (172.18.0.2)
✅ Ports ouverts: 80 (HTTP)
✅ Services: Apache 2.4
✅ Vulnérabilités trouvées: 6
- CVE-2021-41773 (Apache Path Traversal) - CRITICAL
- CVE-2024-DVWA-01 (Multiple DVWA Vulns) - CRITICAL
- CVE-2024-HTTP-XSS (XSS) - MEDIUM
- CVE-2024-HTTP-SQLI (SQL Injection) - CRITICAL
- ...
Solution: La base CVE n'était pas correctement liée. Cela a été fixé en v2.0.
# Reconstruire:
docker compose down -v
docker rmi scannernet-vuln-scanner -f
docker compose build --no-cache
docker compose up -d# Lancer Docker Desktop manuellement:
# Windows + R → taper "Docker Desktop"
# Ou attendre que le service démarre:
Start-Sleep -Seconds 60
docker compose up -d# Vérifier que Flask tourne:
docker compose logs vuln-scanner | Select-Object -Last 10
# Si erreur, relancer:
docker compose restart vuln-scanner- QUICKSTART.md - Premiers pas en 5 minutes
- README.md - Ce fichier
python scanner.py scan 192.168.1.1 --ports 80# Créer une tâche Windows pour scanner chaque jour
schtasks /create /tn "VulnScan" /tr "python scanner.py scan 192.168.1.0/24" /sc daily /st 02:00import requests
# Démarrer un scan
response = requests.post('http://localhost:5000/api/scan/start', json={
'target': '192.168.1.1',
'ports': '80,443',
'scan_type': 'standard'
})
scan_id = response.json()['scan_id']
# Récupérer les résultats
results = requests.get(f'http://localhost:5000/api/scan/{scan_id}/results').json()
print(f"Vulnérabilités trouvées: {len(results['vulnerabilities'])}")- Ne pas scanner des réseaux que vous ne possédez pas
- Utiliser uniquement DVWA pour tester
- Le projet contient des intentionnelles pour l'éducation
- Python 3.10+ - Langage
- Flask 2.3 - Web framework
- Scapy 2.5 - Scanning réseau
- Paramiko 3.2 - SSH
- ReportLab 4.0 - PDF generation
- Docker - Conteneurs
Voir requirements.txt pour la liste complète.
Projet éducatif - Usage personnel autorisé.
Pour des problèmes:
- Vérifier les logs:
docker compose logs - Reconstruire l'image:
docker compose build --no-cache - Réinitialiser complètement:
docker compose down -v && docker compose up -d
Version: 2.0.0
Dernière mise à jour: Janvier 2026
Statut: ✅ Production Ready
🚀 Prêt à scanner!