scan port
This commit is contained in:
132
README.md
132
README.md
@@ -10,6 +10,8 @@ IPWatch est une application web de scan réseau qui visualise en temps réel l'
|
||||
- 📝 **Gestion des IP** : Nommage, classification (connue/inconnue), métadonnées
|
||||
- 📈 **Historique 24h** : Suivi de l'évolution de l'état du réseau
|
||||
- 🔔 **Détection automatique** : Notification des nouvelles IP sur le réseau
|
||||
- 🔗 **Intégration OPNsense** : Gestion des réservations DHCP Kea directement depuis l'interface
|
||||
- 🌐 **Ports & Services** : Scan de services réseau (HTTP, SSH, Proxmox, etc.) avec résultats en temps réel et liens cliquables
|
||||
- 🐳 **Déploiement Docker** : Configuration simple avec docker-compose
|
||||
|
||||
## Technologies
|
||||
@@ -19,6 +21,7 @@ IPWatch est une application web de scan réseau qui visualise en temps réel l'
|
||||
- **SQLAlchemy** - ORM pour SQLite
|
||||
- **APScheduler** - Tâches planifiées
|
||||
- **Scapy** - Scan ARP et réseau
|
||||
- **httpx** - Client HTTP async (intégration OPNsense)
|
||||
|
||||
### Frontend
|
||||
- **Vue 3** - Framework UI avec Composition API
|
||||
@@ -90,6 +93,8 @@ Le fichier `config.yaml` permet de configurer :
|
||||
- **Historique** : Durée de rétention
|
||||
- **Interface** : Transparence, couleurs
|
||||
- **Base de données** : Chemin SQLite
|
||||
- **OPNsense** : Connexion API pour réservations DHCP Kea
|
||||
- **Services** : Liste des services réseau à scanner (nom, port, protocole)
|
||||
|
||||
Exemple :
|
||||
```yaml
|
||||
@@ -113,6 +118,28 @@ ip_classes:
|
||||
name: "Box Internet"
|
||||
location: "Entrée"
|
||||
host: "Routeur"
|
||||
|
||||
opnsense:
|
||||
enabled: true
|
||||
host: "10.0.0.1"
|
||||
protocol: "http" # "http" ou "https"
|
||||
api_key: "votre_api_key"
|
||||
api_secret: "votre_api_secret"
|
||||
verify_ssl: false
|
||||
|
||||
services:
|
||||
- name: "HTTP"
|
||||
port: 80
|
||||
protocol: "http"
|
||||
- name: "HTTPS"
|
||||
port: 443
|
||||
protocol: "https"
|
||||
- name: "SSH"
|
||||
port: 22
|
||||
protocol: "ssh"
|
||||
- name: "Proxmox VE"
|
||||
port: 8006
|
||||
protocol: "https"
|
||||
```
|
||||
|
||||
## Interface utilisateur
|
||||
@@ -123,6 +150,8 @@ L'interface est organisée en 3 colonnes :
|
||||
- Informations détaillées de l'IP sélectionnée
|
||||
- Formulaire d'édition (nom, localisation, type d'hôte)
|
||||
- Informations réseau (MAC, vendor, hostname, ports ouverts)
|
||||
- Bouton de réservation DHCP OPNsense (si MAC disponible)
|
||||
- Indicateur "DHCP réservé" (checkbox en lecture seule)
|
||||
|
||||
### Colonne centrale - Grille d'IP
|
||||
- Vue d'ensemble de toutes les IP du réseau
|
||||
@@ -151,6 +180,18 @@ L'interface est organisée en 3 colonnes :
|
||||
- `GET /api/ips/{ip}/history` - Historique d'une IP
|
||||
- `GET /api/ips/stats/summary` - Statistiques globales
|
||||
|
||||
### Endpoints OPNsense (Kea DHCP)
|
||||
|
||||
- `GET /api/opnsense/status` - Test connexion OPNsense
|
||||
- `GET /api/opnsense/dhcp/reservations` - Lister les réservations DHCP Kea
|
||||
- `GET /api/opnsense/dhcp/reservation/{ip}` - Chercher une réservation par IP
|
||||
- `POST /api/opnsense/dhcp/reservation` - Créer ou mettre à jour une réservation DHCP
|
||||
|
||||
### Endpoints Ports & Services
|
||||
|
||||
- `GET /api/services/list` - Liste des services configurés dans config.yaml
|
||||
- `POST /api/services/scan` - Lancer un scan de services (ports sélectionnés sur toutes les IPs connues)
|
||||
|
||||
### Endpoints Scan
|
||||
|
||||
- `POST /api/scan/start` - Lancer un scan immédiat
|
||||
@@ -165,6 +206,11 @@ Messages WebSocket :
|
||||
- `scan_complete` - Fin de scan avec statistiques
|
||||
- `ip_update` - Changement d'état d'une IP
|
||||
- `new_ip` - Nouvelle IP détectée
|
||||
- `service_scan_start` - Début de scan de services
|
||||
- `service_scan_progress` - Progression du scan (IP en cours)
|
||||
- `service_scan_log` - Log individuel par IP scannée
|
||||
- `service_scan_result` - Résultat individuel en temps réel (service détecté)
|
||||
- `service_scan_complete` - Fin de scan avec résultats agrégés
|
||||
|
||||
## Tests
|
||||
|
||||
@@ -181,6 +227,89 @@ Tests disponibles :
|
||||
- `test_api.py` - Tests endpoints API
|
||||
- `test_scheduler.py` - Tests scheduler APScheduler
|
||||
|
||||
## Intégration OPNsense / Kea DHCP
|
||||
|
||||
IPWatch peut se connecter à un pare-feu OPNsense pour gérer les réservations DHCP Kea directement depuis l'interface web.
|
||||
|
||||
### Configuration
|
||||
|
||||
Ajouter la section `opnsense` dans `config.yaml` :
|
||||
|
||||
```yaml
|
||||
opnsense:
|
||||
enabled: true
|
||||
host: "10.0.0.1" # IP ou hostname OPNsense
|
||||
protocol: "http" # "http" ou "https"
|
||||
api_key: "votre_api_key"
|
||||
api_secret: "votre_api_secret"
|
||||
verify_ssl: false # false pour certificats auto-signés
|
||||
```
|
||||
|
||||
Les clés API se génèrent dans OPNsense : **Système > Accès > Utilisateurs > [utilisateur] > Clés API**.
|
||||
|
||||
### Fonctionnement
|
||||
|
||||
1. Sélectionner un équipement dans la grille (il doit avoir une adresse MAC)
|
||||
2. Cliquer sur le bouton **DHCP** (icone routeur) dans le volet gauche
|
||||
3. Un popup s'ouvre avec les champs pré-remplis : MAC, IP, hostname, description
|
||||
4. Cliquer **"Mettre à jour OPNsense"** pour créer ou mettre à jour la réservation
|
||||
5. IPWatch résout automatiquement le subnet Kea correspondant à l'IP
|
||||
6. Après succès, la checkbox **"DHCP réservé"** passe au vert
|
||||
|
||||
### Flux technique
|
||||
|
||||
```
|
||||
IPWatch Frontend → POST /api/opnsense/dhcp/reservation
|
||||
→ Résolution automatique du subnet UUID Kea
|
||||
→ Recherche réservation existante par IP
|
||||
→ Création ou mise à jour de la réservation
|
||||
→ Reconfiguration du service Kea (application immédiate)
|
||||
→ Mise à jour dhcp_synced=true en BDD
|
||||
→ Retour au frontend (checkbox verte)
|
||||
```
|
||||
|
||||
## Ports & Services
|
||||
|
||||
L'onglet **Ports & Services** permet de scanner le réseau à la recherche de services spécifiques et d'afficher les résultats dans un tableau avec des liens cliquables.
|
||||
|
||||
### Configuration
|
||||
|
||||
Les services à scanner sont définis dans la section `services` de `config.yaml` :
|
||||
|
||||
```yaml
|
||||
services:
|
||||
- name: "HTTP"
|
||||
port: 80
|
||||
protocol: "http"
|
||||
- name: "Proxmox VE"
|
||||
port: 8006
|
||||
protocol: "https"
|
||||
- name: "SSH"
|
||||
port: 22
|
||||
protocol: "ssh"
|
||||
```
|
||||
|
||||
Chaque service a un `name`, un `port`, et un `protocol` optionnel (http, https, ssh, rdp, smb...). Le protocole détermine la construction des URLs cliquables.
|
||||
|
||||
### Fonctionnement
|
||||
|
||||
1. Ouvrir l'onglet **Ports & Services** depuis la barre de navigation
|
||||
2. Cocher les services à scanner dans le volet gauche
|
||||
3. Cliquer **"Lancer le scan"**
|
||||
4. Le scan teste chaque IP connue (en base) pour les ports sélectionnés
|
||||
5. Les résultats apparaissent **en temps réel** dans le tableau central
|
||||
6. Les services HTTP/HTTPS sont affichés avec des liens cliquables
|
||||
|
||||
### Performances
|
||||
|
||||
Le scan est parallélisé : **20 IPs sont testées simultanément** (configurable via `PARALLEL_IPS`). Pour un réseau de 1000 IPs avec un timeout de 1s, le scan complet prend environ 50 secondes.
|
||||
|
||||
### Interface
|
||||
|
||||
- **Volet gauche** : Liste des services avec checkboxes de sélection
|
||||
- **Zone centrale** : Barre de progression + tableau de résultats (IP, nom, service, port, lien)
|
||||
- **Volet droit** : Logs de scan en temps réel (redimensionnable)
|
||||
|
||||
## Architecture
|
||||
|
||||
```
|
||||
@@ -190,7 +319,7 @@ ipwatch/
|
||||
│ │ ├── core/ # Configuration, database
|
||||
│ │ ├── models/ # Modèles SQLAlchemy
|
||||
│ │ ├── routers/ # Endpoints API
|
||||
│ │ ├── services/ # Services réseau, scheduler, WebSocket
|
||||
│ │ ├── services/ # Services réseau, scheduler, WebSocket, client OPNsense
|
||||
│ │ └── main.py # Application FastAPI
|
||||
│ └── requirements.txt
|
||||
├── frontend/
|
||||
@@ -198,6 +327,7 @@ ipwatch/
|
||||
│ │ ├── assets/ # CSS Monokai
|
||||
│ │ ├── components/ # Composants Vue
|
||||
│ │ ├── stores/ # Pinia stores
|
||||
│ │ ├── views/ # Vues (Main, Tracking, Services, Architecture, Test)
|
||||
│ │ └── main.js
|
||||
│ └── package.json
|
||||
├── tests/ # Tests backend
|
||||
|
||||
Reference in New Issue
Block a user