2010-08-06 130 views
4

我知道這是一個很長的鏡頭,但有什麼方法可以在linux中獲得序列號或唯一可識別的信息嗎?系統調用獲得Linux中的機器序列號(用java編程)

如果是這樣如何編程到Java程序中?

在上下文中,我需要構建一個鎖定到一臺機器的許可證驗證程序,如果您有任何其他建議,歡迎您使用。

在此先感謝

回答

4

這是Lennart Poeterring在blog post關於身份證號碼的摘錄。它是關於唯一的ID,不一定對有關唯一ID與安全:

  • /SYS /班/ DMI/ID/product_uuid:主板產品UUID,集科 板製造商和編碼在 BIOS DMI信息中。它可以用 來標識主板,只有 主板。當用戶 替換主板時它會改變。此外,經常有足夠的BIOS製造商寫入虛假 連續劇。另外,它是x86專用的 。未經授權的 用戶的訪問被禁止。因此它是 少許一般用途。

  • CPUID/EAX = 3 CPU序列號:CPU UUID,由CPU製造商 設置並在CPU芯片上編碼。它可能是 用於標識一個CPU和只有一個CPU。 當用戶替換 CPU時,它會發生變化。此外,大多數現代CPU不再執行此功能 ,並且 較舊的計算機往往會默認禁用此 選項,可通過 BIOS Setup選項進行控制。另外,它是x86專用的 。因此這也是 少量通用。

所以/ SYS /班/ DMI/ID/product_uuid似乎alidation守護是一個不錯的人選,但需要運行作爲特權用戶驗證代碼。完整的博客文章真的是一個有價值的閱讀!

0

我使用MAC地址作爲唯一的ID。

InetAddress address = InetAddress.getByName("192.168.1.1"); 
NetworkInterface ni = NetworkInterface.getByInetAddress(address); 
byte[] mac = ni.getHardwareAddress(); 
+0

在1.6之前,獲取MAC地址非常棘手,IIRC。我認爲本機代碼或解析命令行輸出是必需的。 – 2010-08-06 07:06:37

0

Mac地址可以更改。檢查this。此外,Mac-Address綁定到一個接口(以太網/無線/ HPNA等)。所以一個聰明的用戶可以輕鬆地調整它。在stackoverflow上討論了類似的問題。檢查this

2

除非您實際上可以獲得硬件加密狗給用戶機器,否則無法設計出無法繞開的複製保護設置。

如果你只是想告訴用戶「嘿,你已經在你的網絡上的另一臺機器上運行這個許可證,獲得另一個許可證」,那麼一個好辦法是做網絡廣播,以便他們可以找到另一個。最可靠的最簡單的方法是使用Zeroconf和jmdns庫。

如果你想可以肯定,該方案只被在一個地方與給定的序列號運行,與普通PC的唯一能做的,就是爲了讓程序調用中央母艦在互聯網上,而正在運行並註冊它正在使用的地方。母船然後返回包含需要運行的重要代碼的片段。你可能很可能使用Java WebStart來實現這一點。

+0

我忘記提到我的問題,單位不能通過互聯網回家 – Candyfloss 2010-08-06 10:38:18

+0

然後,我會去商業解決方案,如果你需要這是愚蠢的證明。 – 2010-08-06 13:21:39

0

MAC地址不是一個好的選擇,因爲它可以在某些系統上進行更改。如果你想留在本地Java中,那麼邏輯系統參數(如機器ID和用戶登錄帳戶)是你唯一的選擇。在某些情況下,機器名稱具有足夠的安全性,因爲一個網絡中不能有兩臺機器具有相同的名稱。