Skip to main content

Nmap 7.991 : guide académique de la découverte réseau au NSE

··2672 words·13 mins
Network Security Nmap Network Analysis Port Scanning NSE Enumeration Detection Engineering
Rai2en
Author
Rai2en
Securing infrastructure, validating attack paths, and documenting the evidence.
Table of Contents
Tools & Techniques - This article is part of a series.
Part : This Article

Objectif et version de référence
#

Nmap ne se limite pas à demander « quels ports sont ouverts ? ». Il construit une observation depuis un point du réseau : quels hôtes répondent, comment leurs ports réagissent, quels protocoles semblent présents, quels services parlent réellement, quelles signatures de pile réseau sont visibles et quels contrôles filtrent les sondes.

Ce guide suit Nmap 7.991, publié le 6 août 2026 dans le changelog officiel. La référence Nmap reste la source normative pour chaque option. Les exemples doivent être exécutés uniquement sur des systèmes que vous administrez, un lab ou un périmètre explicitement autorisé.

Pipeline d’une analyse complète
#

flowchart LR A[Cibles] --> B[Résolution DNS] B --> C[Découverte d'hôtes] C --> D[Scan de ports] D --> E[Détection de services] E --> F[Détection OS] F --> G[NSE] G --> H[Sorties et comparaison]

Chaque étape est optionnelle. Comprendre ce pipeline évite d’utiliser -A partout sans savoir quelles sondes sont réellement envoyées.

Les commandes quotidiennes à retenir
#

# Découverte d'hôtes sur un réseau local
sudo nmap -sn -PR 192.168.56.0/24

# Scan TCP initial des 1 000 ports les plus fréquents
sudo nmap -sS -Pn -n --reason 192.168.56.10

# Tous les ports TCP avec une sortie réutilisable
sudo nmap -sS -Pn -n -p- --min-rate 1000 -oA scans/full-tcp 192.168.56.10

# Services et scripts par défaut sur les ports trouvés
sudo nmap -sV -sC -Pn -n -p 22,80,443 -oA scans/services 192.168.56.10

# UDP ciblé
sudo nmap -sU -Pn -n --top-ports 50 --version-intensity 2 192.168.56.10

Ces commandes sont des profils, pas des recettes universelles. Le débit, les ports et les scripts doivent être adaptés au réseau et à l’autorisation.

1. Lire correctement les états de ports
#

Un état Nmap décrit ce que le scanner observe depuis sa position, pas une propriété absolue du service.

ÉtatInterprétation
openUne application accepte une connexion TCP ou des datagrammes UDP
closedL’hôte répond, mais aucun service n’écoute sur ce port
filteredUn filtre empêche Nmap de conclure
unfilteredLe port répond à la sonde, mais le scan ne distingue pas ouvert et fermé
`openfiltered`
`closedfiltered`

L’option --reason affiche le paquet ou l’événement ayant conduit à la décision : syn-ack, reset, no-response, admin-prohibited, etc.

sudo nmap -sS --reason -p 22,80,443 192.168.56.10

2. Spécifier les cibles sans erreur
#

SyntaxeExemple
Hôte192.168.56.10
CIDR192.168.56.0/24
Plage192.168.56.10-40
Plusieurs cibles192.168.56.10 192.168.56.20
Fichier-iL targets.txt
Exclusion--exclude 192.168.56.1
Fichier d’exclusion--excludefile exclusions.txt
Cibles aléatoires-iR 10
IPv6-6 2001:db8::10

Avant un scan important, validez le périmètre sans envoyer de sonde aux hôtes :

nmap -sL -n -iL targets.txt

-sL effectue une liste. Sans -n, des requêtes DNS peuvent néanmoins être produites.

3. Découverte d’hôtes
#

Comportement par défaut
#

Sur un réseau Ethernet local, Nmap privilégié utilise généralement ARP pour IPv4 ou Neighbor Discovery pour IPv6. Cette méthode est plus fiable que l’ICMP pour savoir si un voisin local est présent.

Hors réseau local, la découverte IPv4 privilégiée par défaut combine :

  • ICMP Echo Request ;
  • TCP SYN vers 443 ;
  • TCP ACK vers 80 ;
  • ICMP Timestamp Request.

L’ancien article inversait les ports SYN et ACK. La combinaison correcte est documentée dans la section Host Discovery.

Options principales
#

OptionFonction
-snDécouverte uniquement, sans scan de ports
-PnConsidère tous les hôtes comme actifs
-PRDécouverte ARP sur le réseau local
-PEICMP Echo Request
-PPICMP Timestamp Request
-PMICMP Address Mask Request
-PS80,443TCP SYN ping sur les ports indiqués
-PA80,443TCP ACK ping
-PU53,161UDP ping
-PY80SCTP INIT ping
-PO1,2,4IP Protocol ping
--disable-arp-pingDésactive la découverte ARP implicite

-Pn ne rend pas le scan plus furtif. Il supprime la découverte préalable et force Nmap à analyser chaque adresse, ce qui peut augmenter fortement le trafic.

4. Résolution DNS
#

OptionEffet
-nAucune résolution inverse
-RRésolution inverse de toutes les cibles
--system-dnsUtilise le résolveur système
--dns-servers <liste>Utilise des serveurs DNS précis

Pour un CTF ou une mesure de performance reproductible, -n évite qu’une panne DNS ralentisse le scan. Pour un inventaire d’entreprise, les noms inverses peuvent au contraire fournir un contexte utile.

5. Sélectionner les ports
#

nmap -p 22,80,443 TARGET
nmap -p 1-1024 TARGET
nmap -p- TARGET
nmap -p T:22,80,U:53,161 -sS -sU TARGET
nmap --top-ports 100 TARGET
nmap --port-ratio 0.01 TARGET

Points peu connus :

  • le scan par défaut couvre les 1 000 ports TCP les plus fréquents du fichier nmap-services, pas les ports 1 à 1 000 ;
  • -F réduit cette sélection aux 100 ports les plus fréquents ;
  • -p- signifie 1 à 65 535 ; pour inclure explicitement le port 0, utiliser -p0-65535 ;
  • -r impose un ordre séquentiel au lieu de l’ordre pseudo-aléatoire habituel.

6. Choisir la technique de scan
#

Scans courants
#

OptionPrincipeUsage réaliste
-sSSYN sans finaliser la connexionTCP rapide avec privilèges
-sTAppel système connect()Sans privilèges, proxy TCP, IPv6 selon plateforme
-sUSondes UDP et analyse ICMPDNS, SNMP, NTP, VPN et services UDP
-sAACKCartographie de filtrage, pas détection d’ouverture
-sWFenêtre TCP sur réponses RSTCas particuliers de piles TCP
-sNAucun flag TCPTest historique hors Windows
-sFFlag FINMême famille que NULL/Xmas
-sXFIN, PSH et URGMême famille que NULL/FIN

Scans spécialisés
#

OptionDescriptionLimites modernes
-sMFIN/ACK, comportement historique BSDSouvent peu discriminant aujourd’hui
-sI ZOMBIEIdle scan via l’IP ID d’un tiersNécessite un zombie prévisible et une autorisation claire
-sOProtocoles IP, pas ports TCP/UDPRecherche ICMP, GRE, ESP, etc.
-sYSCTP INITRéseaux SCTP
-sZSCTP COOKIE-ECHONe distingue pas toujours ouvert et filtré
-b FTP_RELAYFTP bounce historiqueRarement supporté
--scanflagsFlags TCP personnalisésInterprétation manuelle nécessaire

La documentation officielle des techniques insiste sur le choix de l’outil adapté. Les scans FIN, NULL et Xmas ne sont pas des méthodes magiques de contournement : les piles Windows répondent différemment et les contrôles modernes détectent facilement ces motifs.

SYN scan sur le fil
#

sequenceDiagram participant N as Nmap participant T as Cible TCP N->>T: SYN alt Port ouvert T-->>N: SYN ACK N->>T: RST else Port fermé T-->>N: RST else Filtré T--xN: Absence ou ICMP interdit end

7. UDP sans attendre des heures
#

Un port UDP ouvert ne répond souvent pas à une sonde vide. L’absence de réponse devient open|filtered. La détection de version peut envoyer une sonde protocolaire et transformer ce résultat en open.

Approche progressive :

# Étape 1 : ports UDP fréquents, intensité faible
sudo nmap -sU -Pn -n --top-ports 50 \
  --version-intensity 2 --max-retries 2 TARGET

# Étape 2 : validation ciblée
sudo nmap -sU -sV -Pn -n -p 53,67,68,69,123,137,161,500,4500 TARGET

N’augmentez pas aveuglément --min-rate sur un réseau fragile. Les réponses ICMP peuvent être limitées, ce qui crée des faux open|filtered.

8. Détection de services et de versions
#

-sV consulte nmap-service-probes, envoie des sondes applicatives et compare les réponses à des expressions de signature.

sudo nmap -sV -p 22,80,443 TARGET
sudo nmap -sV --version-light TARGET
sudo nmap -sV --version-all TARGET
sudo nmap -sV --version-intensity 4 TARGET
OptionEffet
--version-intensity 0-9Nombre de sondes essayées
--version-lightAlias pratique pour l’intensité 2
--version-allToutes les sondes, intensité 9
--version-traceDétail des échanges de détection
--allportsInclut les ports normalement exclus de -sV

Une bannière est une donnée déclarative. Elle peut être modifiée ou masquée. Confirmez un produit par plusieurs indices : protocole, réponses, certificats, en-têtes et comportement.

9. Détection d’OS et distance réseau
#

sudo nmap -O --osscan-limit --reason TARGET
sudo nmap -O --osscan-guess TARGET
sudo nmap --traceroute TARGET

La détection d’OS est plus fiable lorsqu’au moins un port TCP ouvert et un port fermé sont disponibles. --osscan-limit évite de dépenser du temps sur les hôtes qui ne remplissent pas ces conditions. --osscan-guess affiche des correspondances moins certaines : ce n’est pas une preuve.

-A active simultanément la détection d’OS, de versions, les scripts par défaut et traceroute. Il ne signifie pas « tous les ports » et peut être beaucoup plus intrusif qu’un scan initial.

10. Nmap Scripting Engine
#

NSE exécute des scripts Lua après ou pendant certaines phases. La documentation actuelle référence des centaines de scripts dans le portail NSEDoc.

Catégories officielles
#

auth, broadcast, brute, default, discovery, dos, exploit, external, fuzzer, info, intrusive, malware, safe, version et vuln.

Certaines catégories peuvent modifier une cible, tester des mots de passe ou provoquer un déni de service. Le nom vuln ne signifie pas automatiquement « lecture seule ».

Sélection et expressions
#

# Scripts par défaut
nmap -sC -sV -p 80,443 TARGET

# Scripts HTTP sûrs, hors scripts intrusifs
nmap --script 'http-* and safe and not intrusive' -p 80,443 TARGET

# Aide avant exécution
nmap --script-help http-title
nmap --script-help 'vuln and not intrusive'

Arguments et diagnostic
#

nmap --script http-enum \
  --script-args http-enum.basepath=/app/ \
  -p 80 TARGET

nmap --script http-title --script-trace -p 80 TARGET
nmap --script-updatedb

Utilisez --script-args-file pour éviter d’exposer des paramètres sensibles dans l’historique du shell. Ne placez jamais de secrets dans les sorties destinées au dépôt Git.

11. Timing et performance
#

Modèles -T0 à -T5
#

ModèleNomInterprétation pratique
-T0ParanoidExtrêmement lent, une sonde à la fois
-T1SneakyTrès lent
-T2PoliteRéduit l’utilisation de bande passante
-T3NormalValeur par défaut
-T4AggressiveRéseau fiable et rapide
-T5InsaneRisque élevé de pertes et faux négatifs

La vitesse vient d’abord de la réduction du périmètre : moins d’hôtes, moins de ports, pas de DNS inutile et détection de version séparée.

Réglages fins
#

OptionRôle
--min-rate, --max-rateCadre le débit global de paquets
--max-retriesLimite les retransmissions
--host-timeoutAbandonne un hôte après un délai
--scan-delayDélai minimal entre sondes
--max-scan-delayLimite l’adaptation du délai
--min-hostgroup, --max-hostgroupTaille des groupes d’hôtes
--min-parallelism, --max-parallelismParallélisme des sondes
--initial-rtt-timeoutEstimation RTT initiale
--min-rtt-timeout, --max-rtt-timeoutBornes RTT adaptatives
--defeat-rst-ratelimitIgnore certains ports fermés limités par RST
--defeat-icmp-ratelimitAccélère certains scans UDP au prix de précision

--min-rate impose un plancher. Si le réseau ne suit pas, Nmap peut sacrifier la précision ou accumuler des paquets. Commencez avec une valeur mesurée sur le lab.

12. Sorties professionnelles et reproductibles
#

mkdir -p scans
sudo nmap -sS -sV -Pn -n -p- \
  --reason --stats-every 15s \
  -oA scans/target-20260827 TARGET
OptionFormat
-oN fichierSortie normale
-oX fichierXML structuré
-oG fichierGrepable historique
-oS fichierScript kiddie, décoratif
-oA baseNormal, XML et grepable
--append-outputAjoute au lieu d’écraser
--resume fichier.nmapReprend certains scans interrompus
--stylesheetFeuille XSL pour XML
--webxmlRéférence XSL hébergée par Nmap
--no-stylesheetRetire la déclaration XSL

Pour l’automatisation, parsez le XML. La sortie normale est destinée à l’humain et peut varier. ndiff compare deux XML :

ndiff baseline.xml current.xml

Conservez avec le résultat : version de Nmap, date, source du scan, commande, périmètre et éventuelles pertes réseau.

13. Verbosité, débogage et interaction pendant le scan
#

OptionEffet
-v, -vvPlus de résultats pendant le scan
-d, -ddDébogage interne
--packet-tracePaquets envoyés et reçus
--version-traceDétection de version
--script-traceCommunications NSE
--stats-every 10sStatistiques périodiques
--reasonMotif de chaque état

Pendant un scan interactif, Nmap accepte notamment v/V pour la verbosité, d/D pour le débogage et p/P pour activer ou désactiver le packet trace. Appuyer sur une autre touche affiche une ligne de statut.

14. IPv6, interfaces et routes
#

nmap -6 -sT -p 22,80,443 2001:db8::10
nmap --iflist
sudo nmap -e eth1 -S 192.0.2.10 TARGET
  • -6 active IPv6 ;
  • --iflist affiche interfaces et routes vues par Nmap ;
  • -e impose une interface ;
  • -S impose une adresse source, mais les réponses doivent pouvoir revenir ;
  • --send-eth et --send-ip contrôlent le niveau d’émission sur certaines plateformes.

Un mauvais choix de route ou d’adresse source produit souvent des résultats filtered trompeurs.

15. Proxys et pivots
#

Le scan via proxy est limité par la technique de connexion.

proxychains4 nmap -sT -Pn -n -p 22,80,443 172.16.20.15

-sS, UDP, détection d’OS et sondes ICMP utilisent des paquets bruts et ne traversent pas un simple SOCKS via ProxyChains. Nmap possède aussi --proxies, mais son support ne couvre pas toutes les phases. Testez la résolution DNS et vérifiez qu’aucune connexion directe ne quitte l’interface.

16. Options avancées de paquets et filtrage
#

Ces options servent à comprendre un chemin réseau ou à tester des contrôles dans un environnement autorisé. Elles ne garantissent pas un contournement.

OptionFonction
-fFragmente les paquets IP en petits fragments
--mtu NTaille de fragment multiple de 8
-D RND:5,MEAjoute des leurres à certaines sondes
-S IPUsurpe l’adresse source
-e IFACEForce l’interface
-g PORT, --source-portPort source choisi
--spoof-macAdresse MAC imposée sur le LAN
--data-length NAjoute des octets aléatoires
--data HEXAjoute une charge hexadécimale
--data-string TEXTEAjoute une chaîne
--ttl NTTL IPv4
--ip-optionsOptions d’en-tête IPv4
--badsumChecksums invalides
--scanflagsFlags TCP personnalisés

Limites importantes :

  • la fragmentation peut être réassemblée par un pare-feu ou ignorée par le chemin ;
  • les leurres ne masquent pas tous les autres échanges comme DNS, version detection ou NSE ;
  • l’usurpation d’IP empêche généralement de recevoir les réponses ;
  • --badsum sert surtout à distinguer une réponse générée par un intermédiaire d’une pile hôte conforme ;
  • les réseaux cloud et virtualisés peuvent filtrer ces paquets avant la cible.

17. Fichiers de données qui expliquent les résultats
#

FichierContenu
nmap-servicesFréquence et noms de ports
nmap-service-probesSondes et signatures de versions
nmap-os-dbEmpreintes de systèmes d’exploitation
nmap-mac-prefixesConstructeurs par préfixe MAC
nmap-protocolsNuméros de protocoles IP
scripts/Scripts NSE
nselib/Bibliothèques Lua NSE
scripts/script.dbIndex des scripts et catégories

--datadir permet d’utiliser un répertoire de données personnalisé. Nmap recherche aussi certains fichiers dans le répertoire utilisateur et le répertoire système. Une base obsolète explique parfois une détection moins précise que sur une autre machine.

nmap --version
nmap --datadir ./nmap-data -sV TARGET

18. Workflow CTF progressif
#

Étape A : surface TCP rapide
#

sudo nmap -sS -Pn -n -p- --min-rate 1500 \
  --max-retries 2 -oA scans/full TARGET

Étape B : analyse des ports confirmés
#

sudo nmap -sV -sC -Pn -n --reason \
  -p 22,80,443 -oA scans/detail TARGET

Étape C : scripts ciblés après lecture de l’aide
#

nmap --script-help 'http-* and safe'
sudo nmap --script 'http-title,http-headers,http-methods' \
  -Pn -n -p 80,443 TARGET

Étape D : UDP priorisé
#

sudo nmap -sU -sV -Pn -n --top-ports 30 \
  --version-intensity 2 -oA scans/udp TARGET

Étape E : lecture croisée
#

Comparer Nmap avec une connexion manuelle, un navigateur, curl, openssl s_client, dig ou le client natif du protocole. Nmap oriente l’énumération ; il ne remplace pas la validation.

19. Cas d’usage défensif : inventaire différentiel
#

Créer une référence puis la comparer périodiquement :

nmap -sT -sV -Pn -n -iL assets.txt -oX baseline.xml
nmap -sT -sV -Pn -n -iL assets.txt -oX current.xml
ndiff baseline.xml current.xml

À surveiller : nouveau port, service disparu, changement de certificat, version différente, filtrage modifié ou nouvel hôte. Un changement n’est pas automatiquement un incident, mais il doit être attribuable à une modification connue.

20. Erreurs fréquentes à éviter
#

  • lancer -A -p- --script vuln sans phase de cadrage ;
  • interpréter filtered comme « aucun service » ;
  • oublier UDP ;
  • croire qu’un SYN scan est invisible ;
  • augmenter --min-rate jusqu’à perdre les réponses ;
  • utiliser -Pn sur un très grand CIDR sans nécessité ;
  • confondre bannière et preuve de version ;
  • exécuter des catégories NSE intrusives sans lire leur documentation ;
  • scanner via SOCKS avec -sS ou -sU ;
  • ne sauvegarder que la sortie du terminal ;
  • comparer des scans réalisés depuis des points réseau différents comme s’ils étaient équivalents.

Mémo final
#

ObjectifCommande de départ
Hôtes locauxsudo nmap -sn -PR CIDR
TCP initialsudo nmap -sS -Pn -n TARGET
Tous ports TCPsudo nmap -sS -Pn -n -p- TARGET
Servicessudo nmap -sV -sC -p PORTS TARGET
UDP courantsudo nmap -sU --top-ports 50 TARGET
OSsudo nmap -O --osscan-limit TARGET
Raisons--reason
Sorties-oA scans/name
Proxy SOCKSproxychains4 nmap -sT -Pn -n -p PORTS TARGET
Comparaisonndiff old.xml new.xml

Références
#

Tools & Techniques - This article is part of a series.
Part : This Article