# Référence rapide nmap

*Analyse de ports, découverte d'hôtes, détection de services et scripts NSE*

> Source: Nmap Documentation (nmap.org/docs) · MIT

## Analyses de base

### Cibles d'analyse

```
nmap 192.168.1.1              # hôte unique
nmap 192.168.1.0/24           # sous-réseau complet
nmap 192.168.1.1-50           # plage d'IP
nmap -iL targets.txt          # hôtes depuis un fichier
```

### Spécification des cibles

| Command | Description |
|---------|-------------|
| `192.168.1.1` | Adresse IP unique |
| `192.168.1.0/24` | Notation CIDR (256 hôtes) |
| `192.168.1.1-254` | Plage d'IP |
| `example.com` | Nom d'hôte (résolu en IP) |
| `-iL file.txt` | Lire les cibles depuis un fichier |
| `--exclude 192.168.1.1` | Exclure des hôtes spécifiques |
| `--excludefile skip.txt` | Exclure des hôtes depuis un fichier |

## Analyse de ports

### Types d'analyse

| Command | Description |
|---------|-------------|
| `-sS` | Analyse TCP SYN (défaut, furtive, nécessite root) |
| `-sT` | Analyse TCP connect (handshake complet, sans root) |
| `-sU` | Analyse UDP (lente, souvent filtrée) |
| `-sA` | Analyse TCP ACK (détecter les pare-feux) |
| `-sN` | Analyse TCP NULL (aucun flag) |
| `-sF` | Analyse TCP FIN (flag FIN uniquement) |
| `-sX` | Analyse Xmas (flags FIN+PSH+URG) |

### Sélection de ports

```
nmap -p 80,443 target         # ports spécifiques
nmap -p 1-1000 target         # plage de ports
nmap -p- target               # les 65535 ports
nmap --top-ports 100 target   # les 100 ports les plus courants
```

### États des ports

| Command | Description |
|---------|-------------|
| `open` | Une application accepte les connexions |
| `closed` | Port accessible mais aucun service en écoute |
| `filtered` | Pare-feu bloquant, état indéterminable |
| `unfiltered` | Port accessible, état ouvert/fermé inconnu |
| `open\|filtered` | Impossible de déterminer si ouvert ou filtré |

## Découverte d'hôtes

### Méthodes de découverte

| Command | Description |
|---------|-------------|
| `-sn` | Analyse ping uniquement (sans analyse de ports) |
| `-Pn` | Ignorer la découverte (traiter tous comme actifs) |
| `-PS 80,443` | Découverte TCP SYN sur ports |
| `-PA 80` | Découverte TCP ACK |
| `-PU 53` | Découverte UDP |
| `-PE` | Requête echo ICMP |
| `-PR` | Découverte ARP (réseau local) |

### Balayage réseau

```
nmap -sn 192.168.1.0/24       # balayage ping du sous-réseau
nmap -sn -n 10.0.0.0/24       # balayage, sans DNS
nmap -sn -PR 192.168.1.0/24   # analyse ARP (la plus rapide)
```

## Détection de services

### Détection de versions

```
nmap -sV target               # détecter les versions de service
nmap -sV --version-intensity 5 target  # sondage plus profond
nmap -sV --version-all target  # essayer toutes les sondes (lent)
nmap -A target                 # OS + version + scripts + traceroute
```

### Options de détection

| Command | Description |
|---------|-------------|
| `-sV` | Sonder les ports ouverts pour service/version |
| `--version-intensity 0-9` | Intensité du sondage (défaut 7) |
| `--version-light` | Sondage léger (intensité 2) |
| `--version-all` | Essayer toutes les sondes (intensité 9) |
| `-A` | Agressif : -sV -O --script=default -traceroute |
| `-sC` | Exécuter les scripts NSE par défaut |

## Détection de système d'exploitation

### Empreinte OS

```
nmap -O target                # détection OS (nécessite root)
nmap -O --osscan-limit target # analyser uniquement les hôtes prometteurs
nmap -O --osscan-guess target # estimation agressive de l'OS
nmap -A target                # inclut la détection OS
```

### Options de détection OS

| Command | Description |
|---------|-------------|
| `-O` | Activer la détection OS |
| `--osscan-limit` | Ignorer les hôtes sans ports TCP ouverts+fermés |
| `--osscan-guess` | Deviner l'OS plus agressivement |
| `--max-os-tries N` | Nombre maximal de tentatives de détection par hôte |

## Scripts (NSE)

### Utilisation des scripts

```
nmap --script=default target   # catégorie par défaut
nmap --script=vuln target      # scripts de vulnérabilités
nmap --script=http-headers target
nmap --script="http-*" target  # correspondance générique
```

### Catégories de scripts

| Command | Description |
|---------|-------------|
| `default` | Scripts sûrs et utiles (raccourci -sC) |
| `vuln` | Vérifier les vulnérabilités connues |
| `safe` | Scripts non intrusifs |
| `intrusive` | Peuvent planter les cibles ou déclencher les IDS |
| `discovery` | Découverte réseau et de services |
| `auth` | Vérifications liées à l'authentification |
| `brute` | Test de credentials par force brute |
| `exploit` | Tentatives d'exploitation active |

### Scripts utiles

| Command | Description |
|---------|-------------|
| `http-title` | Récupérer les titres des pages web |
| `ssl-cert` | Afficher les détails du certificat SSL |
| `ssh-hostkey` | Afficher les empreintes des clés SSH |
| `dns-brute` | Énumérer les sous-domaines DNS |
| `smb-os-discovery` | Détecter l'OS Windows via SMB |
| `vuln` | Exécuter toutes les vérifications de vulnérabilités |

## Formats de sortie

### Options de sortie

```
nmap -oN scan.txt target      # sortie texte normale
nmap -oX scan.xml target      # sortie XML
nmap -oG scan.gnmap target    # sortie grepable
nmap -oA scan_all target      # tous les formats à la fois
```

### Options de sortie

| Command | Description |
|---------|-------------|
| `-oN file` | Sortie normale vers fichier |
| `-oX file` | Sortie XML (pour outils/analyse) |
| `-oG file` | Sortie grepable (un hôte par ligne) |
| `-oA basename` | Trois formats (basename.nmap/xml/gnmap) |
| `-v` | Augmenter la verbosité (-vv pour plus) |
| `-d` | Sortie de débogage (-dd pour plus) |
| `--open` | Afficher uniquement les ports ouverts |
| `--reason` | Afficher la raison de l'état du port |

## Timing et performances

### Gabarits de timing

| Command | Description |
|---------|-------------|
| `-T0 (paranoïaque)` | Très lent, évasion IDS (5 min entre sondes) |
| `-T1 (furtif)` | Lent, évasion IDS (15 sec entre sondes) |
| `-T2 (poli)` | Vitesse réduite, moins de bande passante |
| `-T3 (normal)` | Timing par défaut |
| `-T4 (agressif)` | Rapide, suppose un réseau fiable |
| `-T5 (insensé)` | Le plus rapide, peut manquer des résultats |

### Réglage fin

| Command | Description |
|---------|-------------|
| `--min-rate 1000` | Envoyer au moins 1000 paquets/sec |
| `--max-rate 500` | Limiter à 500 paquets/sec |
| `--max-retries 2` | Retransmissions maximales de sondes |
| `--host-timeout 30m` | Ignorer l'hôte si l'analyse dépasse 30 min |
| `--scan-delay 1s` | Délai entre les sondes |
| `--min-parallelism 10` | Groupes de sondes parallèles minimaux |

## Contournement de pare-feu

### Techniques d'évasion

| Command | Description |
|---------|-------------|
| `-f` | Fragmenter les paquets (morceaux de 8 octets) |
| `-D RND:5` | Analyse leurre avec 5 IPs aléatoires |
| `-S spoof_ip` | Usurper l'IP source (nécessite paquets bruts) |
| `-e eth0` | Utiliser une interface réseau spécifique |
| `--source-port 53` | Utiliser un port source spécifique (ex. DNS) |
| `--data-length 25` | Ajouter des données aléatoires aux paquets |
| `--spoof-mac 0` | Randomiser l'adresse MAC |

### Exemples d'évasion

```
nmap -f -D RND:3 target        # fragments + leurres
nmap --source-port 53 target   # port DNS (souvent autorisé)
nmap -T1 --scan-delay 5s target  # lent pour éviter les IDS
```

## Motifs courants

### Reconnaissance rapide

```
nmap -T4 -F target             # ports courants rapides
nmap -T4 -A -v target          # OS + détection de services
nmap -sV --top-ports 1000 target  # top 1000 + versions
```

### Analyse complète

```
# TCP complet + service + OS + scripts
nmap -sS -sV -O -sC -p- -T4 -oA full target
# Analyse UDP sur ports courants
nmap -sU --top-ports 50 target
```

### Audit de serveur web

```
nmap -p 80,443 --script=http-title,http-headers,\
ssl-cert,http-methods target
# Vérifier les proxys ouverts et vulnérabilités
nmap -p 80,443,8080 --script=http-open-proxy,vuln target
```

### Inventaire réseau

```
# Découvrir tous les hôtes actifs avec infos OS
nmap -sn 192.168.1.0/24 -oG - | grep "Up"
# Inventaire de services pour sous-réseau
nmap -sV -T4 192.168.1.0/24 -oX inventory.xml
```
