scan port

This commit is contained in:
2026-02-07 18:53:18 +01:00
parent dff1b03e42
commit 4eb3defa59
11 changed files with 1037 additions and 3 deletions

132
README.md
View File

@@ -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