問題是,某些已接受的答案已建議將MAC地址作為唯一的標(biāo)識(shí)符,這是完全不正確的。其他一些答案建議使用似乎更合乎邏輯的各種組件的組合。但是,在使用組合的情況下,應(yīng)考慮哪個(gè)組件自然不可能經(jīng)常更改。幾天前,我們?yōu)檐浖S可問題開發(fā)了一個(gè)密鑰生成器,其中我們使用CPUID和MAC的組合來唯一地標(biāo)識(shí)Windows pc,直到實(shí)際測(cè)試,我們認(rèn)為我們的方法足夠好。具有諷刺意味的是,當(dāng)我們進(jìn)行測(cè)試時(shí),我們發(fā)現(xiàn)三臺(tái)計(jì)算機(jī)使用我們的密鑰生成器返回了相同的ID!那么,真的有什么方法可以唯一地識(shí)別任何一臺(tái)計(jì)算機(jī)嗎?現(xiàn)在,我們只需要使我們的密鑰生成器在Windows pc上運(yùn)行即可。由于我們的系統(tǒng)是在.net上開發(fā)的,因此使用c#的某種方式(如果可能的話)會(huì)很棒。更新:很抱歉造成一些混亂和明顯的錯(cuò)誤警報(bào)。我們?cè)跈z索硬件信息的方法中發(fā)現(xiàn)了一些錯(cuò)誤。最初,我想刪除此問題,因?yàn)楝F(xiàn)在我自己的困惑已經(jīng)消失,并且我確實(shí)相信兩個(gè)或多個(gè)組件的組合足以識(shí)別計(jì)算機(jī)。但是,后來我決定保留它,因?yàn)槲艺J(rèn)為我應(yīng)該弄清楚是什么引起了該問題,因?yàn)閷硗瑯拥氖虑榭赡軙?huì)傷害其他人。這是我們正在做的(不包括其他代碼):我們正在使用一個(gè)getManagementInfo函數(shù)來檢索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; } 然后在需要的地方使用該函數(shù)檢索MAC地址string strMAC = getManagementInfo("Win32_NetworkAdapterConfiguration", "MacAddress");并檢索ProcessorIDstring strProcessorId = getManagementInfo("Win32_Processor", "ProcessorId");此時(shí),strMAC如果存在多個(gè)MAC地址,則將包含多個(gè)MAC地址。我們只取了一個(gè)17個(gè)字符(12個(gè)MAC數(shù)字和5個(gè)冒號(hào))。strMAC = strMAC.Length > 17 ? strMAC.Remove(17) : strMAC;這是我們犯錯(cuò)的地方。因?yàn)間etManagementInfo("Win32_NetworkAdapterConfiguration", "MacAddress")返回的是一些確實(shí)在使用的額外MAC地址。例如,當(dāng)我們?cè)诿钐崾痉轮饌€(gè)getmac命令搜索MAC地址時(shí),它會(huì)為每臺(tái)PC顯示一個(gè)或兩個(gè)不同的MAC地址。但是getManagementInfo("Win32_NetworkAdapterConfiguration", "MacAddress")返回了四到五個(gè)MAC地址,其中一些地址對(duì)于所有計(jì)算機(jī)都是相同的。由于我們只是獲取了函數(shù)返回的第一個(gè)MAC地址,而不是檢查其他任何內(nèi)容,因此strMAC偶然獲取了相同的MAC地址。但是,對(duì)于相同的處理器ID問題,我絕對(duì)正確。當(dāng)我們wmic cpu get ProcessorId在命令提示符下輸入命令時(shí),這三個(gè)命令都返回了相同的處理器ID 。現(xiàn)在我們決定使用主板序列號(hào)而不是處理器ID來與MAC地址結(jié)合使用。我認(rèn)為可以通過這種方式達(dá)到我們的目的,如果在某些情況下不這樣做,那么在少數(shù)情況下我們應(yīng)該放手。
真的有什么方法可以唯一地識(shí)別任何計(jì)算機(jī)嗎?
揚(yáng)帆大魚
2019-12-03 14:48:24