Programmation Python / PHP · SQL · Réseaux TCP/IP · Cybersécurité de base · Bloc E4
Que vous choisissiez SISR ou SLAM, vous écrirez du code. SISR a besoin de scripts d'automatisation (Bash, PowerShell, Python), SLAM développe des applications complètes (PHP, Python, Java).
En Python, le typage est dynamique :
age = 19 # int
nom = "Camille" # str
moyenne = 14.75 # float
est_majeur = True # bool
modules = ["E4", "E5"] # list
En PHP, les variables commencent par $ :
<?php
$age = 19;
$nom = "Camille";
$moyenne = 14.75;
$est_majeur = true;
$modules = ["E4", "E5"];
?>
# Python
if age >= 18:
print("Majeur")
elif age >= 16:
print("Mineur, mais permis AM possible")
else:
print("Mineur")
for module in modules:
print(f"Module : {module}")
i = 0
while i < 5:
print(i)
i += 1
# Python
def calcul_moyenne(notes):
return sum(notes) / len(notes)
class Etudiant:
def __init__(self, nom, option):
self.nom = nom
self.option = option
def presente(self):
return f"{self.nom} — option {self.option}"
alice = Etudiant("Alice", "SISR")
print(alice.presente())
Le langage SQL (Structured Query Language) est utilisé par tous les SGBD relationnels : MariaDB, MySQL, PostgreSQL, Microsoft SQL Server, Oracle. Trois sous-langages :
CREATE, ALTER, DROP — structure de la base.INSERT, UPDATE, DELETE — modification des données.SELECT — interrogation.CREATE TABLE etudiants (
id INT AUTO_INCREMENT PRIMARY KEY,
nom VARCHAR(100) NOT NULL,
prenom VARCHAR(100) NOT NULL,
option_choisie ENUM('SISR','SLAM') NOT NULL,
moyenne DECIMAL(4,2),
date_inscription DATE DEFAULT CURRENT_DATE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
SELECT e.nom, e.prenom, c.titre AS cours, n.note
FROM etudiants e
INNER JOIN notes n ON n.etudiant_id = e.id
INNER JOIN cours c ON c.id = n.cours_id
WHERE e.option_choisie = 'SISR'
AND n.note >= 10
ORDER BY n.note DESC
LIMIT 20;
SELECT option_choisie, AVG(moyenne) AS moyenne_promo, COUNT(*) AS effectif
FROM etudiants
GROUP BY option_choisie
HAVING AVG(moyenne) >= 12;
Le modèle OSI (Open Systems Interconnection, ISO 7498) décompose les communications réseau en 7 couches. La pile TCP/IP en regroupe 4. Mémorisation : « Pour Le Réseau Tout Se Passe Automatiquement ».
| OSI | Nom | Rôle | Exemples de protocoles / unités |
|---|---|---|---|
| 7 | Application | Service utilisateur | HTTP, HTTPS, FTP, SMTP, DNS, SSH |
| 6 | Présentation | Encodage, chiffrement | TLS, JPEG, ASCII, UTF-8 |
| 5 | Session | Sessions logiques | NetBIOS, RPC |
| 4 | Transport | Segmentation, fiabilité | TCP (fiable), UDP (rapide) — segment |
| 3 | Réseau | Adressage logique, routage | IPv4, IPv6, ICMP, ARP — paquet |
| 2 | Liaison | Adressage physique | Ethernet 802.3, Wi-Fi 802.11, MAC — trame |
| 1 | Physique | Signal électrique / optique | RJ45, fibre, ondes radio — bit |
Une adresse IPv4 est codée sur 32 bits, notée en 4 octets décimaux séparés par des points : 192.168.1.10. Le masque de sous-réseau en notation CIDR ajoute /n où n est le nombre de bits du préfixe réseau.
| CIDR | Masque | Hôtes utiles | Usage type |
|---|---|---|---|
| /24 | 255.255.255.0 | 254 | Réseau LAN PME |
| /25 | 255.255.255.128 | 126 | VLAN service |
| /26 | 255.255.255.192 | 62 | VLAN département |
| /27 | 255.255.255.224 | 30 | Salle informatique |
| /30 | 255.255.255.252 | 2 | Liaison point-à-point routeurs |
La triade CIA formalise les 3 propriétés fondamentales de la sécurité de l'information :
Énoncé 1 (réseau) : L'entreprise possède le réseau 192.168.50.0/24. Découpez-le en 4 sous-réseaux égaux pour les services Direction, Compta, Production, Invités.
/26 (255.255.255.192).192.168.50.0/26 · Compta : 192.168.50.64/26 · Production : 192.168.50.128/26 · Invités : 192.168.50.192/26.Énoncé 2 (SQL) : Affichez la moyenne des notes par option, uniquement pour les étudiants inscrits depuis 2024.
SELECT e.option_choisie, AVG(n.note) AS moyenne
FROM etudiants e
INNER JOIN notes n ON n.etudiant_id = e.id
WHERE e.date_inscription >= '2024-01-01'
GROUP BY e.option_choisie;
SELECT * en production : inefficace et risqué (révèle la structure interne).SELECT * FROM users WHERE id=?.Comprendre les 7 couches OSI est indispensable pour diagnostiquer un incident réseau : chaque incident concerne une couche précise. La règle de diagnostic : remonter du bas vers le haut.
| Couche | Nom | Unité de données (PDU) | Équipement | Exemple d'incident |
|---|---|---|---|---|
| 1 | Physique | Bit | Câble RJ45, fibre optique, switch (ports), point d'accès Wi-Fi | Câble débranché, LED LINK éteinte |
| 2 | Liaison de données | Trame Ethernet | Switch, pont, carte réseau (MAC) | Boucle réseau, doublon MAC, VLAN mal configuré |
| 3 | Réseau | Paquet | Routeur, pare-feu L3 (IP) | Mauvaise passerelle, route absente, ACL bloquante |
| 4 | Transport | Segment (TCP) / Datagramme (UDP) | Pare-feu L4 (ports) | Port fermé, SYN flood, connexion TCP qui timeout |
| 5 | Session | Données | — | Session SSH déconnectée, cookie expiré |
| 6 | Présentation | Données | — | Certificat TLS expiré, encodage UTF-8 corrompu |
| 7 | Application | Données | — | Erreur 500 PHP, requête SQL invalide |
Quand une application envoie une donnée, chaque couche ajoute un en-tête (header) avec ses propres informations : c'est l'encapsulation. À la réception, chaque couche retire son en-tête : c'est la décapsulation.
[Donnée applicative HTTP]
+ en-tête TCP (port src, port dst, séquence) -> Segment TCP
+ en-tête IP (IP src, IP dst, TTL) -> Paquet IP
+ en-tête Ethernet (MAC src, MAC dst, type) -> Trame Ethernet
+ signal électrique sur le câble cuivre -> Bits physiques
Le VLSM (Variable Length Subnet Mask) découpe un réseau en sous-réseaux de tailles différentes selon les besoins. C'est un classique de l'épreuve E5 SISR.
| CIDR | Masque décimal | Masque binaire (4 octets) | Adresses totales | Hôtes utiles |
|---|---|---|---|---|
| /30 | 255.255.255.252 | 11111111.11111111.11111111.11111100 | 4 | 2 |
| /29 | 255.255.255.248 | 11111111.11111111.11111111.11111000 | 8 | 6 |
| /28 | 255.255.255.240 | 11111111.11111111.11111111.11110000 | 16 | 14 |
| /27 | 255.255.255.224 | 11111111.11111111.11111111.11100000 | 32 | 30 |
| /26 | 255.255.255.192 | 11111111.11111111.11111111.11000000 | 64 | 62 |
| /25 | 255.255.255.128 | 11111111.11111111.11111111.10000000 | 128 | 126 |
| /24 | 255.255.255.0 | 11111111.11111111.11111111.00000000 | 256 | 254 |
| /23 | 255.255.254.0 | 11111111.11111111.11111110.00000000 | 512 | 510 |
| /22 | 255.255.252.0 | 11111111.11111111.11111100.00000000 | 1 024 | 1 022 |
| /16 | 255.255.0.0 | 11111111.11111111.00000000.00000000 | 65 536 | 65 534 |
Énoncé : la PME possède le réseau 172.16.0.0/22 (1 022 hôtes). Trois départements à raccorder :
Découpage VLSM (du plus grand au plus petit) :
| Département | Sous-réseau | Masque | 1re IP utile | Dernière IP utile | Broadcast |
|---|---|---|---|---|---|
| Production (/22 trop large, /23 = 510 - non, /22 nécessaire) → on prend /22 puis on subdivise. Refaisons avec /22 = 1022 hôtes : Production /23 | 172.16.0.0/23 | 255.255.254.0 | 172.16.0.1 | 172.16.1.254 | 172.16.1.255 |
| Administration /24 | 172.16.2.0/24 | 255.255.255.0 | 172.16.2.1 | 172.16.2.254 | 172.16.2.255 |
| Direction /26 | 172.16.3.0/26 | 255.255.255.192 | 172.16.3.1 | 172.16.3.62 | 172.16.3.63 |
| Lien R1↔R2 /30 | 172.16.3.64/30 | 255.255.255.252 | 172.16.3.65 | 172.16.3.66 | 172.16.3.67 |
| Service | Port | Transport | Usage |
|---|---|---|---|
| FTP (data) | 20 | TCP | Transfert de fichiers — données |
| FTP (control) | 21 | TCP | Transfert de fichiers — commandes |
| SSH | 22 | TCP | Connexion sécurisée à distance (Linux, Cisco) |
| Telnet | 23 | TCP | Connexion à distance non sécurisée (à éviter) |
| SMTP | 25 | TCP | Envoi d'emails |
| DNS | 53 | UDP/TCP | Résolution de noms |
| DHCP serveur | 67 | UDP | Distribution d'adresses IP |
| DHCP client | 68 | UDP | Réception de bail DHCP |
| HTTP | 80 | TCP | Web non chiffré |
| POP3 | 110 | TCP | Réception d'emails |
| IMAP | 143 | TCP | Réception d'emails (synchronisation) |
| HTTPS | 443 | TCP | Web chiffré TLS |
| SMB / CIFS | 445 | TCP | Partage de fichiers Windows |
| RDP | 3389 | TCP | Bureau à distance Windows |
| MySQL / MariaDB | 3306 | TCP | Base de données MySQL |
| PostgreSQL | 5432 | TCP | Base de données PostgreSQL |
| MongoDB | 27017 | TCP | Base de données NoSQL |
| Redis | 6379 | TCP | Cache mémoire |
# Liste (mutable, ordonnée)
notes = [12, 14, 16, 9, 18]
notes.append(15)
print(notes[0]) # 12
print(notes[-1]) # 15
print(len(notes)) # 6
print(sorted(notes)) # [9, 12, 14, 15, 16, 18]
# Dictionnaire (clé:valeur)
etudiant = {
"nom": "Martin",
"prenom": "Alice",
"option": "SISR",
"notes": [14, 16, 12]
}
print(etudiant["nom"])
etudiant["age"] = 19
for cle, valeur in etudiant.items():
print(f"{cle} -> {valeur}")
# Tuple (immuable)
coordonnees = (48.8566, 2.3522) # Paris
try:
n = int(input("Entrez un entier : "))
resultat = 100 / n
print(f"100 / {n} = {resultat}")
except ValueError:
print("Erreur : ce n'est pas un entier valide.")
except ZeroDivisionError:
print("Erreur : division par zéro impossible.")
except Exception as e:
print(f"Erreur inattendue : {e}")
finally:
print("Fin du programme.")
# Écriture
with open("rapport.txt", "w", encoding="utf-8") as f:
f.write("Rapport TP réseau\n")
f.write("Date : 2026-05-28\n")
# Lecture ligne par ligne
with open("rapport.txt", "r", encoding="utf-8") as f:
for ligne in f:
print(ligne.strip())
PDO (PHP Data Objects) est l'API recommandée pour accéder aux bases de données : requêtes préparées obligatoires pour prévenir l'injection SQL.
<?php
try {
$pdo = new PDO(
"mysql:host=localhost;dbname=lms;charset=utf8mb4",
"user_app",
"MotDePasseFort!",
[
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
]
);
// Requête préparée — SÉCURISÉE
$stmt = $pdo->prepare("SELECT * FROM etudiants WHERE option_choisie = :opt AND moyenne >= :min");
$stmt->execute([
":opt" => "SISR",
":min" => 12,
]);
foreach ($stmt->fetchAll() as $etu) {
echo "{$etu['prenom']} {$etu['nom']} — {$etu['moyenne']}\n";
}
} catch (PDOException $e) {
error_log("Erreur DB : " . $e->getMessage());
http_response_code(500);
}
?>
| Jointure | Comportement | Cas d'usage |
|---|---|---|
INNER JOIN | Renvoie uniquement les lignes qui matchent dans les 2 tables | Étudiants ayant des notes |
LEFT JOIN (ou LEFT OUTER JOIN) | Renvoie toutes les lignes de la table de gauche + NULL pour les non-matches à droite | Tous les étudiants même sans note |
RIGHT JOIN | Inverse de LEFT JOIN | Toutes les notes même sans étudiant lié (incohérence à corriger) |
FULL OUTER JOIN | Renvoie toutes les lignes des 2 tables, NULL si pas de match. MySQL ne le supporte pas nativement — utiliser UNION. | Audit complet |
SELECT e.nom, e.prenom, COUNT(n.id) AS nb_notes, AVG(n.note) AS moyenne
FROM etudiants e
LEFT JOIN notes n ON n.etudiant_id = e.id
GROUP BY e.id, e.nom, e.prenom
ORDER BY moyenne DESC;
START TRANSACTION;
INSERT INTO commandes (client_id, montant) VALUES (42, 199.90);
SET @cmd_id = LAST_INSERT_ID();
INSERT INTO commande_lignes (commande_id, produit_id, quantite) VALUES (@cmd_id, 7, 2);
UPDATE stocks SET quantite = quantite - 2 WHERE produit_id = 7;
-- Si tout OK :
COMMIT;
-- Sinon :
-- ROLLBACK;
NOT NULL — valeur obligatoire.UNIQUE — valeur unique dans la colonne.PRIMARY KEY — identifiant unique de la ligne (= NOT NULL + UNIQUE + index).FOREIGN KEY ... REFERENCES table(col) — intégrité référentielle.CHECK (note >= 0 AND note <= 20) — règle métier.DEFAULT — valeur par défaut si non renseignée.Le chiffrement symétrique AES-256 (Advanced Encryption Standard, clé 256 bits) est le standard mondial pour le chiffrement de données au repos. Utilisé par Bitlocker, LUKS, Veracrypt, S3 Server-Side Encryption.
# Linux — chiffrer un fichier avec OpenSSL AES-256
openssl enc -aes-256-cbc -salt -pbkdf2 -in secret.txt -out secret.txt.enc
# Déchiffrer
openssl enc -aes-256-cbc -d -pbkdf2 -in secret.txt.enc -out secret.txt
Un hash cryptographique transforme un message en empreinte de taille fixe. Toute modification du message change radicalement l'empreinte (effet d'avalanche).
# Linux — calculer le hash SHA-256 d'un fichier
sha256sum debian-12.5.iso
# 8e51f33e9efe0ad... debian-12.5.iso
# Comparer avec la valeur officielle
echo "8e51f33e9efe0ad... debian-12.5.iso" | sha256sum -c
Énoncé : « SARL Aurore » dispose du bloc 192.168.10.0/24 et veut 3 VLAN départementaux. Faites le plan d'adressage complet.
| VLAN | Département | Hôtes prévus | Sous-réseau | Plage utilisable | Passerelle | Broadcast |
|---|---|---|---|---|---|---|
| 10 | Direction | 10 | 192.168.10.0/27 | .1 à .30 | 192.168.10.1 | 192.168.10.31 |
| 20 | Compta | 20 | 192.168.10.32/27 | .33 à .62 | 192.168.10.33 | 192.168.10.63 |
| 30 | Production | 60 | 192.168.10.64/26 | .65 à .126 | 192.168.10.65 | 192.168.10.127 |
| 99 | Management | 5 | 192.168.10.128/29 | .129 à .134 | 192.168.10.129 | 192.168.10.135 |
Inscrivez-vous pour accéder aux 5 autres leçons + le quiz final.
Créer mon compteChoisis quels cookies tu acceptes — modifiable à tout moment.