Python - Hacking (éthique) : librairie n-map

Python & Nmap 🕵️‍♀️ — découverte du scan réseau (éthique)

Dans ce mini-cours, on découvre comment utiliser la librairie python-nmap pour dialoguer avec l’outil Nmap en Python : scanner des ports, comprendre les résultats, automatiser des audits sur son propre réseau ou un réseau de test.
Public : ~15 → 18 ans (avec encadrement) Support de TP pour cours de cybersécurité / réseaux

Important : uniquement pour du hacking éthique.
On ne scanne jamais un réseau ou une machine sans autorisation explicite. Tout ce qui suit est à utiliser :
  • sur ta propre machine (localhost),
  • sur un petit réseau de labo / classe,
  • ou dans un environnement prévu pour l’entraînement.

Documentation officielle

Librairie Python : https://pypi.org/project/python-nmap/

1) Nmap & python-nmap : de quoi parle-t-on ?

Nmap (Network Mapper) est un outil très connu d’analyse de réseau :

  • il teste quels ports sont ouverts sur une machine ;
  • il peut deviner quels services tournent (web, ssh, etc.) ;
  • il aide les admins & pentesters à vérifier la sécurité.

python-nmap est une librairie Python qui permet :

  • de lancer Nmap depuis un script Python ;
  • de récupérer les résultats dans des variables Python ;
  • de construire des petits outils “maison” d’audit.
👉 Idée de projet : créer un script Python qui scanne ton réseau local de test et affiche les ports web ouverts (80 / 443) pour voir quelles machines hébergent un serveur HTTP.

2) Installation (en environnement de labo)

a) Installer Nmap

python-nmap ne remplace pas Nmap : il a besoin que l’outil nmap soit installé sur la machine.

# Exemple sous Linux (Debian / Ubuntu)
sudo apt update
sudo apt install nmap

# Exemple sous macOS (avec Homebrew)
brew install nmap

Sous Windows, on peut télécharger Nmap depuis le site officiel puis l’ajouter au PATH (voir documentation Nmap).

b) Installer la librairie Python

# Dans ton environnement Python
pip install python-nmap

Ensuite, dans ton code, tu pourras simplement faire : import nmap.

3) Premier scan : scanner sa propre machine (localhost)

Exemple de script qui scanne ta machine (127.0.0.1) sur quelques ports courants, uniquement pour découvrir :

import nmap

# Créer un objet "scanner"
scanner = nmap.PortScanner()

# Cible : ta propre machine (localhost)
target = "127.0.0.1"          # à garder ainsi pour les premiers tests
ports  = "20-1024"            # plage de ports à tester

print(f"Scan de {target} sur les ports {ports}...")

# Lancer le scan
scanner.scan(target, ports)

# Vérifier l'état de la machine (up / down)
state = scanner[target].state()
print("État de l'hôte :", state)

# Parcourir les ports détectés
for proto in scanner[target].all_protocols():
    print("\nProtocole :", proto)
    ports_list = scanner[target][proto].keys()
    for p in sorted(ports_list):
        info = scanner[target][proto][p]
        print(f"  Port {p} : {info['state']} (service : {info.get('name','inconnu')})")

Ce script n’attaque rien, il observe simplement quels ports répondent sur ta machine.

💡 Activité classe : demander aux élèves d’exécuter ce script sur un poste de labo, puis d’identifier les services les plus courants (ssh, http, etc.) dans les résultats.

4) Scanner un petit réseau de test

On peut aussi scanner une petite plage d’adresses dans un réseau de labo (par exemple un réseau de machines virtuelles).

Exemples de plages :

  • 192.168.0.10-20 : IP de 10 à 20
  • 192.168.1.0/30 : petites sous-réseaux (notation CIDR)
import nmap

scanner = nmap.PortScanner()

# Exemple : petite plage de test (à adapter à ton réseau de labo)
target_range = "192.168.0.10-12"   # uniquement si tu as le droit d'y accéder
ports       = "22,80,443"

print(f"Scan de {target_range} sur les ports {ports}...")

scanner.scan(hosts=target_range, arguments=f"-p {ports}")

for host in scanner.all_hosts():
    print("\nHôte :", host)
    print("  État :", scanner[host].state())
    for proto in scanner[host].all_protocols():
        print("  Protocole :", proto)
        ports_list = scanner[host][proto].keys()
        for p in sorted(ports_list):
            info = scanner[host][proto][p]
            print(f"    Port {p} : {info['state']} (service : {info.get('name','?')})")
⚠ Toujours avec autorisation : réseau de labo, machines de test, ou matériel personnel. Jamais sur des IP aléatoires sur Internet.

5) Exploiter les résultats dans des scripts Python

L’avantage de python-nmap : on peut utiliser les résultats pour construire des outils d’audit automatisés.

  • Crée un rapport texte des machines qui ont un port web ouvert.
  • Génère un fichier CSV avec “IP;port;service;état”.
  • Lance une alerte si un nouveau service apparaît sur le réseau.

Exemple minimal qui “filtre” les ports ouverts :

import nmap

scanner = nmap.PortScanner()
scanner.scan("127.0.0.1", "1-1024")

open_ports = []

for proto in scanner["127.0.0.1"].all_protocols():
    for p, info in scanner["127.0.0.1"][proto].items():
        if info["state"] == "open":
            open_ports.append((p, info.get("name", "?")))

print("Ports ouverts sur 127.0.0.1 :")
for port, name in open_ports:
    print(f"  {port} ({name})")

QCM Python-nmap & éthique

Coche une réponse par question, puis clique sur “Vérifier mes réponses”.

  1. 1. À quoi sert principalement Nmap ?


  2. 2. python-nmap est…


  3. 3. Scanner des IP au hasard sur Internet sans autorisation, c’est…


  4. 4. Pourquoi commence-t-on souvent par scanner 127.0.0.1 ?


  5. 5. Dans python-nmap, quand un port a l’état "open", cela signifie :


Commentaires

Posts les plus consultés de ce blog

Basthon.fr

mBot2 - programmation mBlock/python

Mario Kart 2D