Ich versuche, ein System für Lizenzierungszwecke (mehr oder weniger) eindeutig zu identifizieren. Ich habe für diese Aufgabe die MAC-Adresse des Computer-On-Board-Netzwerkadapters gewählt, da ich sicher sein kann, dass jeder Cmputer, der diese Software ausführt, tatsächlich einen hat, und dies vermeidet eine erneute Aktivierung, wenn z. die Festplatte.
Ich habe Probleme, den Onboard-Netzwerkadapter zuverlässig zu identifizieren.
Mit der ManagementClass "Win32_NetworkAdapterConfiguration" kann ich viele MAC-Adressen bekommen, einschließlich der Adresse, die ich mag, aber ich habe keine Möglichkeit gefunden, das Onboard von virtuellen Adaptern zu unterscheiden, die von Windows- oder Virenscannern installiert wurden. Diese Liste scheint jedoch geordnet zu sein. Die MAC-Adresse, die mich interessiert, ist (auf meinem Rechner) vor anderen (echten) Netzwerkadaptern aufgeführt. (Die Liste ist nach Schnittstellenindex geordnet.)
Mit NetworkInterface.GetAllNetworkInterfaces()
glaube ich, dass ich die echten Netzwerkadapter durch Filtern auf .NetworkInterfaceType == NetworkInterfaceType.Ethernet
identifizieren kann, aber diese Liste scheint ungeordnet zu sein (eine hinzugefügte Netzwerkkarte erscheint vor der Onboard-Karte).
Verwenden Sie zuerst die zweite Methode, um eine Liste realer Netzwerkkarten zu erhalten, und sortieren Sie sie dann nach der Reihenfolge in der ersten Liste, um die gesuchte MAC-Adresse zuverlässig zu identifizieren? Kann sich der Schnittstellenindex in der ersten Liste ändern? Ich würde mich freuen, deine Gedanken zu hören!
Danke!
PS .: Ich weiß, dass die MAC-Adresse ziemlich leicht geändert werden kann, aber damit kann ich leben. Ich kann nicht damit leben, dass der Kunde nach dem einfachen Einfügen eines WLAN-Sticks die Software nicht nutzen kann =)
Eine eher Low-Tech-Lösung wäre, die Befehl netstat und suchen Sie nach der MAC-Adresse des Adapters, der eine gültige IP-Adresse hat. Ich habe noch nie gesehen, dass der netstat-Befehl auf einem Computer fehlgeschlagen ist, während ich gesehen habe, dass WMI unzählige Male unerwartete Ergebnisse liefert.
In jedem Fall habe ich vorher ein ähnliches Aktivierungssystem gemacht und die MAC-Adresse als Identifikationsschlüssel verwendet. Am Ende war es mehr Ärger als es wert war - sowohl für mich als auch für den Kunden! Was ich als weitaus bessere Balance und weniger Aufwand empfand, war, dass sich der Benutzer bei der ersten Installation der Software "anmeldete". Mit der Einwilligung des Benutzers können Sie eine Identifikation wie zB die MAC-Adresse an den Server senden.
Dann müssen Sie Ihre Aktivierungsdatenbank nur regelmäßig auf Beweise für schwerwiegende Lizenzverletzungen überprüfen und die Schlüssel bei Bedarf deaktivieren. Als ein Kunde, der Produktaktivierung hasst, und einen ISV, der Softwarepiraterie hasst, kann ich beide Seiten des Arguments sehen und auf diese Weise vermeiden, den Kunden in die unbequeme Position zu versetzen, Sie zu überzeugen, dass sie legitim sind, wenn etwas (unvermeidlich) passiert falsch.
Um nur ein paar Gründe zu nennen, warum die MAC-Identifikation nicht funktioniert ... Ich benutze zwei NICs (verkabelt und kabellos) in meinem Laptop, je nachdem, ob ich bei der Arbeit oder zu Hause bin. Der eine oder andere kann jederzeit deaktiviert sein. Die andere Sache zu beachten ist, dass ich virtuelle Maschinen ziemlich viel benutze und nicht nur, dass sie ihren eigenen MAC bekommen, aber ich könnte jeden MAC spezifizieren, den ich will. Dann werden Sie eines Tages feststellen, dass sich in Ihrer Datenbank 100 Personen mit einem MAC aller Nullen befinden. :) Hier ist nichts garantiert.
Sie sollten zusätzlich zur MAC-Adresse einige andere Eigenschaften von WMI in Betracht ziehen.
Die Vorgehensweise bei der Windows-Produktaktivierung besteht darin, Eigenschaften wie die MAC-Adresse (sowie andere identifizierende Informationen zur Karte selbst, z. B. PCI-Herstellerinformationen) sowie einige allgemeine Geräteeigenschaften (Festplattencontroller) zu prüfen , Bildschirmadapter) und begründen die Notwendigkeit einer Reaktivierung bei bestimmten Schwellenwerten. Wenn sich zu viele dieser Dinge ändern, ist eine Reaktivierung erforderlich.
Hier ist ein großartiger Artikel zum Thema und sollte Ihnen ein paar Denkanstöße geben, wie Sie sich bei der Auswahl guter Eigenschaften für Ihr eigenes Lizenzierungs- / Aktivierungssystem entscheiden können:
Wenn Ihre Hauptanforderung darin besteht, einen PC eindeutig zu identifizieren, dann sollten Sie einen Blick auf diese Frage . Die akzeptierte Antwort spricht über eine Lösung sowie die Fallstricke bei der Verwendung des MAC-Adressenidentifikator-Ansatzes
Hoffe, das hilft
Informationen zum Zugriff auf Netzwerkschnittstellendetails in .Net finden Sie in der NetworkInterface.GetPhysicalAddress
-Methode im Namensbereich System.Net.NetworkInformation
.
Die Verwendung ist ausführlich in MSDN .
Ich würde definitiv auf Der Link, den Ryan bereitgestellt hat , um sich auf eine MAC-Adresse zur Identifizierung zu verlassen.
Tags und Links .net c# networking