Skip to content

Commit 122d2dc

Browse files
committed
Restaure le README complet du projet (écrasé par l'amorçage du dépôt)
Le README d'amorçage (main) avait remplacé celui de l'archive de livraison lors de l'import initial : ce commit le remet à l'identique du zip du 16/09/2026 (10 690 octets).
1 parent 6f53590 commit 122d2dc

1 file changed

Lines changed: 225 additions & 6 deletions

File tree

‎README.md‎

Lines changed: 225 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,229 @@
11
# switch-capture
22

3-
Orchestrateur de capture réseau pour switches HPE Comware
4-
(5130/5140/5510/5520), avec CLI et interface graphique GTK4.
3+
Orchestrateur de capture réseau pour switches HPE Comware (5130/5140/5510/
4+
5520), avec CLI et interface graphique GTK4.
55

6-
Dépôt importé depuis les archives de livraison du projet — le code arrive
7-
sur `main` uniquement via des PR depuis la branche `dev` (voir le
8-
garde-fou d'intégration dans `.github/workflows/guard-main.yml`).
6+
**Auteur :** Mathilde Deuscher
97

10-
Le contenu complet du projet est importé via la première PR `dev -> main`.
8+
---
9+
10+
## Cinq façons de récupérer du trafic depuis un switch
11+
12+
switch-capture ne mise pas sur une seule méthode de capture : selon le
13+
contexte (diagnostic ponctuel, débit élevé, comparaison de plusieurs points
14+
d'observation, filtrage fin par ACL, collecteur joignable seulement en
15+
IP routé), l'une ou l'autre est la bonne réponse. Le détail complet, avec
16+
les procédures manuelles équivalentes sur Cisco et d'autres
17+
constructeurs, est dans
18+
[`src/docs/CAPTURE-METHODS.md`](src/docs/CAPTURE-METHODS.md).
19+
20+
### 1. `packet-capture` local — fichiers rapatriés en direct
21+
22+
Le switch écrit la capture en ring-buffer sur sa propre flash ; switch-
23+
capture rapatrie chaque fichier clôturé par SCP et le réinjecte en direct :
24+
25+
- **`--output-mode fifo`** (par défaut) : un named pipe + une instance
26+
Wireshark lancée automatiquement. Simple, une capture à la fois.
27+
- **`--output-mode tap`** : réinjection dans une interface réseau virtuelle
28+
(TAP) dédiée. Plusieurs captures simultanées (une interface par switch/
29+
point de capture) observables **dans une seule instance Wireshark**.
30+
31+
```bash
32+
switch-capture capture --switch-ip 10.0.0.1 --ssh-user mathilde \
33+
--capture-interface GigabitEthernet1/0/1
34+
```
35+
36+
### 2. `packet-capture remote` — RPCAP natif Comware
37+
38+
Certains modèles/versions Comware peuvent exposer le switch directement
39+
comme un **serveur RPCAP** : Wireshark s'y connecte en réseau
40+
(`rpcap://switch-ip:port/interface`), sans fichier ni FIFO/TAP local.
41+
Le plus simple des cinq méthodes quand il est disponible — **la
42+
disponibilité n'est pas garantie sur tous les modèles**, switch-capture le
43+
signale clairement si la commande n'existe pas sur votre plateforme.
44+
45+
```bash
46+
switch-capture capture --switch-ip 10.0.0.1 --ssh-user mathilde \
47+
--capture-interface GigabitEthernet1/0/1 --output-mode rpcap
48+
```
49+
50+
### 3. Port mirroring (SPAN local / ERSPAN+GRE distant)
51+
52+
Copie le trafic au niveau du plan de données (ASIC), **avant** tout
53+
traitement CPU — débit ligne, sans les limites des deux méthodes
54+
précédentes. switch-capture pousse la configuration ; la capture se fait
55+
côté collecteur (Wireshark/tcpdump), externe à l'outil.
56+
57+
```bash
58+
# SPAN local (câble direct vers l'hôte de capture)
59+
switch-capture mirror --switch-ip 10.0.0.1 --ssh-user mathilde \
60+
--mode local --source-interface GigabitEthernet1/0/1 \
61+
--monitor-interface GigabitEthernet1/0/24
62+
63+
# ERSPAN/GRE distant (routé, pas de câble direct requis)
64+
switch-capture mirror --switch-ip 10.0.0.1 --ssh-user mathilde \
65+
--mode gre --source-interface GigabitEthernet1/0/1 \
66+
--tunnel-local-ip 10.0.0.1 --tunnel-ip 192.168.100.1 --remote-ip 203.0.113.10
67+
```
68+
69+
### 4. Flow mirroring filtré par ACL — `switch-capture mirror --filter-mode acl`
70+
71+
Variante du mirroring de port ci-dessus : au lieu de dupliquer *tout* le
72+
trafic d'un port, ne duplique que les paquets qui correspondent à une
73+
ACL avancée, via une politique QoS (`traffic classifier` + `traffic
74+
behavior` + `qos policy`) — toujours au débit ligne, au niveau de
75+
l'ASIC. Utile pour isoler un hôte ou un protocole précis sans mirrorer
76+
tout un port chargé de trafic non pertinent. Pilotable en CLI comme en
77+
GUI (bloc « Port mirroring », menu déroulant « Mode de filtrage »).
78+
79+
```bash
80+
switch-capture mirror --switch-ip 10.0.0.1 --ssh-user mathilde \
81+
--filter-mode acl --acl-number 3000 \
82+
--acl-rule "rule 0 permit ip source 10.0.0.5 0" \
83+
--source-interface GigabitEthernet1/0/1 --monitor-interface GigabitEthernet1/0/24
84+
```
85+
86+
### 5. Mirroring vers VLAN sonde + VXLAN L2 — `switch-capture mirror --mode vxlan` ⚠️ expérimental
87+
88+
**Non vérifié contre la doc H3C officielle ni contre un switch réel dans
89+
ce dépôt** — implémenté sur demande explicite d'un utilisateur, qui en
90+
atteste le fonctionnement sur un 5520 HI. À valider vous-même avant tout
91+
déploiement en production ; voir
92+
[`src/docs/CAPTURE-METHODS.md`](src/docs/CAPTURE-METHODS.md) section 5
93+
pour le détail complet des réserves. Utile quand le collecteur n'est
94+
joignable qu'en IP routé (pas d'adjacence L2 possible pour trunker un
95+
VLAN sonde classique) : le VLAN mirroré est raccordé à une VSI VXLAN qui
96+
l'achemine par-dessus le réseau routé. CLI uniquement, GUI pas encore
97+
câblée.
98+
99+
```bash
100+
switch-capture mirror --switch-ip 10.0.0.1 --ssh-user mathilde \
101+
--mode vxlan --group-id 10 --source-interface GigabitEthernet1/0/1 \
102+
--remote-probe-vlan 666 --vsi-name mirror --vxlan-vni 666 \
103+
--tunnel-id 0 --tunnel-local-ip 10.0.0.1 --remote-ip 203.0.113.10 \
104+
--reflector-interface GigabitEthernet1/0/24
105+
```
106+
107+
Côté collecteur, une interface VXLAN doit être créée manuellement
108+
(`ip link add ... type vxlan`, hors du périmètre de cet outil) — voir
109+
CAPTURE-METHODS.md pour la commande complète.
110+
111+
### Comparer plusieurs points de capture (client / routeur / serveur)
112+
113+
Pour que des traces prises à différents points du réseau soient
114+
comparables entre elles, les horloges des switches doivent être
115+
synchronisées — switch-capture vérifie et configure NTP automatiquement
116+
(`--ntp-server`) et écrit un sidecar `capture-meta.json` (étiquette du
117+
point de capture, statut NTP, filtre utilisé...) à côté de chaque capture,
118+
pour qu'un outil tiers de comparaison de traces (hors périmètre de ce
119+
projet) puisse s'y raccrocher.
120+
121+
---
122+
123+
## Installation
124+
125+
Trois méthodes équivalentes, au choix :
126+
127+
| Méthode | Commande |
128+
|---|---|
129+
| **Script direct** (Ubuntu/Debian/Rocky/RHEL/CentOS 8-9) | `sudo ./install.sh` |
130+
| **Paquet `.deb`** (Debian/Ubuntu) | `./packaging/build_deb.sh` puis `sudo apt install ./packaging/switch-capture_1.0.0_all.deb` |
131+
| **Paquet `.rpm`** (Rocky/RHEL/CentOS Stream 8/9) | `./packaging-rpm/build_rpm.sh` puis `sudo dnf install ./packaging-rpm/RPMS/noarch/*.rpm` |
132+
133+
Détail complet des prérequis (paquets système, GTK4 optionnel, différences
134+
el8/el9) dans `src/docs/INSTALL.md` (script direct), `packaging/INSTALL-deb.md`
135+
et `packaging-rpm/INSTALL-rpm.md`.
136+
137+
Une fois installé :
138+
139+
```bash
140+
switch-capture --help
141+
switch-capture # ouvre la GUI si GTK4 est disponible, sinon l'aide CLI
142+
switch-capture -c capture --help
143+
switch-capture -g # force la GUI
144+
```
145+
146+
## Interface graphique
147+
148+
`switch-capture` (sans argument) ouvre une fenêtre GTK4 pensée pour piloter
149+
**plusieurs captures à la fois** (comparaison client/routeur/serveur),
150+
organisée en 5 pages : **Configuration** (liste des captures + formulaire
151+
d'ajout, avec champs qui s'adaptent au mode choisi), **Installation**
152+
(prépare toutes les captures — préalable obligatoire), **Démarrage**
153+
(disponible une fois toutes les captures installées), **Journal** (statut,
154+
progression, logs en direct, arrêt global) et **Résultats** (fichiers
155+
produits par capture). Le menu ☰ en haut à gauche ouvre les
156+
**Préférences** (slot/modèle/`.bin` forcé, repli KeePass — persistées
157+
dans `config.yaml`, voir USAGE.md) ou quitte l'application. La bascule
158+
CLI/GUI est automatique : si les arguments fournis suffisent à lancer une
159+
capture, tout se passe en ligne de commande, sans jamais ouvrir de
160+
fenêtre — pratique pour un usage cron/systemd même sur une machine qui a
161+
aussi un environnement graphique. `-c` force la CLI, `-g` force la GUI.
162+
163+
## Structure du dépôt
164+
165+
```
166+
switch-capture/
167+
├── install.sh # installation directe (sans .deb/.rpm)
168+
├── pyproject.toml # dépendances (uv) + config ruff/pytest/coverage — pour un venv manuel (`uv sync`, voir CLAUDE.md)
169+
├── src/ # code source + documentation
170+
│ ├── switch-capture # point d'entrée unique (CLI + GTK4)
171+
│ ├── switch_capture_core.py # logique métier (capture, SCP, TAP, NTP, mirroring...)
172+
│ ├── switch_capture_cli.py # sous-commandes CLI
173+
│ ├── switch_capture_gtk.py # interface graphique GTK4
174+
│ └── docs/
175+
│ ├── INSTALL.md # installation via install.sh
176+
│ ├── USAGE.md # référence complète CLI + GUI
177+
│ ├── CAPTURE-METHODS.md # comparaison des 5 méthodes de capture, procédures manuelles
178+
│ ├── README-feature-bin.md
179+
│ └── config.yaml.example
180+
├── feature-bin/ # (optionnel, à créer soi-même, non versionné) dépôt local de .bin HPE
181+
├── packaging/ # paquet .deb
182+
│ ├── build_deb.sh
183+
│ ├── INSTALL-deb.md
184+
│ └── debian/DEBIAN/ # métadonnées du paquet (control, postinst, postrm)
185+
└── packaging-rpm/ # paquet .rpm
186+
├── build_rpm.sh
187+
├── INSTALL-rpm.md
188+
└── switch-capture.spec
189+
```
190+
191+
`src/` est la source unique du code et de la documentation partagée : les
192+
trois méthodes d'installation (`install.sh`, `build_deb.sh`, `build_rpm.sh`)
193+
la lisent de la même façon et construisent l'arborescence finale au moment
194+
de l'installation/du build, plutôt que de la dupliquer. Voir
195+
`docs/architecture.md` pour le détail de l'architecture, les choix
196+
techniques, et les pièges déjà rencontrés et corrigés.
197+
198+
## Dépendances système
199+
200+
Toutes installées automatiquement par `install.sh`/les paquets : Python
201+
≥ 3.8, `netmiko`/`loguru`/`paramiko`/`scp` (paquets système en priorité,
202+
repli `pip` si absents des dépôts), `wireshark`, `iproute2`/`iproute`
203+
(pour le mode TAP). `sshfs`/`fuse-sshfs` et GTK4/PyGObject sont
204+
recommandés mais optionnels (mode `sshfs` legacy, GUI). Détail par
205+
distribution dans les docs d'installation citées plus haut.
206+
207+
## Sécurité
208+
209+
- Le compte switch est un compte RADIUS existant : aucun utilisateur local
210+
n'est créé. Le mot de passe n'est jamais écrit sur disque (variable
211+
d'environnement `SWITCH_SSH_PASSWORD` recommandée plutôt que
212+
`--ssh-password` en clair).
213+
- Le mode TAP nécessite root/CAP_NET_ADMIN — à réserver à un compte de
214+
service dédié.
215+
- Voir `docs/architecture.md`, section « Sécurité / bonnes pratiques », pour
216+
le détail.
217+
218+
## État du projet
219+
220+
[`CLAUDE.md`](CLAUDE.md) donne l'état courant en un coup d'œil ;
221+
[`docs/features-backlog.md`](docs/features-backlog.md) tient à jour
222+
l'inventaire de ce qui est réellement fait et testé, et de ce qui reste à
223+
faire — à consulter avant de démarrer une nouvelle session de travail sur
224+
ce dépôt. Détail session par session : [`docs/sessions/`](docs/sessions/index.md).
225+
226+
## Licence
227+
228+
À définir — un fichier `LICENSE` placeholder (MIT) est inclus dans ce
229+
dépôt en attendant un choix définitif.

0 commit comments

Comments
 (0)