Les exemples du cours interagissent avec le système d’exploitation. Il est important de les essayer en dehors du navigateur / de Basthon.
Adapter les arguments de la ligne de commande (ou le chemin des fichiers dans
les programmes) et modifier les permissions des fichiers (cf commande chmod)
pour déclencher les exceptions de type FileNotFoundError, PermissionError
et NotADirectoryError.
Remarque : il n’est pas possible (sans casser le matériel) de volontairement
déclencher OSError (erreur d’entrée-sortie - périphérique de stockage défectueux
par exemple).
Reprendre un des exemples du cours, dans lequel le nom du fichier traité est inscrit en “dur” dans le programme et l’adapter pour que le nom du fichier soit passé en argument de la ligne de commande.
Approfondissement : réorganiser le programme pour que le point d’entrée (“main”) traite les paramètres (nombre de paramètres, existence, permissions) et appelle la fonction de traitement dont une précondition est que le nom du fichier passé en paramètre existe et que l’utilisateur dispose de droits d’accès suffisants.
Dans le cours, chapitre “Lecture et écriture de fichiers binaires” sous-chapitre
“Lecture de texte”, réécrire le code suivant pour intégrer la gestion des
exceptions (FileNotFoundError, PermissionError et OSError) :
with open("test.txt", "rt") as f:
while "" != (line := f.readline()):
print(line.strip())
Reprendre l’exemple précédent, mais cette fois, effectuer l’ouverture et le parcours du fichier uniquement s’il existe et si l’utilisateur à la permission.
Contexte
Des pirates (informatiques) ont tenté de se connecter à un serveur pour en prendre le contrôle via le protocole SSH (attaque de type dictionnaire ou force brute). Ces tentatives de connexion ont été enregistrées dans un journal (fichier de log).
Travail à faire
L’objectif est d’analyser ce fichier, et de compter le nombre de tentatives par adresse IP.
Attention à la qualité du programme :
- découper le programme en fonctions, avec spécification complète ;
- gérer les exceptions.
Remarques
- Le journal (log) de connexions fourni est réel et contient 24h de tentatives de connexion le 25/12/2025. Ne pas le téléverser sur une IA.
- Le serveur est protégé par un pare-feu qui bloque toute tentative au delà du troisième échec par minute.
- La protection du serveur a depuis été renforcée. Il n’est plus possible de s’y connecter en SSH à distance.
Approfondissements
Ces approfondissements sont de véritables challenges pour les débutants en programmation. L’utilisation de l’IA est autorisée pour demander comment réaliser une tâche générique (par exemple “comment trier un dictionnaire Python en fonction de ses valeurs”) ; l’adaptation au cas particulier doit être réalisée par l’étudiant.
- Trier les adresses IP par nombre de tentatives.
- Utiliser un service de géolocalisation pour déterminer le pays d’origine des attaques — remarque : cette information est faussée en cas d’utilisation d’un VPN ; exemples :