問題是,某些已接受的答案已建議將MAC地址作為唯一的標識符,這是完全不正確的。其他一些答案建議使用似乎更合乎邏輯的各種組件的組合。但是,在使用組合的情況下,應考慮哪個組件自然不可能經常更改。幾天前,我們為軟件許可問題開發了一個密鑰生成器,其中我們使用CPUID和MAC的組合來唯一地標識Windows pc,直到實際測試,我們認為我們的方法足夠好。具有諷刺意味的是,當我們進行測試時,我們發現三臺計算機使用我們的密鑰生成器返回了相同的ID!那么,真的有什么方法可以唯一地識別任何一臺計算機嗎?現在,我們只需要使我們的密鑰生成器在Windows pc上運行即可。由于我們的系統是在.net上開發的,因此使用c#的某種方式(如果可能的話)會很棒。更新:很抱歉造成一些混亂和明顯的錯誤警報。我們在檢索硬件信息的方法中發現了一些錯誤。最初,我想刪除此問題,因為現在我自己的困惑已經消失,并且我確實相信兩個或多個組件的組合足以識別計算機。但是,后來我決定保留它,因為我認為我應該弄清楚是什么引起了該問題,因為將來同樣的事情可能會傷害其他人。這是我們正在做的(不包括其他代碼):我們正在使用一個getManagementInfo函數來檢索MAC和處理器IDprivate String getManagementInfo(String StrKey_String, String strIndex) { String strHwInfo = null; try { ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from " + StrKey_String); foreach (ManagementObject share in searcher.Get()) { strHwInfo += share[strIndex]; } } catch (Exception ex) { // show some error message } return strHwInfo; } 然后在需要的地方使用該函數檢索MAC地址string strMAC = getManagementInfo("Win32_NetworkAdapterConfiguration", "MacAddress");并檢索ProcessorIDstring strProcessorId = getManagementInfo("Win32_Processor", "ProcessorId");此時,strMAC如果存在多個MAC地址,則將包含多個MAC地址。我們只取了一個17個字符(12個MAC數字和5個冒號)。strMAC = strMAC.Length > 17 ? strMAC.Remove(17) : strMAC;這是我們犯錯的地方。因為getManagementInfo("Win32_NetworkAdapterConfiguration", "MacAddress")返回的是一些確實在使用的額外MAC地址。例如,當我們在命令提示符下逐個getmac命令搜索MAC地址時,它會為每臺PC顯示一個或兩個不同的MAC地址。但是getManagementInfo("Win32_NetworkAdapterConfiguration", "MacAddress")返回了四到五個MAC地址,其中一些地址對于所有計算機都是相同的。由于我們只是獲取了函數返回的第一個MAC地址,而不是檢查其他任何內容,因此strMAC偶然獲取了相同的MAC地址。但是,對于相同的處理器ID問題,我絕對正確。當我們wmic cpu get ProcessorId在命令提示符下輸入命令時,這三個命令都返回了相同的處理器ID 。現在我們決定使用主板序列號而不是處理器ID來與MAC地址結合使用。我認為可以通過這種方式達到我們的目的,如果在某些情況下不這樣做,那么在少數情況下我們應該放手。
- 3 回答
- 0 關注
- 824 瀏覽
添加回答
舉報
0/150
提交
取消