Nmap expose les ports ouverts de votre réseau avant que les attaquants ne les trouvent
Nmap 7.99, masscan et RustScan couvrent trois philosophies de scan réseau distinctes. Un pentester n’en choisit pas un seul : il les combine pour cartographier sa surface d’attaque avant que quelqu’un d’autre ne le fasse à sa place.
Nmap, né en 1997 sous les doigts de Gordon « Fyodor » Lyon, reste en juillet 2026 le scanner de ports le plus déployé au monde avec sa version 7.99. masscan, créé en 2013 par Robert Graham, revendique 10 millions de paquets par seconde et un scan complet d’Internet en moins de 5 minutes. RustScan, lancé en 2019 par Brandon « bee » Skerritt, cumule 20 200 étoiles GitHub en promettant un scan de tous les ports TCP en 3 secondes. Trois outils, trois philosophies, une même leçon : votre réseau a des ports ouverts que vous ignorez, et un scanner vous les montrera avant qu’un attaquant ne les trouve.
Nmap — le couteau suisse du scan réseau
La force de Nmap n’est pas sa vitesse brute — un scan complet des 65 535 ports TCP peut prendre plusieurs heures — mais la profondeur d’analyse qu’il produit une fois qu’un port est identifié. Le workflow classique d’un pentester se déroule en trois phases.
D’abord, la découverte d’hôtes (-sn) identifie les machines vivantes sur un segment sans envoyer un seul paquet vers un port. Nmap combine des requêtes ICMP Echo, TCP SYN vers le port 443, TCP ACK vers le port 80 et des timestamps ICMP : aucun pare-feu ne bloque tout à la fois, et une combinaison qui échoue sur le premier test passe souvent sur le troisième.
Ensuite, le scan de ports. Le scan SYN (-sS) est le mode par défaut et le plus utilisé : il envoie un paquet SYN, lit le SYN-ACK ou le RST en retour, et n’établit jamais la connexion TCP complète — le noyau de la cible n’enregistre rien, ce qui le rend moins bruyant qu’un scan connect (-sT). Le scan UDP (-sU) est plus lent mais indispensable pour les services comme DNS (53), SNMP (161) ou NTP (123) qui n’écoutent jamais en TCP. Un scan complet -p- balaie les 65 535 ports TCP et les 1 000 ports UDP les plus courants, et seul un scan complet garantit de ne pas rater un service exotique planqué au-dessus du port 10 000.
Enfin, la détection de service et d’OS (-sV et -O) transforme chaque port ouvert en information exploitable : version exacte du serveur SSH, distribution Linux et noyau sous-jacent, nom NetBIOS de la machine Windows. Nmap maintient une base de signatures de plus de 2 200 protocoles et s’appuie sur plus de 3 000 empreintes OS pour identifier une cible avec une précision qui dépasse souvent 90 %.
# Scan SYN des 1000 ports les plus courants
nmap -sS 192.168.1.0/24
# Scan complet + détection de version + scripts par défaut
nmap -sS -sV -sC -p- 192.168.1.100
# Détection d’OS agressive
nmap -O --osscan-guess 192.168.1.100 Le Nmap Scripting Engine (NSE), activé avec -sC ou --script, fait la différence entre un scanner et une plateforme d’audit. Les scripts, écrits en Lua, sont regroupés en catégories : auth (contournement d’authentification), vuln (détection de CVE connues), brute (attaque par dictionnaire), discovery (énumération de partages SMB, bases SNMP), exploit (exploitation active), safe et default (non intrusifs). Avec plus de 600 scripts livrés en standard, Nmap remplace à lui seul une demi-douzaine d’outils spécialisés pour les protocoles courants.
# Scan de vulnérabilités connues sur un service HTTP
nmap --script vuln -p 443 example.com
# Énumération SMB complète
nmap --script smb-os-discovery,smb-enum-shares -p 445 10.0.0.0/24 masscan — scanner Internet en 5 minutes
masscan abandonne le noyau TCP/IP du système d’exploitation et implémente sa propre pile réseau en espace utilisateur. Cette architecture lui permet d’émettre des paquets SYN de manière asynchrone à une cadence de 10 millions de paquets par seconde sur une machine équipée d’une carte réseau 10 Gbps, en utilisant le driver PF_RING ZC pour contourner complètement le noyau Linux.
La contrepartie est sévère : masscan ne fait pas de détection de service, ne négocie pas de connexion TCP complète, et son usage avec l’IP locale du système peut provoquer des conflits avec la pile TCP native. Pour un scan fiable, il faut soit lui attribuer une IP source distincte (--source-ip), soit configurer iptables pour masquer le port source utilisé.
# Scan des ports 22, 80 et 443 sur tout le sous-réseau
masscan -p22,80,443 10.0.0.0/8 --rate 10000
# Scan avec capture de bannières (nécessite une IP dédiée)
masscan -p80,443 10.0.0.0/8 --banners --source-ip 192.168.1.200
# Lecture d’une configuration depuis un fichier
masscan -c scan.conf --rate 1000000 masscan prend tout son sens pour le reconnaissance à large échelle : cartographier l’ensemble des ports 22, 80, 443 et 3389 sur un /16 en quelques secondes, identifier les hôtes qui exposent un service inattendu sur un /8 avant d’affiner avec Nmap. La capture de bannières (--banners) fonctionne pour HTTP, SSH, FTP, SMTP, POP3, IMAP, Telnet, RDP, VNC, SMBv1/v2, SSL et memcached — assez pour un premier tri avant de basculer sur Nmap pour l’analyse fine.
Projet open source sous licence AGPL v3, masscan est maintenu par Robert Graham (alias @ErrataRob) et totalise 25 900 étoiles GitHub. Sa dernière activité de développement remonte à plusieurs années, mais le code reste parfaitement fonctionnel sur Linux moderne et se compile en une poignée de secondes avec make -j.
Techniques furtives et timing
Un scan réseau n’est pas un acte neutre : un IDS comme Snort ou Suricata détecte un balayage SYN en quelques secondes, et une politique de fail2ban bloque l’IP source après une poignée de tentatives. Les trois scanners proposent des parades.
Les templates de timing de Nmap (-T0 à -T5) contrôlent la vitesse d’émission. -T2 (poli) insère 0,4 seconde entre chaque sonde et contourne la plupart des seuils IDS par défaut sur un scan de moins de 100 ports. -T4 (agressif) est le bon compromis pour un scan interne où la latence est faible et la détection n’est pas un risque. -T5 (insane) envoie les paquets aussi vite que le réseau les accepte et déclenchera une alerte dans la seconde.
# Scan furtif avec fragmentation IP et leurres
nmap -sS -T2 -f -D RND:10 192.168.1.100
# Scan idle (nécessite une machine zombie)
nmap -sI zombie_host:80 192.168.1.100 La fragmentation IP (-f) découpe les paquets en fragments de 8 octets, ce qui oblige un pare-feu à réassembler avant d’inspecter — certains filtres anciens abandonnent simplement. Les leurres (-D) mélangent le trafic de Nmap avec des paquets provenant d’adresses factices, noyant l’IP réelle dans un bruit de fond. Le scan idle (-sI) utilise une machine zombie dont l’IP-ID est prévisible pour scanner sans jamais révéler l’adresse source réelle : la cible ne voit que le zombie.
masscan, de son côté, n’a pas de leurres ni de fragmentation, mais le paramètre --rate permet de diluer le scan sur plusieurs heures à 10 paquets par seconde — assez lent pour passer sous le radar d’un IDS configuré par défaut.
RustScan — la vitesse moderne
RustScan ne cherche pas à remplacer Nmap : il le complète en amont. Là où Nmap met plusieurs minutes à balayer 65 535 ports, RustScan le fait en 3 secondes grâce à un moteur asynchrone écrit en Rust qui ouvre des milliers de sockets en parallèle. Une fois les ports ouverts identifiés, RustScan les transmet automatiquement à Nmap pour la détection de service et les scripts NSE.
# Scan complet de tous les ports, puis Nmap sur les ports ouverts
rustscan -a 192.168.1.100 -- -sV -sC
# Scan par lot de 4000 sockets simultanées
rustscan -a 192.168.1.0/24 --batch-size 4000 Le projet embarque un moteur de scripting qui accepte du Python, du Lua et du Shell, déclenché automatiquement sur les ports ouverts découverts. Un utilisateur peut écrire un script qui tente une connexion SSH par clé par défaut sur chaque port 22 découvert, ou qui capture le titre HTTP sur chaque port 80, sans avoir à chaîner manuellement les outils.
RustScan est distribué en binaire statique sur GitHub Releases, dans les dépôts Arch Linux (pacman -S rustscan) et via Cargo (cargo install rustscan). Le projet, sous licence GPL v3, reste activement maintenu avec 20 200 étoiles et une communauté qui alimente les scripts partagés.
Auditer son réseau comme un pentester
Un audit efficace suit une progression méthodique, pas une liste de commandes copiées-collées.
Étape 1 — Découverte. Identifiez toutes les machines vivantes sur le segment. Un simple nmap -sn 192.168.1.0/24 suffit pour un réseau domestique. Sur un /16 d’entreprise, enchaînez avec masscan pour ne pas attendre une heure.
Étape 2 — Scan rapide des ports courants. Lancez masscan sur les 100 à 1 000 ports les plus utilisés (--top-ports 1000) pour obtenir une première carte en quelques secondes, puis RustScan en mode full-port sur les hôtes qui vous intéressent.
Étape 3 — Analyse approfondie. Sur chaque port ouvert, déclenchez Nmap avec -sV -sC pour identifier le service, sa version et les vulnérabilités connues via les scripts NSE. Un --script vuln sur les services web et SMB révèle souvent une faille exploitable en moins de 30 secondes.
Étape 4 — Documenter. Exportez chaque résultat en XML (-oX) pour le réimporter dans un outil de gestion de vulnérabilités, ou en format greppable (-oG) pour un traitement rapide en ligne de commande.
# Audit complet en trois commandes
masscan -p1-65535 10.0.0.0/24 --rate 5000 -oG masscan.gnmap
rustscan -a 10.0.0.0/24 -- -sV -oX nmap_full.xml
nmap -sV --script vuln -p $(grep open masscan.gnmap | cut -d'/' -f1 | paste -sd,) 10.0.0.0/24 Une précision importante : scanner un réseau qui ne vous appartient pas est illégal dans la plupart des juridictions. Aux États-Unis, le Computer Fraud and Abuse Act (CFAA) criminalise l’accès non autorisé ; en France, l’article 323-1 du Code pénal punit de deux ans d’emprisonnement et 60 000 € d’amende l’accès frauduleux à un système de traitement automatisé de données. Ces outils s’utilisent exclusivement sur vos propres infrastructures ou sur des cibles pour lesquelles vous avez reçu une autorisation écrite.
Quel scanner pour quel usage
Nmap reste l’outil de référence pour tout audit approfondi. masscan est imbattable pour cartographier un parc entier ou un /8 en moins d’une minute. RustScan brille en première ligne quand on veut identifier tous les ports ouverts en trois secondes avant de passer la main à Nmap.
Si vous gérez un parc de moins de 50 machines, Nmap seul suffit. Si vous devez auditer un /16 ou un /8, commencez par masscan pour le tri, puis Nmap pour la profondeur. Si vous automatisez des pipelines CI/CD de sécurité, RustScan + Nmap est le duo le plus rapide à intégrer.
Dans tous les cas, lancez le scan avant que quelqu’un d’autre ne le fasse.