我使用.Net框架在C#中开发了一些工具,我正在考虑迁移到Mono。基于兼容性分析器工具(MOMA),唯一的兼容性问题是许可代码:
我使用Window的序列号和其他一些东西来生成计算机ID,然后我用它来生成和管理我的许可证。
显然,Windows将无法在Linux或Mac上使用,因此我需要另一种方法来生成计算机ID。
我可以在单声道中使用什么来创建一个相当可靠的计算机ID?
答案 0 :(得分:2)
使用MAC地址:
Get MAC Address in linux using mono
对于给定的网络接口而言,这应该是唯一的,这将唯一地标识该机器。
另请参阅单声道中的this thread discussing the pitfalls and issues related to DRM。
答案 1 :(得分:2)
您可以使用CPUID和硬盘序列号的组合。
至于你的代码,使用单行代码不会有一种优雅的方式。您必须通过Environment.OSVersion检查您正在运行的平台。然后基于此,分支您的代码以执行特定于系统的访问。例如,要获取CPUID / hdd序列号,请使用WMI查询;或者解析 hdparm -I / dev / hda 的输出并从那里开始。
答案 2 :(得分:1)
您可以使用Microsoft检查Windows XP activation的硬件的一部分。他们检查了10个项目
当(重新)安装/激活XP时,它会联系他们的服务器,如果上述7个或更多项目未更改,则无需与任何人通话即可激活。
我个人建议不要使用MAC地址。正如您所提到的,它可以很容易地改变。此外,大多数机器现在有两个或更多网卡(有线和无线)。虚拟化会变得更糟,因为MAC可以比物理更容易地更改(你对虚拟环境的许可有何不同?)
另一个选项是使用UUID的root file system,而不是检查所有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"