检测指纹为物理服务器、虚拟服务器、共享主机服务器和原生云 Web 应用程序生成许可证密钥
Posted
技术标签:
【中文标题】检测指纹为物理服务器、虚拟服务器、共享主机服务器和原生云 Web 应用程序生成许可证密钥【英文标题】:Detect the Finger Print generating the Licence key for Physical server , Virtual server , shared hosting server and Native Cloud Web App 【发布时间】:2016-06-23 22:26:59 【问题描述】:我正在研究用于激活 Web 应用程序的许可证密钥。可以部署在物理服务器、虚拟服务器、共享托管服务器和(Azure云托管)原生云服务器上。此产品一次发给一位用户。
我创建了窗口应用程序,它跟踪硬件指纹当前服务器并创建 Web 应用程序的许可证密钥。其中存储硬件指纹,许可证密钥发布的时间段。这在物理服务器中很好。它不会改变。
这是检测硬件打印的代码 Link 我正在检测
-
制造商
BiosId
磁盘ID
BaseId
视频ID
MacId
现在的问题是我无法将这种方法用于虚拟服务器和 (Azure 云托管) 本机云服务器。
现在我正在尝试获取
-
静态IP地址
域名
系统的 GUID
文件路径的位置(应用程序的安装位置)
通过使用这四个,我创建了产品密钥。但我仍然不知道这个组件是否适合创建唯一的许可证密钥。
我发现了一些限制
-
如果 (Azure 云托管) 云服务器 IP 地址已更改。它没有静态IP
地址
如何处理内部 IP 地址和外部 IP 地址
我只需要知道我可以使用哪个组件来创建密钥。或者当硬件组件在云和虚拟服务器上发生变化时我可以使用什么策略。
【问题讨论】:
【参考方案1】:每个系统都有唯一的 BIOS UUID。这在所有虚拟机和系统中都是独一无二的。
下面这个方法是我们如何检测系统在虚拟电脑中运行的方法
public static bool detectVPC()
using (var searcher = new System.Management.ManagementObjectSearcher("Select * from Win32_ComputerSystem"))
using (var items = searcher.Get())
foreach (var item in items)
string manufacturer = item["Manufacturer"].ToString().ToLower();
if ((manufacturer == "microsoft corporation" && item["Model"].ToString().ToUpperInvariant().Contains("VIRTUAL"))
|| manufacturer.Contains("vmware")
|| item["Model"].ToString() == "VirtualBox")
return true;
return false;
检测UUID的代码:
public static string UUID
get
string uuid = string.Empty;
ManagementClass mc = new ManagementClass("Win32_ComputerSystemProduct");
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject mo in moc)
uuid = mo.Properties["UUID"].Value.ToString();
break;
return uuid;
这解决了我的问题。我测试了这段代码
-
在虚拟电脑中
在物理 PC 中
复制虚拟硬盘
创建了硬盘克隆
我确实在天蓝色云中测试了这段代码并共享托管服务器
【讨论】:
以上是关于检测指纹为物理服务器、虚拟服务器、共享主机服务器和原生云 Web 应用程序生成许可证密钥的主要内容,如果未能解决你的问题,请参考以下文章