【发布时间】:2011-02-19 23:46:39
【问题描述】:
问题:我必须为每个联网客户端提供唯一 ID,这样:
- 一旦客户端软件安装在目标计算机上,它 (ID) 应该会持续存在,并且如果软件重新安装在同一台计算机和相同的操作系统安装上,它应该会持续存在,
- 如果硬件配置以大多数方式修改(除了更换主板),它应该不会改变
- 当安装了客户端软件的硬盘被克隆到具有相同硬件配置(或尽可能相似)的另一台计算机上时,客户端软件应该知道这种变化。
一点解释和一些背景故事:
这个问题基本上是一个古老的问题,也涉及软件复制保护的主题,因为这里提到了该领域使用的一些机制。在这一点上我应该清楚,我不是在寻找复制保护方案。请继续阅读。 :)
我正在开发一个应该在本地网络中运行的客户端-服务器软件。我必须解决的问题之一是识别网络中的每个唯一客户端(问题不大),以便我可以将某些属性应用于每个特定客户端,在特定的部署生命周期内保留和强制执行这些属性客户。
在寻找解决方案时,我意识到以下几点:
- Windows 激活系统使用某种对硬件修改极为敏感的重指纹机制,
- 磁盘映像软件沿所有卷 ID(格式化时绑定到每个分区)以及在安装过程中、首次运行期间或以任何其他方式生成的自定义唯一 ID 进行复制,这在本质上是严格的软件,并存储在注册表或硬盘上,所以很容易混淆两者。
此类问题的明显选择是找出 BIOS 标识符(虽然不能 100% 确定这是否在相同的主板型号中是唯一的),因为这是我唯一可以依赖的不重复的东西,通过克隆传输,并且无法更改(至少不能通过使用某些用户空间程序)。其他一切都失败了,要么不可靠(MAC 克隆,有人吗?),要么要求太高(因为它对配置更改过于敏感)。
我想问的子问题是,我在架构方面做得对吗?也许有更好的工具来完成我必须完成的任务......
我想到的另一种方法类似于握手机制,其中服务器维护连接的客户端 ID 的内部查找表(在任何给定时刻,它甚至可以完全基于软件且不唯一),并告诉如果在连接时提供了重复的 ID,则客户端在握手期间提供不同的 ID。不幸的是,这种方法不能很好地满足在生命周期内将属性绑定到特定客户端的要求之一。
【问题讨论】:
-
嗨先生,一个有趣的问题,我做了一些研究,因为它引起了我的兴趣。但是我想到了一些事情,从不同的角度来看,您是否正在寻找一种在连接到服务器后唯一识别用户的方法?如果它可以在用户级别,而不是机器级别 - 您可以自己在服务器端生成 ID 并存储在机器上吗?类似于 session id 如何在 Web 应用程序中跟踪用户并存储 cookie(但将其保留更长时间)?
标签: windows client-server uniqueidentifier bios hardware-id