Scanner des ports avec Masscan

NmapBeginner
Pratiquer maintenant

Introduction

Dans cet atelier, vous allez apprendre à utiliser Masscan, un scanner de ports TCP ultra-performant, pour mener une reconnaissance réseau efficace. Vous acquerrez une expérience concrète en installant Masscan à partir de son code source, en configurant les paramètres de balayage, en exécutant des scans sur des plages d'adresses privées et en analysant les résultats obtenus.

À l'issue de cette session, vous serez capable de définir des cibles, de lancer des scans à haute vitesse, d'interpréter les sorties pour identifier les ports ouverts et d'exporter vos conclusions dans des formats standards pour le reporting ou des analyses approfondies.

Installer Masscan depuis les sources

Dans cette première étape, vous allez compiler et installer Masscan. Masscan est un scanner de ports incroyablement rapide, capable de parcourir l'intégralité d'Internet en quelques minutes. Nous l'installerons à partir de son code source pour garantir l'utilisation de la version la plus récente. Les outils de compilation et les bibliothèques nécessaires ont été pré-installés dans votre environnement.

Tout d'abord, assurez-vous d'être dans le répertoire ~/project, qui est l'espace de travail désigné pour ce lab.

cd ~/project

Ensuite, téléchargez le code source de Masscan depuis son dépôt GitHub officiel à l'aide de git.

git clone https://github.com/robertdavidgraham/masscan --depth 1

Cette commande crée un nouveau répertoire nommé masscan contenant le code source. Naviguez dans ce répertoire.

cd masscan

Maintenant, compilez le code source à l'aide de la commande make. Cette commande lit le fichier Makefile présent dans le répertoire et génère le binaire exécutable.

make

Une fois la compilation terminée, vous trouverez l'exécutable masscan à l'intérieur du répertoire bin. Vous pouvez vérifier la réussite de l'opération en consultant sa version.

./bin/masscan --version

Vous devriez voir une sortie similaire à celle-ci :

Masscan version 1.3.9-integration ( https://github.com/robertdavidgraham/masscan )
Compiled on: Aug 29 2025 11:15:09
Compiler: gcc 11.4.0
OS: Linux
CPU: x86 (64 bits)
GIT version: unknown

Enfin, pour rendre la commande masscan disponible dans tout le système, installez-la dans un emplacement standard tel que /usr/local/bin. Le Makefile fourni inclut une cible install qui s'en charge pour vous.

sudo make install

Cette commande copie le binaire masscan vers /usr/local/bin/, qui se trouve dans le PATH de votre système. Vous pouvez désormais exécuter Masscan depuis n'importe quel répertoire.

Vérifiez l'installation :

masscan --version

Si le numéro de version s'affiche, Masscan est correctement installé.

Définir une plage cible

Avant de lancer un scan, vous devez définir les adresses IP que vous souhaitez cibler. Pour cette démonstration, nous nous concentrerons sur un petit sous-ensemble de plages d'adresses IP privées afin de garantir une exécution rapide. Le balayage de ces plages internes limitées est une pratique sûre et efficace pour l'apprentissage.

Nous allons créer un fichier pour lister nos plages cibles. Tout d'abord, assurez-vous d'être dans le répertoire principal du projet.

cd ~/project

Utilisez maintenant l'éditeur de texte nano pour créer un fichier nommé targets.txt.

nano targets.txt

Dans l'éditeur nano, ajoutez les petites plages IP suivantes pour la démonstration, chacune sur une nouvelle ligne. Ces plages sont écrites en notation CIDR (Classless Inter-Domain Routing), une méthode compacte pour représenter un bloc d'adresses IP.

192.168.1.0/24
172.17.0.0/24
10.0.0.0/24

Pour enregistrer le fichier dans nano, appuyez sur Ctrl+O, puis sur Entrée pour confirmer le nom du fichier. Pour quitter nano, appuyez sur Ctrl+X.

Après avoir enregistré le fichier, vous pouvez vérifier son contenu avec la commande cat.

cat targets.txt

La sortie devrait afficher les trois petites plages CIDR que vous venez de saisir.

192.168.1.0/24
172.17.0.0/24
10.0.0.0/24

Ce fichier servira d'entrée pour Masscan, lui indiquant quels réseaux scanner lors de l'étape suivante. Ces plages réduites (contenant chacune seulement 256 adresses IP) permettront au scan de se terminer beaucoup plus rapidement, généralement en moins d'une minute.

Exécuter un scan de ports à haute vitesse

Maintenant que Masscan est installé et que vos cibles sont définies, vous êtes prêt à effectuer un balayage de ports. Dans cette étape, vous allez lancer un scan de démonstration sur des ports courants en utilisant les plages IP définies précédemment.

Assurez-vous d'être dans le répertoire ~/project où se trouve votre fichier targets.txt.

cd ~/project

Exécutez la commande masscan suivante. Cette commande nécessite sudo car Masscan utilise des "raw sockets" pour envoyer des paquets, ce qui requiert des privilèges élevés.

sudo masscan -p22,80,443,8080 -iL targets.txt --rate 1000 -oG scan_results.gnmap

Analysons les options de cette commande :

  • -p22,80,443,8080 : Spécifie les ports courants à scanner (SSH, HTTP, HTTPS et un port HTTP alternatif). Cette approche ciblée assure une fin de scan plus rapide.
  • -iL targets.txt : Indique à Masscan de lire les plages IP cibles depuis le fichier targets.txt.
  • --rate 1000 : Définit le taux de transmission à 1000 paquets par seconde. C'est un débit sûr pour un environnement de laboratoire.
  • -oG scan_results.gnmap : Enregistre la sortie au format "grepable" dans un fichier nommé scan_results.gnmap. Ce format est facile à analyser avec des outils en ligne de commande.

Pendant l'exécution, Masscan affichera sa progression. Avec nos petites plages cibles, le scan devrait durer moins d'une minute.

Starting masscan 1.3.9-integration (http://bit.ly/14GZzcT) at 2025-08-29 03:20:16 GMT
Initiating SYN Stealth Scan
Scanning 768 hosts [4 ports/host]

Une fois le scan terminé, un nouveau fichier nommé scan_results.gnmap apparaîtra dans votre répertoire. Vous pouvez consulter son contenu avec la commande cat.

cat scan_results.gnmap

La sortie listera tous les hôtes trouvés avec des ports ouverts. Comme nous scannons des plages privées restreintes dans un environnement de conteneurs, vous pourriez trouver des ports ouverts sur le réseau bridge de Docker. Les ports découverts apparaîtront sous un format similaire à celui-ci :

## Masscan 1.3.9-integration scan initiated Fri Aug 29 03:20:16 2025
## Ports scanned: TCP(4;22-22,80-80,443-443,8080-8080) UDP(0;) SCTP(0;) PROTOCOLS(0;)
Timestamp: 1756437619   Host: 172.17.0.1 ()     Ports: 22/open/tcp//ssh//
## Masscan done at Fri Aug 29 03:20:31 2025

Les résultats montrent que nous avons scanné 768 hôtes sur 4 ports spécifiques (22, 80, 443, 8080) en environ 15 secondes. Dans cet exemple, Masscan a trouvé un port ouvert : SSH (port 22) sur la passerelle du bridge Docker à l'adresse 172.17.0.1. Cela démontre la capacité de Masscan à découvrir rapidement des services actifs.

Points clés sur le format de sortie :

  • L'horodatage (Timestamp) indique quand chaque découverte a été faite.
  • Le format Host: IP () Ports: port/status/protocol//service// permet une identification claire du service.
  • Masscan a détecté le service SSH sur le bridge Docker, ce qui est un résultat classique dans les environnements conteneurisés.

Analyser les ports ouverts

Après avoir exécuté un scan, l'étape suivante consiste à analyser les résultats pour identifier les ports ouverts. Le fichier scan_results.gnmap contient toutes les informations, mais il peut être traité avec d'autres outils pour extraire les données les plus pertinentes.

Tout d'abord, assurez-vous d'être dans le répertoire ~/project.

cd ~/project

Le format .gnmap est conçu pour être facilement analysé par des scripts. Pour trouver rapidement toutes les lignes correspondant à des ports ouverts, vous pouvez utiliser la commande grep.

grep "open" scan_results.gnmap

Cette commande filtre le fichier et n'affiche que les lignes contenant le mot "open". La sortie ressemblera à ceci, listant chaque hôte et ses ports ouverts.

Timestamp: 1756437619   Host: 172.17.0.1 ()     Ports: 22/open/tcp//ssh//

Pour obtenir un résumé rapide des ports les plus fréquemment ouverts sur les réseaux scannés, vous pouvez créer un pipeline de commandes. La commande suivante extrait uniquement les numéros de ports, les trie, puis compte les occurrences uniques.

grep -oP '\d+/open' scan_results.gnmap | sort | uniq -c

Décortiquons cette ligne de commande puissante :

  • grep -oP '\d+/open' : Extrait uniquement les parties correspondantes (-o) des lignes qui respectent l'expression régulière compatible Perl (-P), laquelle recherche des chiffres suivis de /open.
  • sort : Trie la liste des ports ouverts par ordre alphabétique, regroupant les ports identiques.
  • uniq -c : Fusionne les lignes identiques adjacentes et ajoute un compteur (-c) indiquant le nombre d'occurrences de chaque ligne.

Un exemple de sortie pourrait ressembler à ceci, indiquant qu'un hôte a le port 22 (SSH) ouvert :

      1 22/open

Cette technique est très utile pour obtenir une vue d'ensemble des services exposés sur un réseau. Dans ce cas, nous voyons que SSH est le seul service découvert, ce qui est typique pour les réseaux Docker où la passerelle fournit un accès SSH.

Exporter les résultats du scan

Pour la rédaction de rapports ou un traitement ultérieur, il est souvent nécessaire d'exporter les résultats du scan dans un format plus structuré. Dans cette étape, vous allez convertir vos résultats en un fichier CSV (Comma-Separated Values), facilement importable dans un tableur.

Assurez-vous d'être dans le répertoire ~/project.

cd ~/project

Nous allons combiner grep et sed pour analyser le fichier .gnmap et créer un fichier CSV propre. sed est un éditeur de flux puissant capable d'extraire et de reformater des données à l'aide d'expressions régulières.

Exécutez la commande suivante pour créer scan_results.csv.

grep "open" scan_results.gnmap | sed 's/.*Host: \([^ ]*\) .*Ports: \([0-9]*\)\/open\/\([^/]*\).*/\1,\2,\3/' > scan_results.csv

Voici comment fonctionne cette commande :

  • grep "open" scan_results.gnmap : Filtre d'abord les lignes contenant des ports ouverts.
  • sed 's/.*Host: \([^ ]*\) .*Ports: \([0-9]*\)\/open\/\([^/]*\).*/\1,\2,\3/' : Utilise une expression régulière pour capturer l'adresse IP, le numéro de port et le protocole depuis le format Masscan, puis les reformate en CSV.
  • > scan_results.csv : Redirige le résultat final vers un nouveau fichier nommé scan_results.csv.

Vous pouvez maintenant visualiser votre fichier CSV fraîchement créé.

cat scan_results.csv

La sortie sera une liste propre, séparée par des virgules, des hôtes et de leurs ports ouverts.

172.17.0.1,22,tcp

Ce format structuré est idéal pour le partage avec des collaborateurs, l'importation dans des bases de données ou l'utilisation comme entrée pour d'autres outils de sécurité. Le format CSV présente l'adresse IP, le numéro de port et le protocole de manière parfaitement lisible.

Résumé

Dans cet atelier, vous avez appris avec succès les bases de l'utilisation de Masscan pour le balayage réseau à haute vitesse. Vous avez pratiqué l'ensemble du flux de travail, de l'installation de l'outil à partir du code source jusqu'à l'analyse et l'exportation des résultats.

Vous avez acquis une expérience pratique sur :

  • La compilation et l'installation de logiciels à partir des sources sous Linux.
  • La définition de cibles de scan en utilisant la notation CIDR.
  • L'exécution de scans de ports avec des paramètres spécifiques (ports, débit et format de sortie).
  • L'analyse des résultats de scan à l'aide d'outils en ligne de commande tels que grep, sort et uniq.
  • L'exportation de données dans un format CSV structuré pour le reporting.

Ces compétences constituent une base solide pour effectuer des reconnaissances réseau de manière rapide, efficace et responsable.