Maxime BENE
Retour au blog
2025-09-226 min

Analyser un scan Nmap avec Wireshark — au niveau paquet

Comment voir un scan Nmap dans Wireshark, interpréter les flags TCP, et comprendre ce qui se passe réellement sur le réseau pendant une reconnaissance.

WiresharkNmapAnalyse réseauTCPSOC

Pourquoi analyser un scan au niveau paquet ?

Lancer Nmap, c'est facile. Comprendre ce qu'il fait vraiment, c'est ce qui distingue un utilisateur d'un analyste.

En SOC, tu ne verras jamais "un scan Nmap" dans un log. Tu verras des paquets SYN, des RST, des réponses incohérentes — et c'est à toi de reconstituer l'histoire.

Cet article montre, capture Wireshark à l'appui, ce qui se passe réellement sur le réseau pendant un scan.

Préparation

Le lab

  • Kali (192.168.149.129) → poste d'attaque et d'analyse
  • Ubuntu (192.168.149.130) → cible avec Apache sur le port 80

Le filtre Wireshark de base

Avant même de commencer, applique ce filtre pour ne voir que le trafic entre les deux machines :

ip.addr == 192.168.149.130 && ip.addr == 192.168.149.129

Sans ce filtre, Wireshark capture aussi le bruit de fond (ARP, mDNS, etc.) et c'est illisible.

Étape 1 — Lancer la capture AVANT le scan

Règle d'or : on lance toujours la capture avant de générer le trafic. Sinon on rate le début de l'échange.

  1. Dans Wireshark, sélectionne l'interface eth0
  2. Clique sur la nageoire bleue (Start)
  3. Applique le filtre ip.addr == 192.168.149.130

Étape 2 — Lancer le scan depuis Kali

Dans un terminal Kali :

sudo nmap -sS 192.168.149.130

Ce que fait ce scan :

  1. Envoie un paquet SYN sur chaque port scanné
  2. Reçoit SYN-ACK (port ouvert) ou RST (port fermé)
  3. Envoie un RST pour fermer (ne termine jamais la connexion)

Étape 3 — Lire la capture

Ce qu'on voit dans Wireshark

#SourceDestinationProtocoleInfo
1192.168.149.129192.168.149.130TCP54321 → 22 [SYN]
2192.168.149.130192.168.149.129TCP22 → 54321 [SYN, ACK]
3192.168.149.129192.168.149.130TCP54321 → 22 [RST]
4192.168.149.129192.168.149.130TCP54322 → 23 [SYN]
5192.168.149.130192.168.149.129TCP23 → 54322 [RST, ACK]
6192.168.149.129192.168.149.130TCP54323 → 25 [SYN]
...............

Deux comportements à repérer :

  • Port ouvert (22/SSH) : SYN → SYN-ACK → RST
  • Port fermé (23, 25…) : SYN → RST-ACK

Lecture des flags TCP

FlagSignification
SYNDemande de connexion
SYN-ACKLa cible accepte
ACKConfirmation
RSTConnexion refusée / coupée
FINFin normale de connexion

Le pattern qui trahit un scan SYN :

SYN → SYN-ACK → RST

Le RST immédiat après SYN-ACK signifie que la connexion n'a jamais été utilisée. C'est une signature de scan.

Différence avec une connexion normale

Une connexion HTTP légitime fait :

SYN → SYN-ACK → ACK → GET / HTTP/1.1 → 200 OK → FIN

Un scan SYN fait :

SYN → SYN-ACK → RST    (port ouvert)
SYN → RST-ACK          (port fermé)

Il manque le ACK final — c'est précisément ce qui rend le scan "stealth".

Les filtres Wireshark indispensables

Voir uniquement les SYN

tcp.flags.syn == 1 && tcp.flags.ack == 0

Affiche tous les SYN initiaux (tentatives de connexion). Un pic = scan probable.

Voir uniquement les RST

tcp.flags.rst == 1

Affiche les connexions refusées. Beaucoup de RST depuis une IP source = scan.

Voir un port spécifique

tcp.port == 22

Combiner

ip.addr == 192.168.149.130 && tcp.port == 80 && tcp.flags.syn == 1

→ Tous les SYN vers le port 80 de l'Ubuntu.

Comprendre le three-way handshake

Le three-way handshake est la base de toute connexion TCP :

#Source → DestinationFlags
1Client → ServeurSYN
2Serveur → ClientSYN, ACK
3Client → ServeurACK

Après ces 3 paquets, la connexion est établie. Les données peuvent circuler.

Puis l'échange de données

#Source → DestinationContenu
4Client → ServeurGET / HTTP/1.1
5Serveur → ClientHTTP/1.1 200 OK

Et la fermeture

#Source → DestinationFlags
6Client → ServeurFIN, ACK
7Serveur → ClientFIN, ACK
8Client → ServeurACK

Total : 8 paquets pour un simple GET HTTP.

Un scan SYN : 3 paquets par port (SYN, SYN-ACK, RST). Sur 1000 ports scannés → 3000 paquets en quelques secondes.

Follow TCP Stream

Pour suivre une conversation complète :

  1. Clic droit sur un paquet
  2. FollowTCP Stream

Tu vois la conversation brute, en clair (si non chiffrée). Très utile pour analyser une session HTTP, un échange SMTP, etc.

Détecter un scan — les signaux faibles

En SOC, un scan Nmap se détecte par accumulation d'indices :

SignalCe que ça veut dire
Beaucoup de SYN depuis une IP vers des ports différentsScan de ports
RST en rafalePorts fermés scannés
Pas de ACK final après SYN-ACKScan SYN (stealth)
Durée très courte pour beaucoup de portsAutomatisé, pas humain
SYN vers des ports inhabituels (8888, 9000, 31337)Scan ciblé

Avec mon outil Network Packet Analyzer :

🚨 CRITIQUE — SCAN DE PORTS (interne) depuis 192.168.149.129 — 1000 ports distincts

→ Détection automatique basée sur le même principe.

Bonnes pratiques

  • Lancer la capture avant de générer le trafic
  • Filtrer sur les IPs concernées (ip.addr ==)
  • Sauvegarder les captures (.pcap) pour analyse ultérieure
  • Nommer tes captures (scan_syn_ubuntu_20250922.pcap)
  • ✅ Utiliser curl plutôt qu'un navigateur pour les tests HTTP simples
  • ❌ Ne pas analyser du trafic sans autorisation

Ce que j'en retiens

  1. Un scan SYN laisse une signature claire : SYN → SYN-ACK → RST
  2. Le handshake TCP est la clé pour distinguer trafic légitime et scan
  3. Les filtres Wireshark sont indispensables pour ne pas se noyer
  4. En SOC, la détection repose sur la corrélation : source + destination + volume + durée

Comprendre ce qui se passe au niveau paquet, c'est comprendre ce que tu verras dans les logs.

Pour aller plus loin