C# mac地址如何变化?

C# mac地址如何变化?,c#,C#,我的软件有一个相当粗糙的许可证密钥,它会找到一台机器的所有mac地址并对它们进行加密,然后将它们与注册表中保存的加密值进行比较。如果注册表中的值与我刚找到的任何值匹配,则软件将加载。我希望MAC地址的值总是相同的,但对于一些机器,情况并非如此。有人能解释为什么他们的MAC地址不固定,或者如何克服这个问题吗 谢谢 //// GET MAC ADDRESS String sMacAddress = String.Empty; ManagementSco

我的软件有一个相当粗糙的许可证密钥,它会找到一台机器的所有mac地址并对它们进行加密,然后将它们与注册表中保存的加密值进行比较。如果注册表中的值与我刚找到的任何值匹配,则软件将加载。我希望MAC地址的值总是相同的,但对于一些机器,情况并非如此。有人能解释为什么他们的MAC地址不固定,或者如何克服这个问题吗

谢谢

        //// GET MAC ADDRESS
        String sMacAddress = String.Empty;
        ManagementScope theScope = new ManagementScope("\\\\" +Environment.MachineName + "\\root\\cimv2");
        DGCSLogger.log.Trace("Management scope");

        StringBuilder theQueryBuilder = new StringBuilder();

        theQueryBuilder.Append("SELECT MACAddress FROM Win32_NetworkAdapter");
        ObjectQuery theQuery = new ObjectQuery(theQueryBuilder.ToString());

        DGCSLogger.log.Trace("Creating searcher");

        ManagementObjectSearcher theSearcher = new ManagementObjectSearcher(theScope, theQuery);
        DGCSLogger.log.Trace("Creating collection");
        ManagementObjectCollection theCollectionOfResults = theSearcher.Get();

        DGCSLogger.log.Trace("Got management objects");

        //// GET VALUE FROM REGISTRY
        String sSavedScrambled = RegistryHelper.GetCurrentUserValue(@"Software\VB and VBA Program Settings\FMPos\settings", "LicenceKey");
        String sSavedLicenceKey = String.Empty;
        if (sSavedScrambled != null)
            sSavedLicenceKey = DGCS.Common.Password.UnScramblePassword(sSavedScrambled);

        String sMacNoLicenceKey = String.Empty;
        String sMacNo  = String.Empty;


         ///// COMPARE VALUES WITH REGISTRY VALUE
        foreach (ManagementObject theCurrentObject in theCollectionOfResults)
        {
            DGCSLogger.log.Trace("foreach object");

            if (theCurrentObject["MACAddress"] != null)
            {
                DGCSLogger.log.Trace("foreach object: " + theCurrentObject["MACAddress"].ToString().Substring(0, 5));

                String macAdd =  theCurrentObject["MACAddress"].ToString();

                sMacNo = DGCS.Common.Password.ScrambleMacNumber(theCurrentObject["MACAddress"].ToString());
                sMacNoLicenceKey = DGCS.Common.Password.CreateMacNoPassword(sMacNo);

                DGCSLogger.log.Trace(": " + theCurrentObject["MACAddress"].ToString().Substring(0, 5));

                if (sMacNoLicenceKey.Trim() == sSavedLicenceKey.Trim())
                    lkCheck.HasLicenceKey = true;
            }
        }

各种可能的原因:

  • 他们可能换了网卡
  • WMI枚举可能会以不同的顺序返回它们(我看不到任何排序)
  • 他们可能会改变MAC地址(是的)

  • 这就是为什么MAC地址实际上不是创建许可证密钥的好参考。

    “有人能解释为什么MAC地址不是固定的吗”-因为它们不是固定的。因此,请咨询机器的维护人员。这可能是因为多种原因。“或如何克服此问题?”-请参阅关于“如何实现基于硬件的软件许可证密钥”的300多个问题。我已将查询更改为:theQueryBuilder.Append(“从Win32_NetworkAdapter配置中选择MACAddress,其中iEnabled=true”);这将其限制为一个网络适配器。这确实意味着,如果他们更改netwrok适配器,则需要重新输入许可证密钥,但至少这意味着我目前正在与常量值进行比较。