Aller au contenu

📌 FICHE BILAN & MÉMO⚓︎

Chaînes de Caractères : L'Essentiel à Retenir⚓︎

🎯 Synthèse de la Séance⚓︎

Élément Détail
Thème Manipulation de chaînes de caractères (strings)
Application Parsing de fichiers de logs
Compétences Extraction, transformation, analyse de texte
Durée 4 heures
Livrable Script d'analyse de logs + rapport

✅ Objectifs Atteints⚓︎

À l'issue de cette séance, vous devez être capable de :

  • ✅ Définir une chaîne de caractères et ses propriétés
  • ✅ Concaténer, mesurer, indexer des chaînes
  • ✅ Extraire des sous-chaînes avec le slicing
  • ✅ Utiliser les méthodes essentielles (split, strip, replace, upper, lower)
  • ✅ Parser une ligne de log pour en extraire l'IP, l'URL, le code HTTP
  • ✅ Automatiser l'analyse de logs avec un script Python
  • ✅ Générer un rapport professionnel exploitable par le management

🔑 Les 8 Méthodes Clés à Maîtriser⚓︎

Méthode Action Syntaxe Exemple
.upper() MAJUSCULES s.upper() "admin".upper()"ADMIN"
.lower() minuscules s.lower() "ADMIN".lower()"admin"
.strip() Supprimer espaces s.strip() " test ".strip()"test"
.replace(a, b) Remplacer s.replace(a, b) "hello".replace("l", "L")"heLLo"
.split(sep) Découper s.split(sep) "a,b,c".split(",")['a', 'b', 'c']
.count(x) Compter s.count(x) "aaa".count("a")3
len(s) Longueur len(s) len("Python")6
s[i] Indexation s[i] "Python"[0]'P'

🧮 Slicing : La Syntaxe à Retenir⚓︎

🐍 Script Python
chaine[début:fin:pas]
Syntaxe Signification Exemple avec "Python"
s[:3] 3 premiers caractères "Pyt"
s[3:] Du 4e à la fin "hon"
s[-3:] 3 derniers caractères "hon"
s[::2] 1 caractère sur 2 "Pto"
s[::-1] Inverser "nohtyP"

[ILLUSTRATION : Schéma mémoire d'indexation]
Légende : Représentation visuelle de la chaîne "Python" avec index positifs (0-5) et négatifs (-6 à -1)


📊 Structure d'un Log Apache/Nginx⚓︎

Format Standard⚓︎

📋 Texte
IP - - [Date] "Méthode URL Protocole" Code Taille

Exemple Annoté⚓︎

📋 Texte
192.168.1.10 - - [20/Feb/2026:10:15:32 +0100] "GET /index.html HTTP/1.1" 200 2345
    ↑            ↑                              ↑    ↑                     ↑    ↑
    IP         Date                           Méthode URL               Code Taille

Extraction avec .split()⚓︎

🐍 Script Python
ligne = '192.168.1.10 - - [20/Feb/2026:10:15:32 +0100] "GET /index.html HTTP/1.1" 200 2345'
parties = ligne.split()

ip = parties[0]           # 192.168.1.10
methode = parties[5]      # "GET
url = parties[6]          # /index.html
code_http = parties[8]    # 200
taille = parties[9]       # 2345

🚨 Codes HTTP à Connaître⚓︎

Code Nom Signification Action IT
200 OK Requête réussie ✅ Tout va bien
301 Moved Permanently Redirection permanente ℹ️ Page déplacée
403 Forbidden Accès refusé 🔒 Vérifier permissions
404 Not Found Page inexistante 🔍 Vérifier liens/typos
500 Internal Server Error Erreur serveur ⚠️ Vérifier logs applicatifs
503 Service Unavailable Serveur surchargé 🔥 Vérifier ressources (CPU, RAM)

🛠️ Template de Script d'Analyse de Logs⚓︎

🐍 Script Python
# ═══════════════════════════════════════════════════════════
# ANALYSE DE LOGS — TEMPLATE RÉUTILISABLE
# ═══════════════════════════════════════════════════════════

# Initialisation des compteurs
total = 0
compteurs = {"200": 0, "404": 0, "500": 0}
compteur_ip = {}

# Lecture du fichier
with open("access.log", "r") as fichier:
    for ligne in fichier:
        total += 1
        parties = ligne.strip().split()

        # Extraction
        ip = parties[0]
        code = parties[8]

        # Comptage par code
        if code in compteurs:
            compteurs[code] += 1

        # Comptage par IP
        compteur_ip[ip] = compteur_ip.get(ip, 0) + 1

# Affichage des résultats
print(f"Total : {total}")
print(f"Requêtes 200 : {compteurs['200']}")
print(f"Erreurs 404 : {compteurs['404']}")
print(f"IP max : {max(compteur_ip, key=compteur_ip.get)}")

💡 Conseil : Enregistrez ce template comme analyse_logs_template.py pour le réutiliser dans vos futurs projets.


🎓 Pourquoi C'est Important en Administration Système ?⚓︎

Les Logs, C'est la Boîte Noire du Système⚓︎

En tant que technicien SISR, vous passerez 30-40% de votre temps à analyser des logs pour :

Situation Exemple Concret
Détection d'intrusion Une IP fait 1000 requêtes en 5 minutes → Force brute
Diagnostic de panne Le site est lent → Les logs montrent 500 erreurs 500
Optimisation Quelles pages sont les plus consultées ? → Prioriser le cache
Reporting Le patron veut savoir combien de visiteurs uniques ce mois
Conformité RGPD Prouver qu'aucune donnée sensible n'a été exposée

Sans maîtrise des chaînes → vous ne pouvez pas automatiser → vous perdez des heures à lire manuellement.


🔄 Lien avec les Autres Séances⚓︎

Séance Lien avec S2
S1 Variables et types → Les chaînes sont un type de données
S3 Listes et boucles → Itérer sur les lignes d'un fichier
S5 Fonctions → Encapsuler le parsing dans une fonction
S8 Regex (expressions régulières) → Parsing avancé
BLOC 3 - S5 Analyse de logs de sécurité (firewall, IDS/IPS)

📚 Ressources pour Aller Plus Loin⚓︎

Documentation Officielle⚓︎

Tutoriels Recommandés⚓︎

  • OpenClassrooms : "Apprenez à programmer en Python" (Chapitre 7 : Chaînes)
  • Real Python : "Python String Formatting Best Practices"
  • FreeCodeCamp : "How to Parse Log Files in Python"

Outils Professionnels (à découvrir plus tard)⚓︎

Outil Usage Pourquoi c'est puissant
Splunk Agrégation et analyse de logs Interface graphique, alertes automatiques
ELK Stack Elasticsearch + Logstash + Kibana Open source, ultra-scalable
Graylog Centralisation de logs Gratuit, adapté PME
fail2ban Blocage automatique d'IPs suspectes Détecte les tentatives de brute force

💡 En tant que technicien SISR, vous devrez maîtriser AU MOINS un de ces outils.


💪 Exercices d'Entraînement⚓︎

Exercice 1 : Extraire un Domaine d'une URL⚓︎

Objectif : Extraire le nom de domaine d'une URL complète.

🐍 Script Python
url = "https://www.monsite.fr/produits/laptop?id=123"

# Étapes :
# 1. Supprimer le protocole (https://)
# 2. Extraire jusqu'au premier /
# 3. Afficher le domaine

# À vous de jouer !

Solution :

🐍 Script Python
url = "https://www.monsite.fr/produits/laptop?id=123"
sans_protocole = url.replace("https://", "").replace("http://", "")
domaine = sans_protocole.split("/")[0]
print(domaine)  # www.monsite.fr


Exercice 2 : Valider un Mot de Passe⚓︎

Objectif : Vérifier qu'un mot de passe respecte les règles : - Au moins 12 caractères - Contient au moins 1 majuscule - Contient au moins 1 chiffre

🐍 Script Python
def valider_mot_de_passe(mdp):
    # À compléter
    pass

# Tests
print(valider_mot_de_passe("Pass123456789"))  # True
print(valider_mot_de_passe("pass123456789"))  # False (pas de majuscule)
print(valider_mot_de_passe("Password"))       # False (pas de chiffre)

Solution :

🐍 Script Python
def valider_mot_de_passe(mdp):
    if len(mdp) < 12:
        return False
    if not any(c.isupper() for c in mdp):
        return False
    if not any(c.isdigit() for c in mdp):
        return False
    return True


Exercice 3 : Anonymiser une Adresse IP⚓︎

Objectif : Remplacer le dernier octet d'une IP par XXX pour anonymisation.

🐍 Script Python
ip = "192.168.1.42"
# Résultat attendu : "192.168.1.XXX"

Solution :

🐍 Script Python
ip = "192.168.1.42"
parties = ip.split(".")
parties[3] = "XXX"
ip_anonyme = ".".join(parties)
print(ip_anonyme)  # 192.168.1.XXX


🧠 Auto-Évaluation⚓︎

Cochez les compétences que vous maîtrisez maintenant :

Je sais... Maîtrisé ?
Créer une chaîne de caractères en Python
Concaténer deux chaînes avec +
Obtenir la longueur d'une chaîne avec len()
Accéder au 3e caractère d'une chaîne (index 2)
Extraire les 5 premiers caractères avec [:5]
Inverser une chaîne avec [::-1]
Convertir en majuscules avec .upper()
Supprimer les espaces avec .strip()
Remplacer un mot par un autre avec .replace()
Découper une chaîne avec .split()
Parser une ligne de log pour extraire l'IP et le code HTTP
Compter les occurrences d'un code HTTP dans un log
Générer un rapport formaté avec des bordures

Si vous avez coché < 10 cases, revoir la fiche de cours et refaire le TP.


📅 Prochaine Séance : S3⚓︎

Thème : Listes et Boucles⚓︎

Ce que vous allez apprendre : - Créer et manipuler des listes - Parcourir une liste avec for - Ajouter/supprimer des éléments - Trier et filtrer des listes

Application : Créer un script qui lit un fichier de logs complet, stocke les IPs dans une liste, et génère un rapport des 10 IPs les plus actives.

Prérequis S3 : Maîtrise des chaînes de caractères (S2) ✅


💬 Citations à Retenir⚓︎

"80% de l'administration système, c'est manipuler du texte. Les 20% restants, c'est comprendre ce qu'il faut manipuler."
— Proverbe du technicien SISR

"Un log non analysé, c'est comme une boîte noire qu'on n'ouvre jamais. Vous savez qu'il y a des infos dedans, mais elles ne servent à rien."
— Administrateur système, après une panne non détectée

"Si vous savez parser un log, vous savez parser n'importe quel fichier texte. C'est la compétence de base de tout automatiseur."
— DevOps engineer


🎯 Mot de la Fin⚓︎

Félicitations ! Vous venez de maîtriser une compétence fondamentale en administration système.

La manipulation de chaînes de caractères, c'est : - 🔧 La base de l'automatisation - 📊 Le cœur de l'analyse de logs - 🚀 La clé pour devenir efficace

Un script de 20 lignes peut vous faire gagner 10 heures par semaine.
C'est ça, être un bon technicien SISR : automatiser pour créer de la valeur.


✉️ Contact et Support⚓︎

Questions sur cette séance ?

  • 📧 Email enseignant : [email@exemple.fr]
  • 💬 Discord : Salon #maths-info
  • 📚 Plateforme : Espace de cours BTS SIO

Ressources additionnelles : - [Lien vers le dépôt GitHub du cours] - [Lien vers les exercices complémentaires]