TP – API DNS : Vérification automatique de domaines =================================================== Durée : 5 heures Niveau : BTS SIO 1re année (SISR/SLAM, bases API REST + notions DNS) ---------------------------------------------------------------------------------- 1) Objectif pédagogique ---------------------------------------------------------------------------------- Écrire un script Python qui : 1) lit une liste de domaines depuis un fichier texte (`domains.txt`), 2) interroge une API publique DNS (Google ou Cloudflare DNS-over-HTTPS), 3) récupère pour chaque domaine ses enregistrements A, AAAA et MX, 4) classe les domaines : valides vs invalides, avec ou sans MX, 5) exporte un rapport CSV et affiche un résumé clair en console. ---------------------------------------------------------------------------------- 2) Exigences techniques ---------------------------------------------------------------------------------- - Utiliser **python-venv** pour travailler dans un environnement isolé. - Bibliothèques Python obligatoires : • requests (appel API HTTP) • python-dotenv (facultatif si l’API nécessite clé ou config) - Ne pas commiter de secrets (si clé API nécessaire pour certaines options). ---------------------------------------------------------------------------------- 3) Pré-requis côté plateforme ---------------------------------------------------------------------------------- - Poste Debian 13 avec python3, venv et pip installés. - Connexion Internet pour interroger une API DNS publique. - Exemple de fichier `domains.txt` fourni : google.com wikipedia.org openai.com site-inexistant.tld free.fr etc. (mélange de domaines valides et d’un faux domaine pour test). ---------------------------------------------------------------------------------- 4) Mise en place de l’environnement ---------------------------------------------------------------------------------- 1) Créer le dossier de travail et le venv : $ mkdir tp-dns-api && cd tp-dns-api $ python3 -m venv .venv $ source .venv/bin/activate 2) Installer les bibliothèques : (.venv) $ python -m pip install --upgrade pip (.venv) $ pip install requests python-dotenv 3) Créer le fichier `domains.txt` avec une dizaine de domaines. ---------------------------------------------------------------------------------- 5) Spécification fonctionnelle du programme (sans code) ---------------------------------------------------------------------------------- Nom suggéré : dns_checker.py Entrées : - Fichier texte `domains.txt` (un domaine par ligne). Sorties attendues : - Résumé console : • Nombre de domaines traités • Combien valides / invalides • Combien ont un enregistrement MX • Top 3 TLD rencontrés (.com, .org, …) - Fichier CSV `dns_report.csv` avec colonnes : • domaine • IPv4 (A) • IPv6 (AAAA) • MX (oui/non + cible principale) • statut (valide / invalide) Fonctionnement attendu : 1) Lire les domaines depuis le fichier. 2) Pour chaque domaine, appeler l’API DNS-over-HTTPS : - Google : https://dns.google/resolve?name=example.com&type=A - Cloudflare : https://cloudflare-dns.com/dns-query?name=example.com&type=A (les deux renvoient JSON avec Answer / Status). 3) Extraire les réponses (A, AAAA, MX). 4) Déterminer si le domaine est valide (status = 0 → pas d’erreur DNS). 5) Déterminer si le domaine a un MX (utile pour messagerie). 6) Exporter un CSV ligne par domaine. 7) Afficher un résumé en console (statistiques globales). ---------------------------------------------------------------------------------- 6) Scénarios de test ---------------------------------------------------------------------------------- - Test 1 : Fichier de 5 domaines valides → tous renvoient des A/AAAA. - Test 2 : Ajouter un domaine inexistant (`site-inexistant.tld`) → vérifier la détection invalide. - Test 3 : Ajouter des domaines sans MX (ex. certains sites web) → bien différencier avec/sans MX. - Test 4 : Vérifier la cohérence du CSV (UTF-8, colonnes bien formées). - Test 5 (optionnel) : comparer résultats Google vs Cloudflare. ---------------------------------------------------------------------------------- 7) Livrables attendus ---------------------------------------------------------------------------------- 1) Script Python (`dns_checker.py`). 2) Rapport CSV (`dns_report.csv`). 3) Capture d’écran du résumé console. 4) README (≤ 1 page) : - Objectif du TP - Étapes pour créer l’environnement et installer les libs - Commande(s) pour lancer le script - Description du CSV exporté ---------------------------------------------------------------------------------- 8) Barème (20 points) ---------------------------------------------------------------------------------- - Lecture du fichier + appels API DNS ......................... 5 pts - Extraction des enregistrements A/AAAA/MX ................... 5 pts - Détection valide/invalide + MX oui/non ...................... 4 pts - Export CSV + résumé console ................................ 4 pts - README / qualité globale ................................... 2 pts ---------------------------------------------------------------------------------- 9) Bonus (facultatif) ---------------------------------------------------------------------------------- - Vérifier si les adresses IP A/AAAA sont publiques ou privées (détection NAT). - Ajouter une option CLI pour choisir le type d’enregistrement (TXT, NS…). - Produire un graphe simple (nb de domaines par TLD).