Activité

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).

Exercice A - Arguments

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.

Exercice B1 - Ajout d’exceptions

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())

Exercice B2 - Exception versus Alternative

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.

Mission - analyse de logs

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.

  1. Trier les adresses IP par nombre de tentatives.
  2. 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 :