Gestion des adresses MAC
publication: 28 décembre 2025 / mis à jour 28 décembre 2025
Les adresses MAC
Une adresse MAC, ou adresse de contrôle d'accès au média (Media Access Control en anglais), est un identifiant unique attribué à un périphérique réseau. Elle est codée sur 6 octets, soit 48 bits, et se compose de caractères alphanumériques. On peut la considérer comme la plaque d'immatriculation de l'appareil sur le réseau.
Fonctionnement:
- l'adresse MAC est stockée dans la carte réseau ou une interface réseau similaire du périphérique;
- elle est utilisée pour identifier de manière unique un appareil sur un réseau local (LAN);
- elle permet aux périphériques de communiquer entre eux et de partager des ressources;
- elle est également utilisée par les routeurs et les commutateurs pour contrôler le trafic réseau.
Propriétés:
- unique: Chaque adresse MAC est censée être unique au monde. Cela signifie qu'aucun autre périphérique ne devrait avoir la même adresse MAC.
- physique: L'adresse MAC est liée au matériel du périphérique et ne change pas, même si vous réinstallez le système d'exploitation ou que vous changez de fournisseur d'accès à Internet (FAI).
- fixe: L'adresse MAC ne peut généralement pas être modifiée. Cependant, il existe des méthodes pour la falsifier, mais cela est généralement déconseillé pour des raisons de sécurité.
Utilisations:
- contrôle d'accès: l'adresse MAC peut être utilisée pour contrôler l'accès à un réseau. Par exemple, un administrateur réseau peut configurer un routeur pour autoriser uniquement les périphériques avec des adresses MAC spécifiques à se connecter au réseau.
- résolution de conflits: En cas de conflit IP sur un réseau, les adresses MAC peuvent être utilisées pour identifier le périphérique à l'origine du conflit.
- suivi des périphériques: L'adresse MAC peut être utilisée pour suivre le déplacement des périphériques sur un réseau.
Pour exploiter ESP-NOW, il faut connaître l'adresse MAC de chaque carte ESP32 intégrée au réseau.
Le code source concernant cet article est disponible ici:
github.com/MPETREMANN11/ESP32forth/blob/main/espnow/mac-address.fs
Comment trouver l'adresse MAC d'une carte ESP32
La première étape consiste à activer le port WiFi en mode station. Dans ce mode on ne définit que le SSID du mode station:
also wifi also espnow \ Configure WiFi in station mode : wifi-init ( -- ) \ start wifi in station mode WIFI_MODE_STA Wifi.mode ;
WIFI_MODE_STA est un paramètre de mode Wi-Fi couramment utilisé dans les systèmes embarqués et les microcontrôleurs,
en particulier ceux basés sur la famille ESP32. Cela signifie Station Mode, ce qui signifie que
l'appareil fonctionne comme un client Wi-Fi et a l'intention de se connecter à un réseau Wi-Fi existant
fourni par un point d'accès (AP).
Dans WIFI_MODE_STA, l'appareil recherche activement les réseaux Wi-Fi disponibles, sélectionne le réseau souhaité.
un basé sur son SSID (Service Set Identifier) et son mot de passe, et établit une connexion avec l'AP.
Une fois connecté, l'appareil peut communiquer avec d'autres appareils sur le réseau et accéder à Internet.
Une adresse MAC est définie sur 6 octets. On va récupérer l'adresse MAC de notre carte ESP32 en réservant
6 octets dans le mot myMAC:
\ store current mac Address create myMac 6 allot \ get mac address for current ESP32 card and store result in myMac : getMyMac ( -- ) myMac WiFi.macAddress ;
On en profite également pour fédinir le mot .mac qui affichera l'adresse MAC récupérée.
Maintenant, on récupère l'adresse MAC de notre carte ESP32 avec WiFi.macAddress:
wifi-init 100 ms getMyMac
Afficher une adresse MAC
Une adresse MAC est généralement notée sous forme de six groupes de deux caractères hexadécimaux, séparés par des deux-points. Par exemple:
00:11:22:33:44:55
C'est cette forme qui nous intéresse. Voici comment est défini le mot .mac permettant d'afficher
une adresse MAC:
\ display MAC address in hex format
: .mac { mac-addr -- }
base @ hex
6 0 do
mac-addr i + c@ <# # # #> type
i 5 < if
[char] : emit
then
loop
base !
;
Visualisation du contenu de myMAC avec .mac:
myMAC .mac
\ display: EC:62:60:9C:76:30
Définition des adresses MAC cible
Vous l'avez compris, pour communiquer entre deux cartes ESP32, il faut que la carte qui transmet un message connaisse l'adresse MAC de la carte cible. S'il y a plusieurs cartes cible, il faut mémoriser l'adresse de chaque carte cible.
Voici comment définir une adresse MAC pour une carte ESP32 cible:
: define-mac-address: ( $n1..$n6 comp:-- | exec: -- addr ) create \ store mac address in 6 first bytes >r >r >r >r >r c, r> c, r> c, r> c, r> c, r> c, r> c, \ store 0 in others bytes esp_now_peer_info_t 6 - 1- for 0 c, next does> ; only forth
Voici comment mémoriser l'adresse MAC d'une carte cible dont on aura récupéré l'adresse MAC:
$EC $62 $60 $9C $76 $30 define-mac-address: MASTER $08 $3A $F2 $6E $1E $F8 define-mac-address: SLAVE1 $EC $62 $60 $9C $A9 $50 define-mac-address: SLAVE2
Ici, on définit MASTER et SLAVE1. L'exécution d'un de ces mot dépose sur la pile de données
la zone mémoire contenant l'adresse MAC de la carte ESP32 cible. On vérifie que cette adresse MAC
a été correctement compilée:
SLAVE1 .mac \ display: 08:3A:F2:6E:1E:F8
Si vous exécutez ce code avec vos propres cartes ESP32, vous récupérerez des adresses MAC très différentes. Ce sont ces adresses MAC dont il faut tenir compte.
En plus d'enregistrer une adresse MAC, le mot define-mac-address: réserve des octets supplémentaires pour certains usages.
Ces octets supplémentaires dépendent de la structure esp_now_peer_info_t.
La structure esp_now_peer_info_t
esp_now_peer_info_t est une structure contenant les informations sur la carte cible.
- peer_address: L'adresse MAC du périphérique jumeau
- lmk: clé de cryptage. A laisser vide si on ne veut pas crypter la transmission;
- channel: canal Wi-Fi sur lequel communiquer avec le périphérique jumeau. La valeur de channel peut être comprise entre 0 et 14;
Voici comment définir la structure esp_now_peer_info_t:
forth
also structures
also espnow
struct esp_now_peer_info_t
ESP_NOW_ETH_ALEN field ->peer_addr
16 field ->lmk
u8 field ->channel
u8 field ->ifidx
u8 field ->encrypt
u32 field ->priv
Le canal de transmission WiFi par défaut est le canal 0. Voici comment est défini le mot set-channel
qui permet de changer un canal de transmission:
\ set channel for peer : set-channel ( chan addr -- ) !field ->channel ;
Pour modifier le canal des cartes MASTER et SLAVE1:
3 MASTER set-channel 3 SLAVE1 set-channel
Legal: site web personnel sans commerce / personal site without seling
