Numéro de série basé sur l'Adresse MAC
Bonjour,
Ce post dépasse le cadre d'Excel mais concerne bien un projet Excel.
Parmi les solutions proposées pour la création d'un numéro de série, d'une licence ou d'une clé d'activation on utilise souvent l'adresse MAC comme information de base qu'on transforme par quelques méthodes mathématiques ou de cryptage. Cette solution a l'avantage de permettre un contrôle des installations d'un logiciel en vue d'éviter un piratage. Je l'ai utilisé dans le passé dans de très grands logiciels que nous livrons avec les ordinateurs dédiés. Si l'utilisateur installe logiciel sur une autre machine le code détecte et refus de l'installation sans un code spécial qu'on devait lui fournir. L'adresse MAC est l'adresse physique de la carte réseau, donc qui ne change que si on a une modification de matériel dans l'ordinateur.
Je viens de faire la même chose dans un petit projet Excel une quinzaine d'années plus tard mais j'ai constaté lors des tests que l'adresse MAC a changé. Je vous explique en espérant que quelqu'un pourra m'apporter quelques explications et une solution de contournement.
Le logiciel développé sous Excel sur un PC d'entreprise. L' adresse MAC lorsque le PC est sur le réseau de l'entreprise est la suivante : (Information IPconfig)
Carte Ethernet Ethernet :
Suffixe DNS propre … la connexion. . . : xxxx.yyy.local (Anonymisé)
Description. . . . . . . . . . . . . . : Realtek USB GbE Family Controller
Adresse physique . . . . . . . . . . . : 89-70-93-9C-D7-D8
Le même PC connecté ensuite au même réseau de l'entreprise mais via ma connexion Wifi personnel à domicile donne le résultat suivant :
Carte Ethernet Ethernet 2 :
Suffixe DNS propre … la connexion. . . : xxxx.yyy.local (Anonymisé)
Description. . . . . . . . . . . . . . : Juniper Networks Virtual Adapter
Adresse physique . . . . . . . . . . . : 02-05-85-7F-EB-80
Le seul point commun entre les deux réseaux est l'adresse MAC de Wifi qui ne change pas selon qu'on soit en entreprise ou à domicile:
Carte réseau sans fil Connexion au réseau local* 1ÿ:
Statut du m‚dia. . . . . . . . . . . . : Média déconnect‚
Suffixe DNS propre … la connexion. . . :
Description. . . . . . . . . . . . . . : Microsoft Wi-Fi Direct Virtual Adapter
Adresse physique . . . . . . . . . . . : 10-A5-1D-8C-C7-34
Question :
Pourquoi la carte Ethernet du PC (supposé être physiquement dans le PC) n'a pas la même adresse physique lorsqu'on change de réseau ?
La carte wifi qui est également un composant matériel produit pourtant la même adresse MAC.
Comment peut-on avoir l'adresse MAC du même PC (sans changement de matériel) sur différents réseaux ?
Merci d'avance pour tout élément
Cordialement
Bonjour,
Je ne suis pas trop expert sur le sujet, mais il me semble que ce que vous observez est lié à la virtualisation de la config réseau de votre entreprise.
Je pense que votre réseau pro virtualise les connexions d'une certaine manière, et donc vous observez des adresses différentes. Si vous utilisez un VPN également.
Si pas de VPN, je lis ici https://www.techtarget.com/searchnetworking/definition/virtual-network-adapter que ces adaptateurs permettent au service IT de gérer plus précisément les connexions au réseau, notamment au niveau sécurité.
Quant à comment contourner cela, alors là aucune idée. Aujourd'hui la plupart des logiciels utilisent une connexion internet pour vérifier les licenses non ?
Bonjour,
Une adresse MAC identifie une interface réseau, pas un PC. Si plusieurs interfaces réseaux sur une machine, il y aura une adresse mac par interface.
dans une fenetre de commande tu peux taper
ipconfig /all | find "physique"pour avoir la liste complete des adresses physiques sur ta machine, normalement les adresses liées à un hardware doivent rester identiques.
Bonjour @saboh12617,
Merci pour votre réponse. je vais regarder le lien que vous avez partagé.
Oui la virtualisation qui est devenue la norme depuis une dizaine d'année peut effectivement impacter beaucoup de chose mais dans ce cas précis cela voudrait dire que la carte Eternet physique installé dans le PC ne serait pas le composant principal pour la connexion au réseau, ce qui me semble curieux. je vais essayer aussi de trouver un administrateur réseau afin de comprendre mieux.
Quant à votre dernier point sur le contrôle des licences par Internet, oui cela se fait mais dans ce cas il faudra avoir un un serveur ou un PC qui tourne constamment qui interroge les machines sur lesquelles sont installés vos logiciels et si un client bloque cette communication pour se protéger contre vous car vous pouvez en profiter pour lui siphonner des données ? Ce qui voudrait dire que sans Internet votre logiciel ne sera pas contrôlé donc ne fonctionnera pas. On peut faire que Adobe ou Microsoft qui propose des mises à jour automatiques et profitent de cela pour vérifier leur licence et bloquer leurs logiciels en cas de piratage.
Entre nous pour des petits projets Excel on ne va mettre les mêmes moyens que ces mastodontes.
Encore merci
Bonjour @h2so4
Oui effectivement, c'est pour cela j'avais écrit ceci : " L'adresse MAC est l'adresse physique de la carte réseau". J'aurai dû aussi ire interface réseau mais comment l'adresse physique matériel dans l'entreprise n'apparait pas sur mon réseau, donc elle n'est pas lié à la carte éthernet du PC mais à l'infrastructure réseau mise en place dans l'entreprise. C'est ce que je tente de comprendre. Mon objectif est d'avoir un identifiant unique soit du PC soit d'un composant du PC qui peut être l'adresse MAC ou ou l'ID du disque dur, etc. mais dans ce domaine c'est le MAC qui est toujours utilisé. Il faut juste trouver un moyen de pointer la carte interne installée et non l'infra autour.
Merci pour votre réponse
Concernant la résolution du problème, à savoir identifier un ordinateur physique via VBA.
Je me demande dans quelle mesure, en utilisant Environ function (Visual Basic for Applications) | Microsoft Learn et ses différents arguments, vous pouvez vous en sortir pour extraire une clé unique suffisament précise. Car de toute évidence le MAC ne convient pas.
Les arguments de la fonction environ, vous pouvez les trouver ici List All Environment Variables with VBA Environ - wellsr.com
Voir sinon comment faire appel à un script shell, sur le meme principe mais qui permettrai de récupérer plus d'infos sur d'autres composants.
Quant à la solution internet, concernant le cout je suis d'accord, mais pour l'envoi de données, s'il est explicité dans les CGU il me semble que vous respectez le GPRD.
Rebonjour Saboh12617,
Encore merci pour votre réponse. En me plongeant dans quelques articles techniques j'ai compris ceci:
L'adresse MAC (Media Access Control) est une adresse unique attribuée à chaque interface réseau d'un appareil. Ce qui peut prêter à confusion, c'est que chaque interface réseau possède sa propre adresse MAC. Cela signifie qu'un ordinateur peut avoir plusieurs adresses MAC, une pour chaque interface réseau, telles que :
- Carte réseau Ethernet (filaire) : si l'ordinateur est connecté à un réseau via un câble Ethernet, il utilise l'adresse MAC de la carte réseau Ethernet.
- Carte Wi-Fi : si l'ordinateur est connecté via Wi-Fi, il utilise l'adresse MAC de la carte Wi-Fi.
- Interface réseau virtuelle (VPN, Docking station, etc.) : certains logiciels ou équipements matériels peuvent aussi générer des adresses MAC virtuelles.
Dans mon exemple :
- Réseau d'entreprise (via Ethernet par exemple) : l'ordinateur utilise l'adresse MAC de l'interface Ethernet.
- Réseau domestique Wi-Fi : il utilise l'adresse MAC de l'interface Wi-Fi.
Ce qui explique effectivement que j'ai des adresses différentes. Très certainement si je connecte le PC en réseau filaire chez moi, les adresses MAC Ethernet devraient être identiques.
Conclusion : Le gestion de l'identifiant unique n'est pas si simple que je le pensais car il faudra à chaque fois parcourir chaque interface réseau disponible pour vérifier que l'adresse MAC enregistrée lors de l'installation du logiciel se trouve dans cette plage de MAC
A toute fin utile, j'ai écris une fonction qui permet de parcourir toutes les interfaces réseau d'un PC ainsi que les adresses MAC associées.
'------------------------------------------------------------------------------------------------------------
'ListerAdressesMAC : Parcourir les interfaces réseau d'un PC pour lister uniquement les interfaces réseau
'avec une adresse MAC attribuée.
'------------------------------------------------------------------------------------------------------------
Sub ListerAdressesMAC()
Dim objWMIService As Object
Dim objAdapter As Object
Dim colAdapters As Object
Dim strComputer As String
Dim ws As Worksheet
Dim i As Integer
' Initialise la feuille Excel
Set ws = ThisWorkbook.Sheets(1) ' Utilise la première feuille du classeur
ws.Cells.Clear ' Nettoie la feuille de toute donnée précédente
' En-têtes des colonnes
ws.Cells(1, 1).Value = "Interface Réseau"
ws.Cells(1, 2).Value = "Adresse MAC"
' Définit l'ordinateur à interroger (local)
strComputer = "."
' Connexion au service WMI
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
' Récupération des interfaces réseau via WMI
Set colAdapters = objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapter WHERE MACAddress IS NOT NULL")
' Initialisation du compteur de lignes
i = 2
' Parcours de chaque interface réseau
For Each objAdapter In colAdapters
' Ajoute le nom de l'interface et l'adresse MAC à la feuille
ws.Cells(i, 1).Value = objAdapter.Name
ws.Cells(i, 2).Value = objAdapter.MACAddress
' Augmente le compteur de lignes
i = i + 1
Next objAdapter
' Formatage automatique des colonnes pour mieux voir les données
ws.Columns("A:B").AutoFit
MsgBox "Liste des interfaces et des adresses MAC terminée.", vbInformation
End SubSuite....
Si on veut récupérer uniquement les interfaces réseau physiques (c'est-à-dire les vraies cartes réseau et non les interfaces logicielles ou virtuelles comme le VPN).
On peut adapter la fonction comme suit :
Sub ListerInterfacesPhysiquesWMI()
Dim objWMIService As Object
Dim colAdapters As Object
Dim objAdapter As Object
Dim ws As Worksheet
Dim i As Integer
' Initialise la feuille Excel
Set ws = ThisWorkbook.Sheets(1) ' Utilise la première feuille du classeur
ws.Cells.Clear ' Nettoie la feuille de toute donnée précédente
' En-têtes des colonnes
ws.Cells(1, 1).Value = "Interface Réseau"
ws.Cells(1, 2).Value = "Adresse MAC Physique"
' Connexion au service WMI
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
' Récupère les interfaces réseau physiques uniquement via WMI
Set colAdapters = objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapter WHERE PhysicalAdapter = TRUE AND MACAddress IS NOT NULL")
' Initialisation du compteur de lignes
i = 2
' Parcours de chaque interface réseau physique
For Each objAdapter In colAdapters
' Ajoute le nom de l'interface réseau et l'adresse MAC à la feuille
ws.Cells(i, 1).Value = objAdapter.Name
ws.Cells(i, 2).Value = objAdapter.MACAddress
' Augmente le compteur de lignes
i = i + 1
Next objAdapter
' Formatage automatique des colonnes
ws.Columns("A:B").AutoFit
MsgBox "Liste des interfaces réseau physiques et des adresses MAC terminée.", vbInformation
End SubSuper, il semble que vous ayez résolu par vous meme votre question !
Pour ma part je ne connaissais pas le WMI, et je ne savais pas qu'il était accessible via VBA. Je comprends mieux pourquoi les macros sont désactivées par défaut, l'exécution permet d'effectuer des actions quand meme très (trop ?) poussées sur le système pour un outil qui, selon moi dans Excel, devrait se limiter un peu plus à Excel justement.
En tout cas n'hésitez pas à marquer le fil en résolu si vous avez solutionné toutes vos questions.
Oui je pense qu'avec ces éléments je dois pouvoir mettre en place un système de contrôle.
VBA ne se limite pas en effet à ce qu'on a accès via l'interface des produits offices comme Excel, Outlook, Word, Powerpoint, etc.
On peut faire appel aux différentes fonctions Windows et même accéder à la Registry mais les gens n'aiment pas beaucoup ça pour des questions de sécurité.
Certains gros logiciels des marchés financiers sont basés sur Excel, quelques interfacés avec des bases de données, etc. Donc VBA n'est pas un outil pour les enfants