【发布时间】:2014-06-02 06:14:24
【问题描述】:
我使用 .Net 框架在 C# 中开发了一些工具,并且我正在考虑迁移到 Mono。基于兼容性分析工具 (MOMA),唯一的兼容性问题是许可代码:
我使用 Window 的序列号和其他一些东西来生成一个计算机 ID,然后我用它来生成和管理我的许可证。
显然,Windows 在 Linux 或 Mac 上不可用,因此我需要另一种方法来生成计算机 ID。
我可以在单声道中使用什么来创建一个相当可靠的计算机 ID?
【问题讨论】:
我使用 .Net 框架在 C# 中开发了一些工具,并且我正在考虑迁移到 Mono。基于兼容性分析工具 (MOMA),唯一的兼容性问题是许可代码:
我使用 Window 的序列号和其他一些东西来生成一个计算机 ID,然后我用它来生成和管理我的许可证。
显然,Windows 在 Linux 或 Mac 上不可用,因此我需要另一种方法来生成计算机 ID。
我可以在单声道中使用什么来创建一个相当可靠的计算机 ID?
【问题讨论】:
使用 MAC 地址:
Get MAC Address in linux using mono
这对于给定的网络接口应该是唯一的,它将唯一标识机器。
另外,请参阅单声道 this thread discussing the pitfalls and issues related to DRM。
【讨论】:
您可以使用 CPUID 和硬盘序列号的组合。
至于您的代码,单行不会有一种优雅的方式来执行此操作。您必须通过Environment.OSVersion 检查您在哪个平台上运行。然后基于此,分支您的代码以进行特定于系统的访问。例如,要获取 CPUID/hdd 序列号,请使用 WMI 查询;或解析 hdparm -I /dev/hda 的输出并从那里开始。
【讨论】:
您可以使用 Microsoft 检查 Windows XP 硬件的部分内容activation。他们检查了 10 个项目
当 XP 被(重新)安装/激活时,它会联系他们的服务器,如果上述 7 项或更多项未更改,它将激活而无需与任何人交谈。
我个人建议不要使用 MAC 地址。正如你提到的,它可以很容易地改变。此外,大多数机器现在都有两个或更多网卡(有线和无线)。虚拟化变得更糟,因为 MAC 可以比物理 MAC 更容易更改(您是否为虚拟环境提供不同的许可?)
另一个选项是使用root file system 的UUID,而不是检查所有10 个硬件组件。这样做的缺点是,如果驱动器出现问题,则需要重新获取许可证。
sudo blkid
/dev/sda1: TYPE="ntfs" UUID="72C0DE8EC0DE57C5" LABEL="windows"
/dev/sda2: UUID="30fcb748-ad1e-4228-af2f-951e8e7b56df" SEC_TYPE="ext2" TYPE="ext3"
/dev/sda5: TYPE="swap" UUID="8c4e69f8-5074-42c0-8134-0b2429c4c02c"
/dev/sdb1: SEC_TYPE="msdos" UUID="4848-E35A" TYPE="vfat"
【讨论】: