Stage de BUT2 : automatisations et sécurité réseau
Stage de BUT2 : fiabiliser une collecte Python, bâtir un module Go d’automatisation et analyser les échanges réseau.
En bref
- Problème
- Un service de veille billetterie par abonnement repose sur une collecte automatisée fragile et sur des échanges réseau qui échouent selon un contexte peu lisible.
- Ce que j’ai réalisé
- J’ai maintenu et fiabilisé la chaîne de collecte Python, et produit de zéro, avec l’assistant de programmation, sous ma direction, un module Go menant un workflow d’authentification puis de réservation, guidé par l’analyse du trafic réseau.
- Résultat
- La collecte a tenu malgré l’évolution des sources et le module Go a atteint un état fonctionnel.
- Rôle
- Développeur stagiaire : maintenance Python, module Go de bout en bout, analyse réseau.
- Équipe
- 4 personnes
- Statut
- Terminé
Sommaire8 sections
Contexte
Mon stage de deuxième année de BUT Informatique s’est déroulé sur onze semaines, 392 heures, au sein d’une très petite entreprise lyonnaise du secteur de la veille billetterie événementielle. Le service fonctionne par abonnement : des programmes surveillent en continu une soixantaine de sources, détectent l’information utile sur la disponibilité de billets, la diffusent aux membres, puis les assistent dans l’acquisition. Les comptes utilisés pendant le stage étaient ceux des abonnés de ce service de veille, avec leur consentement.
J’étais encadré par un tuteur en entreprise et une référente à l’IUT, et je travaillais avec deux collaborateurs à distance, dans d’autres pays. Par confidentialité, je ne nomme ni les sources ni les plateformes concernées : ces détails n’ajoutent rien à la compréhension de mon travail.
Le problème
Ma mission avait deux volets liés. Le premier était de maintenir et fiabiliser l’existant : une chaîne de collecte écrite en Python, qui doit rester opérationnelle en permanence malgré l’évolution constante des sources. Le second était de construire de nouveaux modules d’automatisation en Go, le langage retenu par l’entreprise pour ces composants.
Derrière les deux se cachait une même difficulté : les échanges réseau entre mes programmes et les services distants réussissent ou échouent selon un contexte peu lisible, où une requête dépend de celles qui l’ont précédée.
Déroulé du stage
Le stage s’est déroulé en cinq phases, de mai à juillet 2026, de l’analyse à la maintenance. Elles se chevauchent en partie.
Démarche et décisions
J’ai travaillé par itérations courtes : analyser, capturer et observer le réseau, architecturer, coder, tester pas à pas, isoler la cause d’un blocage, comparer à une référence, corriger, recommencer. Chaque dépôt Git garde la trace de cette progression.
Vue d’ensemble, la chaîne technique allait de la capture du trafic jusqu’à la supervision du module. Chaque rejet réseau observé renvoyait à l’étape d’analyse : le diagnostic était permanent.
Sur la collecte Python, la première tâche a été de corriger le point d’entrée dont un défaut perturbait la diffusion vers la communauté. Le reste du stage, j’ai diagnostiqué les défaillances source par source et mis à jour l’analyse syntaxique quand un site changeait sa structure. La collecte a tenu malgré l’évolution des sources.
Le premier gros module, en Go et parti de zéro, réalisait un workflow d’authentification puis de réservation sur un service tiers. Je l’ai pris de bout en bout : analyse du service, capture du trafic réseau comme référence, conception, implémentation, puis tests incrémentaux jusqu’à lever chaque blocage. Il a atteint un état fonctionnel.
Analyse réseau et sécurité
Le module devait respecter le protocole observé dans le trafic capturé. L’ordre, les valeurs et la complétude des en-têtes comptaient, et les paramètres TLS devaient rester constants d’un bout à l’autre de la session. Mon outil principal de diagnostic était la comparaison à une capture de référence : repérer, octet après octet, où ma requête divergeait de l’échange observé.
Le comparateur ci-dessous rejoue cette méthode sur une requête fictive : décochez un choix d’implémentation, les octets qui s’écartent de la référence passent en rouge et le serveur cesse d’accepter la requête.
Choix d’implémentation
| Ligne | Référence | Ma requête |
|---|---|---|
| TLS | paramètres 0x0a |
paramètres 0x0aparamètres 0x0b1 octet — paramètres TLS différents de la référence |
| 1 | GET /example |
GET /example |
| 2 | user-agent: Mozilla/5.0 (exemple) |
user-agent: Mozilla/5.0 (exemple) |
| 3 | accept-encoding: br |
accept-encoding: braccept-language: fr9 octets — ordre des en-têtes différent |
| 4 | accept-language: fr |
accept-language: fraccept-encoding: br9 octets — ordre des en-têtes différent |
| 5 | cookie: session=0x00 |
cookie: session=0x00cookie: session=0x011 octet — cookie d’une session inconnue du serveur |
| 6 | x-client-version: 2 |
x-client-version: 2x-client-version: 11 octet — version différente de la référence |
Réponse du serveur
200 acceptéLa requête ressemble à la référence. 403 refuséLa requête ne ressemble pas à la référence.
Octets divergents :
J’ai consacré une semaine à lire un script côté client pour en comprendre la logique.
Piloter un assistant de programmation par IA
L’entreprise m’a confié un assistant de programmation par IA. Au début, je l’utilisais mal : je lui envoyais tout, sans cadrer le problème, en attendant qu’il décide à ma place. J’ai avancé ainsi jusqu’à environ 60 % du premier module, puis un blocage net, impossible à dépasser de cette manière.
Quand je négligeais le contexte, l’assistant inventait ; quand je formulais mal le problème, il esquivait la vraie difficulté. J’ai alors pris le temps de comprendre moi-même les mécanismes du domaine, puis j’ai reformulé les problèmes. Dès lors, je décidais et je vérifiais ce que l’assistant produisait, jusqu’à terminer le module.
Sur la durée du stage, j’ai repris et maintenu une chaîne de collecte Python d’environ 26 000 lignes. J’ai produit de zéro un module Go d’environ 3 200 lignes.
Ce que j’ai appris, ce que je referais
J’ai mené un module complet en partant de zéro, sur un langage et un domaine que je ne connaissais pas. Ma principale limite, dont j’ai pris conscience pendant le stage, a été d’avancer plus vite que ma compréhension réelle ; j’ai appris à consolider, à m’assurer d’avoir compris une étape avant d’en empiler une autre. J’ai aussi découvert le travail en équipe distribuée : communication asynchrone, autonomie, traçabilité.
Ce stage a donné un sens concret à des notions parfois abstraites en cours — réseau, analyse de protocole, sécurité appliquée — et m’a confirmé mon intérêt pour la sécurité et le développement bas niveau. Pour la suite, je veillerai à consolider au fur et à mesure.
Compétences BUT mobilisées
| Compétence | Niveau | Ce que le projet montre, et preuve |
|---|---|---|
| RéaliserRéaliser un développement d’application | Niveau 2 | Développer de bout en bout un module logiciel.Preuve : Module Go produit de zéro, avec l’assistant de programmation, sous ma direction, réalisant un workflow authentification → réservation. |
| AdministrerFaire évoluer et maintenir un système informatique communicant en conditions opérationnelles | Niveau 2 | Analyser les échanges réseau d’une application.Preuve : Capture et analyse du trafic (HAR, Charles Proxy), fidélité protocolaire et cohérence de session TLS. |
| OptimiserOptimiser des applications | Niveau 2 | Fiabiliser et maintenir un système en production.Preuve : Maintenance d’une chaîne de collecte Python rendue tolérante à l’évolution des sources. |
| CollaborerTravailler dans une équipe informatique | Niveau 2 | Travailler en équipe distribuée à distance.Preuve : Projet mené à distance avec un tuteur et deux collaborateurs, suivi par dépôts Git. |