中国服务器网

服务器问题集锦,包括 Linux(Ubuntu, Centos,Debian等)和Windows Server服务器

生成唯一硬件ID的可靠方法

问题:我必须为每个联网的客户端提供唯一的ID,例如: 一旦在目标计算机上安装了客户端软件,它应该保持不变(ID),如果软件重新安装在同一台计算机和同一个OS安装中,它应该继续保留, 如果在大多数情况下修改了硬件configuration(不包括更换主板) 当安装有客户端软件的硬盘驱动器被克隆到具有相同硬件configuration的另一台计算机(或尽可能相似)时,客户端软件应该知道该更改。 一点点的解释和一些背景故事: 这个问题基本上是一个古老的问题,也涉及软件复制保护的主题,因为这里提到了一些在这方面使用的机制。 我现在应该清楚,我不是在寻找一个防拷贝scheme。 请继续阅读。 🙂 我正在开发一个应该在本地networking中工作的客户端 – 服务器软件。 我必须解决的一个问题是要识别networking中的每个独特的客户端(不是那么多的问题),以便我可以将某些属性应用于每个特定的客户端,在特定的部署生命周期中保留和执行这些属性客户。 当我正在寻找解决scheme时,我意识到以下几点: Windows激活系统使用某种对硬件修改非常敏感的重指纹机制, 磁盘映像软件在安装过程中,首次运行时或以任何其他方式复制所有卷ID(在格式化时与每个分区绑定),以及自定义,唯一生成的ID,并且存储在registry中或在硬盘上,所以很容易混淆两个。 这种问题的明显select是找出BIOS标识符(不是100%确定是否通过相同的主板型号是唯一的),因为这是我可以依赖的唯一不是重复的,通过克隆,并且不能改变(至less不能使用一些用户空间程序)。 一切都失败了,要么是不可靠的(MAC克隆,任何人?),要么太苛刻(对configuration的变化太敏感)。 我想问的问题是,我正确地做,架构明智吗? 也许有一个更好的工具,我必须完成的任务… 我想到的另一种方法是类似握手机制,其中服务器维护一个连接的客户端ID的内部查找表(甚至可以完全基于软件,在任何特定时刻都是非唯一的),并告诉客户端如果在连接时提供重复的ID,则在握手期间拿出一个不同的ID。 不幸的是,这种方法并不能很好地满足在特定客户生命周期中将特性绑定到特定客户端的要求。