簡體   English   中英

如何在C中唯一標識機器?

[英]How can I uniquely identify a machine in C?

我想在C中唯一地識別一台機器。

以下是具有序列號的源,但不保證它們是唯一的或存在的(如可移動HDD或網卡)。

  • CPU:我正在使用cpuid指令,但是,除Pentium 3之外的任何處理器都沒有實現序列號,即不相關。 我可以使用處理器簽名,但這對於每個處理器都不是唯一的。
  • 硬盤:?
  • BIOS :?
  • 主板:?
  • MAC地址:通過系統函數調用。

對於所有問號,我如何獲得C中的序列號? 如果您使用系統相關解決方案回答,請同時提供Windows / * nix。 此外,對於Windows,請不要WMI。

謝謝!

一般來說,您需要識別組件的組合,並了解組件可以並且將隨時間發生變化。 您需要容差算法來做出明智的猜測,了解更改何時表示您之前識別的計算機的更新,或者您之前未見過的新計算機。

一種簡單的方法是枚舉您在確定要處理的機器時列出的所有組件,並與之前看到的機器的先前快照進行比較。 如果序列號匹配,你可以非常安全地假設你正在處理同一台機器(當然有人可能會將硬盤轉移到新機器上......但是,這是一種簡單的方法。等級啟發式算法要復雜得多。

專門用於軟件激活的這種方法的使用由積極執行的專利涵蓋,因此請小心您正在做什么。 如果您確實希望這樣做以保護您的軟件,那么使用商業解決方案可能會更好。 有些很實惠。 谷歌“軟件激活”的選項。

以下是獲取特定系統信息的一些參考(並非所有都是特定的C烹飪書,但在每種情況下都可以使用C)。

HDD Windows http://www.codeproject.com/KB/cs/hard_disk_serialno.aspx

HDD Linux http://www.webmasterworld.com/forum40/957.htm

BIOS Windows http://msdn.microsoft.com/en-us/library/aa394077(v=vs.85).aspx

BIOS Linux http://www.dufault.info/blog/a-better-way-to-find-your-bios-version-in-linux/

MAC地址Windows C ++:在Vista上獲取網絡適配器的MAC地址?

MAC地址Linux http://www.linuxquestions.org/questions/programming-9/linux-determining-mac-address-from-c-38217/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM