Schéma de communication réseau avec des icônes de code C et Python.

Programmation Réseaux

Implémentation de protocoles réseau et programmation de sockets.

Édition 2026 – Réforme LMD – Enseignement supérieur et universitaire en RDC.

  • Code Officiel : PRR2131
  • Domaine : Sciences et Technologie
  • Filière : Sciences Informatiques
  • Mention : Ingénierie Sécurité Informatique
  • Année d’étude : Master 2
  • Semestre : Semestre 3
Consulter les Modalités, Compétences et Débouchés

Cette Unité d’Enseignement, valorisée à 6 crédits ECTS, représente un investissement substantiel dans la maîtrise des réseaux informatiques. Son architecture est volontairement monolithique et intensive, se concentrant intégralement sur un unique Élément Constitutif : la Programmation Réseaux. Cette approche ciblée garantit une immersion profonde et une expertise pointue, en faisant de cet EC le pilier central de l’acquisition des compétences de bas niveau essentielles à la cybersécurité moderne.

Au-delà de la théorie, cette UE forge des compétences opérationnelles de premier plan. Vous apprendrez à disséquer le trafic réseau en programmant directement via les sockets bas niveau, vous permettant de créer vos propres outils d’analyse de paquets pour identifier les protocoles les plus furtifs. Vous maîtriserez l’automatisation en C ou Python pour effectuer des scans de ports et cartographier des infrastructures complexes grâce à la découverte de topologie réseau. Enfin, vous saurez bâtir des forteresses numériques en implémentant des canaux de communication cryptés de bout en bout, rendant les données illisibles à toute tentative d’interception.

Les compétences acquises ouvrent la voie à des métiers d’avenir, particulièrement stratégiques sur le marché de l’emploi en RDC. Le Développeur cybersécurité y conçoit les logiciels de défense indispensables à la protection des nouvelles économies numériques. L’Ingénieur de protocoles réseau y assure la fiabilité et la sécurité des fondations de communication sur lesquelles repose la transformation digitale du pays. Enfin, l’Analyste en sécurité des infrastructures agit en sentinelle, surveillant, détectant et répondant aux menaces pour garantir la souveraineté et la résilience des systèmes d’information congolais.

SOMMAIRE NAVIGABLE

PRÉLIMINAIRES

I. Épistémologie et Enjeux Scientifiques du Domaine

La programmation réseaux a muté. D’une discipline initialement focalisée sur l’interconnexion brute des systèmes via l’API Sockets de Berkeley, elle est devenue l’épine dorsale de la cybersécurité offensive et défensive. Son champ épistémologique s’est déplacé de la simple transmission de données vers la manipulation, l’analyse et la sécurisation des flux d’information. Cet enseignement acte cette rupture en traitant le protocole non comme une norme statique, mais comme une surface d’attaque et un vecteur de contrôle. La maîtrise de la programmation bas niveau devient ainsi un acte stratégique de souveraineté numérique.

II. Cartographie des Compétences et Transversalité

Les compétences visées par cette UE constituent un triptyque de haute valeur. Le codage d’analyseurs de paquets (socket brut) irrigue la rétro-ingénierie et l’analyse forensique. L’automatisation des scans de topologie (C/Python) est une compétence pivot, essentielle au pentesting, à l’administration système et à l’ingénierie de la résilience des infrastructures. Enfin, l’implémentation de canaux cryptés transcende l’informatique pour toucher au droit (conformité RGPD/données personnelles) et à la cryptographie appliquée. Ces savoir-faire forment un ingénieur capable de construire, d’auditer et de défendre une infrastructure réseau de bout en bout.

III. Alignement Stratégique avec les Réalités Opérationnelles

Face à l’explosion des services numériques en RDC (mobile banking, e-gouvernement), la demande pour des experts en sécurité des infrastructures est critique. Les métiers de Développeur Cybersécurité et d’Analyste Sécurité ne sont plus des options mais des nécessités stratégiques pour les banques, les opérateurs télécoms et les institutions publiques. Cette UE est calibrée pour produire des profils immédiatement opérationnels, capables de développer des outils de surveillance sur mesure, d’auditer la robustesse des applications exposées sur Internet et de sécuriser les transactions financières contre des menaces locales et internationales sophistiquées.

Chapitre I. Fondations de la Programmation Socket en C

I.1 L’API Berkeley Sockets : Anatomie d’une Interface Système

Née de l’implémentation BSD UNIX 4.2, l’interface de programmation des sockets constitue le socle universel de la communication réseau. Ce module en dissèque l’anatomie, des familles d’adresses (AF_INET, AF_INET6) aux types de sockets (SOCK_STREAM, SOCK_DGRAM), en passant par les appels système fondamentaux (socket(), bind(), listen(), accept()). La maîtrise de cette API n’est pas une simple compétence de programmation ; elle est la condition sine qua non pour comprendre et contrôler le comportement d’une machine sur un réseau, en établissant une base technique irréprochable.

I.2 Gestion Mémoire et Pointeur : Le C comme Outil de Précision

Sous l’angle de la performance, le langage C demeure le choix impérieux pour la programmation réseau bas niveau. Ce segment se concentre sur la gestion manuelle de la mémoire et la manipulation des pointeurs, des compétences vitales pour interagir avec les structures de données du noyau (sockaddr_in, hostent) et manipuler directement les tampons de réception et d’émission. L’étudiant apprendra à allouer, remplir et libérer la mémoire avec une rigueur absolue, évitant ainsi les failles critiques de type buffer overflow, qui demeurent une porte d’entrée majeure pour les attaquants.

I.3 Modèles de Concurrence : Blocage, Non-blocage et Multiplexage

Face à la gestion de clients multiples, le modèle de socket bloquant par défaut révèle rapidement ses limites. Cette section analyse de manière critique les différentes stratégies de concurrence : le fork de processus, le multithreading et, surtout, le multiplexage d’entrées/sorties via select() et poll(). La controverse entre la complexité de gestion des threads et la performance du multiplexage est tranchée par l’étude de cas concrets. L’objectif est de doter l’ingénieur de la capacité à choisir et implémenter l’architecture de serveur la plus pertinente selon la charge et la latence attendues.

I.4 Adaptation aux Réseaux Contraints : Gestion des Déconnexions et Latence

Déployer une application réseau en Afrique impose de composer avec une connectivité instable et une latence élevée. Ce module applique les concepts précédents à ce contexte spécifique. L’étudiant implémentera des mécanismes robustes de gestion des timeouts sur les appels bloquants, des logiques de re-tentative de connexion avec backoff exponentiel et des protocoles de “heartbeat” pour détecter proactivement les déconnexions. Il s’agit de transformer une contrainte d’infrastructure en une spécification technique, produisant des applications résilientes par conception, adaptées aux réalités du terrain.

Chapitre II. Capture et Analyse de Paquets via Sockets Bruts

II.1 Le Socket Brut (Raw Socket) : Privilèges et Mécanismes Noyau

Le concept de socket brut, introduit dans BSD, octroie un pouvoir considérable : la capacité de forger et de lire des paquets IP entiers, y compris leurs en-têtes. Ce sous-chapitre explore les mécanismes noyau qui sous-tendent cette fonctionnalité, notamment les privilèges administrateur requis (CAP_NET_RAW) et la manière dont le système d’exploitation transmet les datagrammes bruts à l’application. Comprendre cette interaction est fondamental pour développer des outils qui opèrent au plus près du matériel, contournant les abstractions de la couche transport (TCP/UDP).

II.2 Programmation de la Capture : L’Interface PCAP et le Mode Promiscuous

Pour intercepter le trafic ne lui étant pas directement destiné, une interface réseau doit opérer en mode “promiscuous”. Ce segment détaille l’implémentation d’un sniffer réseau en utilisant la bibliothèque libpcap. L’étudiant apprendra à compiler des filtres BPF (Berkeley Packet Filter) pour ne capturer que le trafic pertinent, à gérer les buffers de capture pour éviter les pertes de paquets et à structurer un programme qui écoute passivement le réseau. C’est l’étape instrumentale qui transforme la théorie de l’écoute réseau en code fonctionnel et performant.

II.3 Déconstruction de Protocoles : Analyse Binaire des En-têtes

La capture de données brutes est inutile sans la capacité de les interpréter. Cette section critique la complexité de l’analyse binaire manuelle des en-têtes de protocoles (Ethernet, IP, TCP, UDP). En s’appuyant sur les RFC officiels, l’étudiant apprendra à caster les octets capturés dans des structures C, à gérer les problématiques d’alignement mémoire et d’endianness (ordre des octets). Cette compétence, bien que fastidieuse, est la seule voie pour détecter des anomalies, des options de protocole non standard ou des tentatives de dissimulation d’activité malveillante.

II.4 Cas d’Usage : Détection de Tunneling DNS sur les Réseaux Mobiles

Dans le contexte africain où les forfaits data sont souvent limités ou censurés, le tunneling DNS est une technique courante pour exfiltrer des données ou contourner des portails captifs. Ce module pratique consiste à développer un outil en C qui, via des sockets bruts et libpcap, surveille le trafic DNS sur une passerelle. L’outil analysera la taille et la fréquence des requêtes TXT ou NULL pour identifier les signatures d’un canal de communication dissimulé, fournissant aux opérateurs un moyen de détecter des usages abusifs de leur infrastructure.

Chapitre III. Automatisation de la Découverte Réseau en Python

III.1 Python et les Sockets : L’Abstraction de Haut Niveau

D’origine, la programmation réseau en Python via le module socket offre une abstraction élégante de l’API C sous-jacente, simplifiant drastiquement la création de clients et de serveurs. Ce sous-chapitre pose les fondations en démontrant comment Python gère automatiquement la résolution de noms, la gestion des erreurs via des exceptions et la manipulation des données binaires. Cette approche permet de se concentrer sur la logique protocolaire plutôt que sur la plomberie bas niveau, rendant le prototypage d’outils réseau extraordinairement rapide et efficace.

II.2 Mécanismes du Scan de Ports : De la Connexion Complète au Scan Discret

Le scan de ports est un processus de diagnostic, non une attaque en soi. Ce segment dissèque les mécanismes, du simple connect() (scan TCP) qui complète le three-way handshake, aux techniques plus furtives comme le scan SYN (demi-ouvert), FIN, ou UDP. L’étudiant implémentera en Python ces différentes logiques pour comprendre leurs avantages, leurs inconvénients et les traces qu’elles laissent sur les systèmes de détection d’intrusion (IDS). La maîtrise de ces nuances est cruciale pour réaliser des audits de sécurité efficaces et non-intrusifs.

III.3 Limites de l’Automatisation : Contre-mesures et Faux Négatifs

L’automatisation du scan de ports se heurte à des contre-mesures sophistiquées. Les pare-feux modernes (firewalls) et les IDS peuvent utiliser des techniques de “port knocking”, de “rate limiting” ou de “tarpitting” pour leurrer ou bloquer les scanners. Cette analyse critique explore les limites des outils automatisés, qui peuvent générer des faux négatifs (un port ouvert mais filtré apparaît comme fermé). L’ingénieur doit apprendre à interpréter les résultats avec un esprit critique, en croisant les informations pour distinguer une véritable absence de service d’une défense active.

III.4 Application : Cartographie des Services Exposés par les PME Locales

Pour une PME à Kinshasa ou Abidjan, la surface d’attaque externe est souvent une inconnue totale. Cette mise en situation charge l’étudiant de développer un script Python. Ce script automatisera un scan de ports non-intrusif sur une plage d’adresses IP fournie, identifiera les services ouverts (HTTP, FTP, RDP) et générera un rapport de vulnérabilité basique. L’outil, conçu pour être frugal en bande passante, fournira une première cartographie de sécurité essentielle, un service à haute valeur ajoutée pour des entités sans expert en cybersécurité dédié.

Chapitre IV. Ingénierie des Protocoles et Forgage de Paquets

IV.1 La Philosophie de Scapy : Manipuler les Paquets comme des Objets

Scapy, bibliothèque Python, révolutionne la manipulation de paquets en la traitant non comme une chaîne d’octets, mais comme une composition d’objets protocolaires. Ce sous-chapitre introduit cette philosophie puissante. L’étudiant apprendra à instancier, empiler et modifier des couches de protocoles (Ether() / IP() / TCP()) avec une syntaxe intuitive. Cette approche objectale abstrait la complexité du calcul des checksums et de la longueur des champs, permettant de se concentrer sur la logique de l’interaction protocolaire désirée, que ce soit pour l’analyse ou l’attaque.

IV.2 Techniques de Forgage : Création de Paquets sur Mesure

Au-delà de la lecture, le pouvoir de Scapy réside dans le forgeage. Ce segment technique détaille la création de paquets sur mesure pour des tâches spécifiques : envoi de sondes ARP pour la découverte d’hôtes (arping), création de paquets TCP avec des flags personnalisés pour tester des pare-feux, ou génération de trafic ICMP pour des diagnostics de type traceroute. L’étudiant codera des scripts qui construisent, envoient et reçoivent des paquets forgés, acquérant une maîtrise pratique de l’interaction directe avec les couches 2, 3 et 4 du modèle OSI.

IV.3 Analyse Critique : Détection des Paquets Forgés et Ambiguïtés Protocolaires

Le forgeage de paquets n’est pas une science exacte ; les piles réseau des systèmes d’exploitation peuvent interpréter des paquets ambigus de manières radicalement différentes (RFC 791). Cette section explore cette “zone grise” protocolaire, souvent exploitée par des techniques d’évasion d’IDS ou de scan de système d’exploitation (OS fingerprinting). L’analyse critique portera sur la manière dont des paquets non-conformes sont générés et comment les systèmes de sécurité tentent de les normaliser ou de les détecter, révélant les limites de la standardisation des protocoles.

IV.4 Mise en Situation : Audit de Robustesse d’un Portail Captif

Les portails captifs des hotspots Wi-Fi publics en Afrique sont souvent des développements ad-hoc présentant des failles. La mission consiste à utiliser Scapy pour auditer leur robustesse. L’étudiant créera des scripts pour tenter de contourner le portail en forgeant des paquets DNS, en usurpant l’adresse MAC d’un client déjà authentifié, ou en injectant des paquets qui perturbent la session des autres utilisateurs. Cet exercice pratique démontre comment le forgeage de paquets devient un outil d’audit de sécurité puissant dans des environnements contraints.

Chapitre V. Théorie et Mécanismes des Canaux de Communication Cryptés

V.1 Le Modèle de Menace TLS : Confidentialité, Intégrité, Authentification

Le protocole TLS (Transport Layer Security) ne se contente pas de chiffrer les données ; il répond à un modèle de menace précis. Ce concept fondamental structure le protocole autour de trois piliers : la confidentialité (contre l’écoute), l’intégrité (contre la modification) et l’authentification (contre l’usurpation d’identité). Ce sous-chapitre dissèque la manière dont le “handshake” TLS établit une session sécurisée en négociant des algorithmes et en échangeant des clés pour garantir ces trois propriétés, constituant la base théorique de toute communication sécurisée sur Internet.

V.2 Anatomie d’un Handshake TLS : Échange de Clés et Validation de Certificats

Au cœur de TLS se trouve le “handshake”, une négociation complexe mais cruciale. Ce segment technique détaille les étapes de ce processus : le ClientHello proposant des suites cryptographiques, le ServerHello faisant son choix, l’envoi du certificat du serveur, et l’échange de clés (via RSA ou Diffie-Hellman). Une attention particulière est portée sur la chaîne de confiance des certificats X.509 et le rôle des autorités de certification (CA). Comprendre ce flux est indispensable pour diagnostiquer les échecs de connexion et identifier les attaques de type “Man-in-the-Middle”.

V.3 Limites et Vulnérabilités Historiques : De POODLE à Heartbleed

La perfection cryptographique est un mythe ; l’histoire de SSL/TLS est jalonnée de vulnérabilités critiques. Cette section propose une analyse post-mortem de failles emblématiques comme POODLE (liée à un repli vers une version obsolète), et Heartbleed (une fuite de mémoire catastrophique dans OpenSSL). L’étude de ces cas démontre que la sécurité d’un canal ne dépend pas seulement de la robustesse des algorithmes, mais aussi de la qualité de leur implémentation et de la configuration du serveur, une leçon d’humilité essentielle pour tout ingénieur sécurité.

V.4 Enjeu Local : Le Défi de l’Infrastructure à Clés Publiques (PKI) en Afrique

Déployer TLS efficacement suppose une confiance dans les autorités de certification (CA). Or, la dépendance quasi-totale envers des CA étrangères pose un problème de souveraineté numérique et de performance (latence de la vérification OCSP/CRL). Ce module explore des solutions adaptées : la mise en place de CA nationales ou régionales, l’utilisation de protocoles comme DANE pour valider les certificats via DNSSEC, ou le déploiement de “certificate pinning” dans les applications mobiles locales pour se prémunir contre l’interception par des acteurs étatiques ou des intermédiaires malveillants.

Chapitre VI. Implémentation de Canaux Sécurisés avec OpenSSL

VI.1 L’API OpenSSL : Intégration d’un Contexte SSL/TLS en C

OpenSSL fournit une bibliothèque C, libssl, permettant d’intégrer la cryptographie TLS directement dans une application. Ce sous-chapitre est un guide d’implémentation. Il montre comment initialiser la bibliothèque, créer un objet de contexte (SSL_CTX), le configurer avec un certificat et une clé privée, puis l’associer à un descripteur de fichier de socket existant. Cette démarche transforme un canal de communication en clair, basé sur des sockets classiques, en un tunnel chiffré robuste, en s’appuyant sur une implémentation de référence éprouvée.

VI.2 Programmation du Tunnel : Les Fonctions SSL_read() et SSL_write()

Une fois le contexte TLS établi, les fonctions standards read() et write() ne sont plus utilisées. Ce segment technique se concentre sur leurs équivalents sécurisés : SSL_read() et SSL_write(). L’étudiant apprendra comment ces fonctions gèrent de manière transparente le chiffrement/déchiffrement, la gestion des “records” TLS et la renégociation de session. La gestion correcte des erreurs retournées par ces fonctions est critique, car elles peuvent indiquer non seulement des problèmes réseau, mais aussi des alertes de sécurité TLS, comme un échec de vérification de l’intégrité.

VI.3 Critique des Configurations par Défaut : Durcissement et “Perfect Forward Secrecy”

Faire confiance aux paramètres par défaut d’OpenSSL est une erreur de débutant. Cette section critique analyse les configurations standards et enseigne comment les durcir. L’objectif est d’imposer des versions de protocole modernes (TLS 1.2/1.3), de désactiver les suites cryptographiques faibles ou obsolètes (RC4, 3DES) et de configurer l’échange de clés Diffie-Hellman éphémère (DHE/ECDHE). Cette dernière action garantit la “Perfect Forward Secrecy”, une propriété cruciale qui empêche le déchiffrement a posteriori du trafic si la clé privée du serveur est compromise.

VI.4 Application Finale : Sécurisation d’un Service de Chat pour Réseau Local

Le projet final synthétise toutes les compétences acquises. Les étudiants doivent modifier un simple service de chat client-serveur en C (basé sur les sockets du Chapitre I) pour y intégrer un canal sécurisé avec OpenSSL. Le défi est de le faire fonctionner dans un contexte de réseau local sans accès à une CA publique, en générant une CA auto-signée pour l’occasion. Ce projet ancre la compétence dans un scénario réaliste de sécurisation d’une application d’entreprise ou communautaire, où la confiance est gérée localement.

ANNEXES

A. Guide Pratique de Scapy pour l’Audit Réseau

Cette annexe constitue un manuel de terrain pour l’analyste en sécurité des infrastructures. Elle ne liste pas des commandes, mais présente des scénarios d’audit complets réalisables avec Scapy. Par exemple, la simulation d’une attaque par déni de service SYN Flood à faible volume pour tester la réactivité des systèmes de détection, ou la création d’un script de “fuzzing” protocolaire pour découvrir des vulnérabilités dans les piles TCP/IP des équipements réseau embarqués. Pour le développeur cybersécurité, c’est un guide pour créer des outils de test de robustesse sur mesure.

B. Mémento OpenSSL : de la Génération de Clés au Débogage TLS

Cette section est un guide opérationnel pour l’ingénieur de protocoles réseau. Elle détaille les lignes de commande OpenSSL les plus vitales, non pas pour la théorie, mais pour l’action : générer une autorité de certification privée pour un environnement de développement, émettre des certificats serveurs et clients, et surtout, utiliser le client s_client comme un outil de débogage ultime. Savoir décortiquer la sortie de openssl s_client -connect pour vérifier la chaîne de certificats, les protocoles et les chiffrements négociés est une compétence diagnostique de premier ordre.

C. Stratégies d’Analyse avec Wireshark

Wireshark est le complément visuel indispensable à la programmation réseau. Cette annexe se concentre sur les stratégies d’analyse avancées pour le développeur cybersécurité. Elle explique comment utiliser les filtres d’affichage pour isoler une conversation TCP, comment “suivre” un flux applicatif pour reconstituer des données échangées, et comment utiliser les graphiques d’E/S pour visualiser les pics de trafic ou détecter des anomalies temporelles. L’objectif est de transformer Wireshark d’un simple sniffer en un puissant outil de débogage et d’analyse forensique pour valider le comportement du code développé.

Praxis Réseau en Contexte Africain : Entre Idéaux Architecturaux et Contraintes Opérationnelles
Comment le principe ‘end-to-end’ de Saltzer survit-il face aux réseaux africains souvent fragmentés et intermédiaires ?
Le principe ‘end-to-end’ de Jerome Saltzer est souvent violé en RDC pour des raisons pragmatiques. Les nœuds intermédiaires, comme les caches et les proxys, deviennent essentiels pour gérer la bande passante limitée et compenser la latence élevée. Cette déviation tactique s’aligne sur la nuance de Saltzer lui-même, qui stipule que le principe s’applique là où il est rentable. En pratique, nous sacrifions la pureté architecturale pour la viabilité du service. Ces ‘middleboxes’ ne sont plus des options mais des composants critiques de l’infrastructure, assurant une fonctionnalité de base là où une connexion directe et fiable entre les ‘ends’ est un luxe, garantissant ainsi la résilience par l’adaptation.

📚 Source :Travaux de Jerome Saltzer sur End-to-End Arguments via JSTOR

Comment déployer efficacement des conteneurs Docker sur des infrastructures locales en RDC avec une connectivité internet intermittente ?
Le déploiement de Docker en connectivité limitée impose une stratégie locale prioritaire. Le défi majeur est la disponibilité des images et la cohérence de l’état. La solution consiste à implémenter un registre Docker local, pré-alimenté avec toutes les images et dépendances nécessaires lors des fenêtres de connexion. Cette méthode s’inspire des principes de la ‘State Machine Replication’ de Leslie Lamport, où notre registre local agit comme un état répliqué et cohérent des artefacts requis. Au lieu de requêtes ‘pull’ vers le cloud, les applications se servent sur ce miroir local résilient. La connectivité intermittente devient alors une simple contrainte de synchronisation, assurant la continuité opérationnelle.

📚 Source :Travaux de Leslie Lamport sur State Machine Replication via Google Scholar

Une coupure de fibre à Kisangani isole un site. Comment rétablir un service réseau minimal en urgence ?
Face à une coupure de fibre, la priorité absolue est l’activation d’une redondance hétérogène. La philosophie de Vint Cerf et Bob Kahn, au cœur de TCP/IP, est la survie du réseau par la commutation de paquets sur n’importe quel chemin disponible. Concrètement, le trafic critique est basculé sur des liaisons VSAT ou des modems 4G/LTE agrégés. La programmation réseau consiste à reconfigurer dynamiquement les routeurs, via des scripts BGP ou de routage statique, pour forcer ce nouveau chemin. Un QoS agressif est appliqué pour ne laisser passer que les flux essentiels. C’est l’application brute du principe de datagramme : le service survit tant qu’un chemin, même dégradé, existe.

📚 Source :Travaux de Vint Cerf & Bob Kahn sur TCP/IP via Wikipedia (FR)

Au-delà de la latence, quel est le paramètre réseau le plus sous-estimé pour la performance applicative en Afrique ?
Le paramètre le plus insidieux et sous-estimé est la gigue (jitter), surtout lorsqu’elle est combinée à la perte de paquets. Contrairement à la latence, la gigue représente la variabilité du délai, ce qui est dévastateur pour les applications temps réel. Ce phénomène est lié aux problèmes que John Nagle cherchait à résoudre avec son algorithme concernant l’inefficacité des petits paquets. Sur les réseaux congestionnés, les files d’attente des routeurs créent une gigue extrême. Une programmation réseau experte ne se contente pas de mesurer le ping ; elle analyse la gigue et la perte avec des outils comme iperf3, puis adapte les tampons applicatifs pour lisser ces variations et préserver l’expérience utilisateur.

📚 Source :Travaux de John Nagle sur Nagle’s algorithm via Google Books


Discussion (0)

Aucune intervention pour le moment. Soyez le premier à contribuer.

Votre intervention Annuler la réponse

Leave a Reply

Your email address will not be published. Required fields are marked *