2011-02-06 105 views
3

在vb.net或java中是否有任何代碼可以獲得計算機ID >>? 我想編寫一個程序,可以得到計算機的ID,以使像微軟這樣的軟件許可做到了嗎?如何獲取電腦ID?

在此先感謝

馬卡拉

+2

你說的計算機的ID是什麼意思? – Alxandr 2011-02-06 04:47:43

+0

[基於Java的獨特計算機ID硬件]的可能的重複(http://stackoverflow.com/questions/3597237/unique-computer-id-hardware-based-in-java) – 2011-02-06 04:56:06

+1

我認爲他的意思是像使用WMI閱讀主板序列號 - 查看上面鏈接的SO問題。 – 2011-02-06 04:57:46

回答

7

首先,微軟許可不以這種方式工作。

他們有一個關鍵是在他們身邊產生的。當他們向您出售軟件副本時,他們會給您一個密鑰。輸入密鑰後,軟件會將一些加密的TCP數據包發送回MS,以便確定密鑰現在處於使用狀態並增加使用次數。然後它會在您的系統上創建一個很好的隱藏文件,其中包含該密鑰的授權。

這些都不涉及獲得「計算機的ID」。現在,MS(至少在其一種許可模式下)確實拍攝了包括處理器類型,硬盤驅動器和主板製造商/型號的系統的快照,以便識別組件是否已經足夠改變以觸發可能檢查計算機許可是否需要重新驗證。

這讓我們回想起計算機系統中沒有單個「ID」的想法。最後一次嘗試是由英特爾(我相信?)他們的PII處理器。然而,公衆的反彈足以讓他們停止在芯片上添加序列號。

可以做的第二件事是嘗試讀取MAC地址;但網卡變化不夠,以至於陷入了陷阱。

我強烈建議你研究其他做許可密鑰的機制,如果這真的是你想要的。

2

您可以使用此功能時,它會返回的mac地址:

public String macname() throws IOException { 
    String mac = "null"; 
    String[] getmac = new String[] { "cmd", "/c", "getmac /NH" }; 
    Process pnew = Runtime.getRuntime().exec(getmac); 
    BufferedReader newin = new BufferedReader(new InputStreamReader(
      pnew.getInputStream())); 
    String line1 = ""; 
    String ab = ""; 

    while ((line1 = newin.readLine()) != null) { 
     ab = ab + line1; 
    } 
    int in = ab.indexOf(' '); 
    mac = ab.substring(0, in); 
    return mac; 
}