Laden...

Maschinen ID nicht eindeutig, Ideen?

Erstellt von baer999 vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.426 Views
B
baer999 Themenstarter:in
375 Beiträge seit 2007
vor 9 Jahren
Maschinen ID nicht eindeutig, Ideen?

Hallo,

ich verwende folgendes Snippet um eine Maschinen ID zu generieren. Jetzt habe ich das Problem, dass ich einen Computer habe, der einmal ID x und einmal ID y - sprich 2 versch. IDs generiert zu zwei versch. Zeitpunkten!

Kann sich das jemand erklären, ich dachte die Eigenschaften, die ich hier verwende, wären IMMER eindeutig ...
[WIN32_PROCESSOR und MACADRRESS]

thx !

        public static String GenerateMachineID()
        {
            var check = new[,]
            {
                {"Win32_NetworkAdapterConfiguration", "MACAddress"},
                {"Win32_Processor", "UniqueId"},
                {"Win32_Processor", "ProcessorId"},
                {"Win32_Processor", "Name"},
                {"Win32_Processor", "Manufacturer"}
            };

            //WMI query
            const string query = "SELECT {1} FROM {0}";
            const string queryex = " WHERE IPEnabled = 'True'";
            var sb = new StringBuilder();

            for (var i = 0; i < check.GetLength(0); i++)
            {
                using (var oWMI = new ManagementObjectSearcher(
                    string.Format(query, check[i, 0], check[i, 1]) + (i == 0 ? queryex : string.Empty)))
                {
                    foreach (var o in oWMI.Get())
                    {
                        var mo = (ManagementObject) o;
                        var result = mo[check[i, 1]] as string;
                        if (result != null) sb.AppendLine(result);
                        break;
                    }
                }
            }

            using (MD5 sec = new MD5CryptoServiceProvider())
            {
                var enc = new ASCIIEncoding();
                var bt = enc.GetBytes(sb.ToString());
                bt = sec.ComputeHash(bt);
                sb.Clear();
                foreach (byte t in bt)
                {
                    sb.AppendFormat("{0:X2}", t);
                }
            }

            return sb.ToString();
        }
P
1.090 Beiträge seit 2011
vor 9 Jahren

Dein Rechner hat pro Netzwerk Adapter eine MACAdresse, z.B. für LAN und WLAN, daher können die Unterschiede kommen. (Die MACAdresse lässt sich auch ändern).

Ansonsten mal mit dem Debugger schauen welche Werte unterschiedlich sind.

Sollte man mal gelesen haben:

Clean Code Developer
Entwurfsmuster
Anti-Pattern

B
baer999 Themenstarter:in
375 Beiträge seit 2007
vor 9 Jahren

Heißt das, dass der Unterschied am wahrscheinlichsten von der untersch. MAC Adresse kommt?

Wie kann ich sicherstellen, dass meine Methode, IMMER eine feste nimmt. Also immer die LAN Verbindung z.b.?

thx!

4.942 Beiträge seit 2008
vor 9 Jahren

Für deine MacAdresse mußt du halt noch weitere Parameter aus der Win32_NetworkAdapterConfiguration auswerten, z.B. "IPEnabled", s.z.B Using WMI Class in C#.
Woran sich ein LAN und WLAN-Adapter unterscheidet, kann ich auf Anhieb leider nicht sagen...

Update: Vllt. hilft dir how to get list of wired LAN connections ignoring Wifi (wireless) LAN connection in C#?

16.842 Beiträge seit 2008
vor 9 Jahren

Du musst Dir schon selbst ausdenken, wie so ein Algorithmus funktioniert, der einen eindeutigen Wert hat.
Netzwerk-Adapter sind hier halt keine gute Quelle, da diese eben nicht eindeutig sind. Auch eine LAN-Verbindung kann mehrfach existieren, zB über Treiber von VMware/VirtualBox oder einfach weil der PC mehrere Adapter hat.
Auch der Name deren kann sich ändern, wenn Du zB einen Adapter deaktivierst oder von Hand umbenennst.

Du musst Dir da schon eindeutige Werte suchen.
Und dann kannst Du auch sicherstellen, dass der Wert eindeutig und nachvollziehbar ist.