8
votes

Comment réaliser de manière fiable l'adresse MAC de l'adaptateur de réseau de l'ordinateur de l'ordinateur?

J'essaie de (plus ou moins) d'identifier de manière unique un système à des fins de licence. J'ai choisi l'adresse MAC de l'adaptateur de réseau de l'ordinateur de l'ordinateur pour cette tâche, car je peux être sûr que chaque amumeur exécutant ce logiciel en en ait une, et cela évite la réactivation lors de la modification par ex. le disque dur.

J'ai des problèmes d'identification de manière fiable l'adaptateur réseau à bord, cependant.

Utilisation du "Win32_NetworkAdapterConfiguration" GestionClass, je peux obtenir beaucoup d'adresses MAC, y compris l'adresse que j'aime, mais je n'ai pas trouvé de moyen de distinguer l'une d'administration d'adaptateurs virtuels installés par Windows ou Virus Scanners. Cette liste semble être commandée, cependant. L'adresse MAC que je suis intéressé est (sur ma machine) répertorié avant d'autres adaptateurs réseau (réels). (La liste est commandée par Index d'interface.)

Utilisation NetworkInterface.getallNetworkInterfaces () , je pense que je peux identifier les adaptateurs de réseau réels en filtrant sur .NetworkIntype == NetworkInterfaceType.ethernet , mais cette liste semble être non ordonné (une carte réseau ajoutée apparaît avant les Onboards One).

est d'abord à l'aide de la deuxième méthode pour obtenir une liste de cartes de réseaux réelles, puis de les trier par ordre d'apparition dans la première liste d'une manière fiable d'identifier l'adresse MAC que je recherche? L'indice d'interface peut-il changer la première liste? Je serais heureux d'entendre vos pensées!

Merci!

P.s.: Je sais que l'adresse MAC peut être assez facilement modifiée, mais je peux vivre avec ça. Je ne peux pas vivre avec le client de ne pas pouvoir utiliser le logiciel après simplement insérer un bâton WLAN =)


11 commentaires

Pourquoi ne pas cacher toutes les adresses MAC d'InterfaceType Ethernet?


@rdkleine: Cela briserait l'activation si un autre adaptateur réseau est ajouté.


Vous pourriez comparer tous les adaptateurs avec tous les cachés. Une paire est suffisante, non?


@rdkleine: Cela donnerait au client la possibilité de créer un Stick WLAN "magique", DAS active le logiciel sur n'importe quel ordinateur. Je préférerais identifier l'adaptateur à bord.


Si vous êtes inquiet de ces appareils, vous ne devriez peut-être pas utiliser une adresse MAC en premier lieu. L'entrepoiffage d'adresse MAC n'est pas tout ce difficile.


Comment distingueriez-vous une ligne intégrée (soudée sur la carte mère) avec une dans un emplacement PCI? Pas sûr si cela est possible. Ils apparaîtraient de la même manière que les deux sont accrochés au bus PCI. Ou considérez-vous ceux-ci de la même manière et souhaitez-vous seulement filtrer les personnes sans fil et virtuelles?


Vous devriez être capable d'obtenir tous les nics liés à PCI avec une API Windows. Ceux qui n'ont pas d'emplacement sur une fente PCI sont ni virtuels ou USB. webcache.googleusercontent.com/.../a>


@MIKAEL: De manière optimale, j'aimerais identifier celui soudé sur la carte mère.


Sur mon ordinateur portable, l'embarcadère est à la fente PCI 0, tandis que le sans fil est à 12 heures. Et le sans fil que vous pouvez probablement détecter est sans fil d'une manière ou d'une autre. Ensuite, les questions sont d'obtenir les périphériques de bus PCI et les machines à sous;) et de combiner avec d'autres API de sorte que les cartes réseau.


@Jens: Il n'y a aucune différence que vous allez pouvoir détecter entre la carte mère et l'addition de Nics. En supposant que votre carte mère est livrée avec une hypothèse audacieuse, en particulier pour des objets comme des ordinateurs portables et des serveurs qui ne disposent souvent pas de Nics soldés directement sur la carte mère. (Les ordinateurs portables utilisent souvent des cartes Mini PCI Ajouter en cartes ou au moins avoir la carte réseau sur une tasse de fille, des serveurs utilisent souvent uniquement des nics complémentaires)


Vous parlez de «l'adaptateur de réseau réel», mais souvenez-vous qu'il peut y en avoir plus d'un de ceux-ci. Je ne sais pas si elles sont garanties pour toujours être retournées dans le même ordre. Même s'ils le sont, il peut arriver qu'un utilisateur puisse séparer leur PC et le remet ensemble et sonne les Nics autour. Ils jurent qu'ils "n'ont pas changé le matériel" et que le logiciel a cessé de fonctionner. Vous devrez gérer cela en quelque sorte aussi.


4 Réponses :


10
votes

une solution plutôt basse technologie serait d'appeler le commande netstat et recherchez l'adresse MAC de l'adaptateur qui a une adresse IP valide. Je n'ai jamais vu la commande netstat échoue sur une machine alors que j'ai vu WMI donner des résultats inattendus de nombreuses fois.

Dans tous les cas, j'ai déjà fait un système d'activation similaire et j'ai utilisé l'adresse MAC comme clé d'identification. En fin de compte, il a fini d'être plus de problèmes que cela ne valait que pour moi et le client! Ce que j'ai trouvé pour être un meilleur équilibre et moins de tracas était d'avoir l'utilisateur "Connectez-vous" la première fois que le logiciel a été installé. Avec le consentement de l'utilisateur, vous pouvez envoyer une pièce d'identité sur le serveur tel que leur adresse MAC.

Ensuite, vous n'avez besoin que de vérifier périodiquement votre base de données d'activation pour preuve de violations de licence majeures et de désactiver les clés si nécessaire. En tant que client qui déteste l'activation du produit et une ISV qui déteste la piraterie logicielle, je peux voir les deux côtés de l'argument et cela évite de mettre le client dans la position inconfortable de devoir vous convaincre qu'ils sont légitimes quand quelque chose (inévitablement) va faux.

Juste pour nommer quelques raisons pour lesquelles l'identification de Mac peut ne pas fonctionner ... J'utilise deux Nic (filaire et sans fil) de mon ordinateur portable selon que je suis au travail ou à la maison. L'un ou l'autre peut être désactivé à tout moment. L'autre chose à noter est que j'utilise un peu de machines virtuelles et non seulement ils obtiennent leur propre mac mais je pourrais spécifier n'importe quel Mac que je veux. Ensuite, un jour, vous découvrirez que vous avez 100 personnes dans votre base de données avec un Mac de tous les zéros. :) rien n'est garanti ici.


1 commentaires

Merci pour l'entrée! Pour la raison pour laquelle vous mentionnez, je souhaite utiliser l'adaptateur de bord, même si un autre adaptateur a une adresse IP et la ligne de bord n'a aucune. Bon point avec les VM, mais je pense que ce ne serait pas un problème majeur avec nos clients ... cela reviendra et me mordre. =)



1
votes

Vous devez envisager d'autres propriétés de WMI en plus de l'adresse MAC.

La manière dont l'activation de produit Windows gère cela, est de regarder des propriétés telles que l'adresse MAC (ainsi que d'autres informations d'identification sur la carte elle-même, telles que les informations de fournisseur PCI), ainsi que certaines propriétés du périphérique communes (contrôleurs de disque dur , affichez des adaptateurs) et base le besoin de réactivation sur certains seuils. Si trop de ces choses changent, la réactivation est requise.

Voici un excellent article sur le sujet et devrait vous donner des aliments à réflexion sur la manière d'aborder de bonnes propriétés à examiner pour votre propre système de licence / activation:

http://aumha.org/win5/a/wpa.php


0 commentaires

1
votes

Si votre exigence principale est d'identifier de manière unique un PC, je vous suggère de jeter un coup d'oeil sur cette question . La réponse acceptée parle d'une solution ainsi que des pièges d'utilisation de l'approche d'identificateur d'adresse MAC

J'espère que cela aide


0 commentaires

1
votes

Pour accéder aux détails de l'interface réseau Dans .NET, reportez-vous à la méthode NetworkInterface.getphysicalAddress. / code> dans le System.net.NetworkInformation Espace de noms.

L'utilisation est détaillé sur MSDN .

Je ferais certainement référence à Le lien Ryan a fourni en ce qui concerne s'appuyer sur une adresse MAC pour l'identification.


0 commentaires