Autres articles / Other articles

Programmer un renifleur de réseaux WiFi

publication: 21 mai 2026 / mis à jour 21 mai 2026

Read this page in english

 

Préambule

Dans cet article, certaines définitions ne seront pas détaillées. Vous les retrouverez facilement dans les fichiers sources de ce projet WiFi.

Vous trouverez tous les codes sources ESP32forth afférents à cet article ici:
Wifi ESP32forth project.

Structuration des fichiers:

Le contenu de ces fichiers est susceptible d'évoluer en fonction d'autres développements.

Pour exploiter leur contenu, récupérez ces fichiers et transférez leur contenu dans l'espace de stockage SPIFFS de votre carte ESP32.

Une fois transférés, tapez main ou include /SPIFFS/main.fs.

Scan d'un réseau WiFi

Il s'agit ici de scanner le réseau wifi qui est à portée de votre carte ESP32. La carte ESP32 utilisée n'exploite que les fréquences en 2 Ghz. Elle ne peut donc pas détecter les réseaux émettant dans les fréquences à 5 ou 6 Ghz. Mais les canaux en 2 Ghz sont encore très nombreux.

Pour débuter un scan réseau, il faut d'abord initialiser notre carte ESP32 en mode station:

WIFI_MODE_STA WiFi.mode 

Cette initilisation ne nécessite aucune connexion à un routeur WiFi.

L'opération suivante consiste à nettoyer toute ancienne connexion:

WiFi.disconnect             \ cut all connexions 
500 ms                      \ wait for security 
cr ." Scan in progress..." cr 

On lance maintenant un scan réseau wifi. CEci est réalisé au travers du mot WiFi.scanNetworks. Ce mot fait partie des mots étendant le vocabulaire initial wifi.
Voir l'article: Extension du vocabulaire WiFi pour ESP32forth

WiFi.scanNetworks           \ Launch scan 

Ce mot restitue le nombre de points WiFi détectés. Pour une valeur n, on va analyser les données de chaque point en utilisant un index compris entre 0 et n-1. C'est ce que va faire le mot .network dont voici la définition:

: .network  { netId -- } 
    netId WiFi.channel 4 .r  .vbar 
    netId WiFi.RSSI    4 .r  .vbar 
    netId WiFi.encryptionType decode-encryption 8 -spaces .vbar 
    netId WiFi.SSID z>s type cr 
  ; 

Boucle de scan réseau

Le scan réseau est effectué dans une boucle do..loop. Voici la définition de net-scan:

only FORTH 
also wifi 
 
\ scan local wifi network 
: net-scan  ( -- ) 
    WIFI_MODE_STA WiFi.mode 
    WiFi.disconnect             \ cut all connexions 
    500 ms                      \ wait for security 
    cr ." Scan in progress..." cr 
    WiFi.scanNetworks           \ Launch scan 
    dup { ssidFounded }         \ store in local variable ssidFounded 
    case 
        -1 of ." Erreur: Scan failed (Busy)" cr exit    endof 
        -2 of ." Error: WiFi not initialized" cr exit    endof 
    endcase 
    ." Founded networks: " ssidFounded . cr 
    ssidFounded 0 > if 
        .headNetwork 
        ssidFounded 0 do 
            i .network          \ display datas of each founded network 
        loop 
    then 
    WiFi.scanDelete             \ free ressources 
    ." Memory cleaned" cr  
  ; 
 
only FORTH 

Ce mot regroupe les opérations d'initialisation de l'interface wifi de notre carte ESP32, puis le scan réseau et enfin l'analyse de chaque réseau détecté.

Voici un exemple de ce que restitue un scan réseau:

Scan in progress...
Founded networks: 2
chan | RSSI | encType  | SSID
-----+------+----------+---------------------------
   5 |  -55 | WPA2     | ARLO_VMB_1582925691
   5 |  -56 | WPA2     | Livebox-1390L
Memory cleaned
 ok

Cette analyse permet de détecter en particulier:

Si certains canaux sont surchargés, vous pouvez reprogrammer vos équipements vers des canaux non chargés.

Un scan réseau permet également de voir si une autre carte ESP32 est visible. Le paramètre RSSI indique la force du signal reçu par la carte ESP32.

Evolutions envisageables

Ici, le mot net-scan est le point de départ d'une application qui peut être bien plus ambitieuse:

Bien programmé, avec une batterie et une bonne gestion de l'alimentation électrique, la carte ESP32 peut devenir un redoutable outil de reniflage réseau.


Legal: site web personnel sans commerce / personal site without seling