21 août 20222 min de lecture
Cheat sheet — Nmap (scans, options & scripts NSE)
Scanner et cartographier un réseau avec Nmap : types de scans (TCP, SYN furtif, UDP), options essentielles (-sV, -O, -A, -p, scripts), et les bases de l'écriture de scripts NSE en Lua.
intro#nmap#reseau#pentest#reconnaissance#cheatsheet#nse
Mis à jour le 21 sept. 2026
Nmap est un scanner de ports open source : il détecte les hôtes d’un réseau, les ports ouverts, les services et leurs versions, et l’OS.
Types de scans
- TCP connect (
-sT) — handshake complet en 3 temps. Port fermé → RST ; port ouvert → SYN/ACK puis ACK de Nmap. - SYN furtif (
-sS) — n’achève pas le handshake : après le SYN/ACK, Nmap envoie un RST. Rapide (milliers de ports/s), plus discret. - UDP (
-sU) — sans connexion : pas de réponse =open|filtered; un ICMP « port unreachable » = fermé. Lent et peu fiable par nature.
Options essentielles
nmap 192.168.1.10 # ports ouverts, MAC, état
nmap 192.168.1.0/24 # tout un réseau (CIDR)
nmap -O 192.168.1.10 # détection d'OS
nmap -sV 192.168.1.10 # versions des services (→ recherche de CVE)
nmap -p 80 192.168.1.10 # un port précis
nmap -A 192.168.1.10 # agressif : -sV + -O + scripts + traceroute
nmap --spoofmac=XX:... 10.0.0.1 # usurper l'adresse MAC
nmap -oA resultat 192.168.1.10 # export (xml/grep/txt)
Scripts intégrés
nmap --script default 192.168.1.10 # (= -sC) infos machine/OS/users
nmap -v --script vuln 192.168.1.10 # recherche de vulnérabilités connues
Écrire un script NSE (Lua)
Structure minimale : métadonnées, règle d’exécution (portrule/hostrule),
fonction action.
description = [[ Se connecte à un serveur HTTP et affiche sa bannière. ]]
author = "..."
license = "Same as Nmap"
categories = {"discovery", "safe"}
local nmap = require "nmap"
local shortport = require "shortport"
portrule = shortport.port_or_service(80, "http")
action = function(host, port)
local socket = nmap.new_socket()
socket:connect(host.ip, port.number)
socket:send("HEAD / HTTP/1.1\r\nHost: " .. host.ip .. "\r\n\r\n")
local status, result = socket:receive_lines(1)
socket:close()
return result or "Pas de réponse"
end
Catégories utiles : safe, discovery, auth, vuln, intrusive,
default (celles lancées par -sC).
Placer le script dans /usr/share/nmap/scripts/ puis :
nmap --script mon_script.nse -p 80 --script-trace <ip>
Débogage : nmap.debug(1, "message"). Toujours gérer les erreurs de socket et
valider les réponses réseau avant de les utiliser.