联系注册服务器以获得基于唯一机器 ID 的唯一注册密钥






4.08/5 (4投票s)
本文介绍如何使用 System.Net.WebRequest 和 WebResponse 联系服务器并获取 Windows 应用程序的注册密钥。

引言
在行业中,有时需要收集一些唯一的机器信息并将其发送到服务器,以便根据硬件信息创建唯一的注册密钥。 当软件需要按 PC 注册时,就需要这样做。 因此,我们可以收集安装了软件的 PC 的机器信息,并颁发一个仅对该机器有效的注册密钥。
背景
使用 WMI 功能,可以收集特定于机器的硬件信息。
在 .NET 中,可以使用 System.Management.ManagementClass
来实现此目的。 (这在这篇文章中解释过。)
当我们尝试将此信息发送到服务器时,问题就出现了。 由于从 WinXP 开始的操作系统中存在防火墙,如果我们尝试从我们的应用程序向外部服务器发送数据,防火墙会弹出一个警告,通知用户该应用程序正在尝试发送数据,并询问用户是否希望继续或阻止该应用程序。 (如果本地网络通过防火墙连接到 Internet,并且防火墙配置为阻止除 HTTP 流量之外的任何流量,则此方法也会失败。)
因此,解决方案以 HTTP 的形式出现(即我们必须通过 HTTP 发送数据)。
在 .NET 中,这可以通过 System.Net.WebRequest
或使用 Web 服务轻松实现。 本文使用 WebRequest
方法。
Using the Code
在类 ContactRegistationServer
(UserRegistration
项目) 中,您会注意到我们正在创建一个 WebRequest
并通过 QueryString
传递硬件信息。
WebResponse registrationKey = null;
String url_string = "https:///Registration/Registration.aspx"
+ "?CPU=" + System.Web.HttpUtility.UrlEncode(hardwareInfo.cpuID)
+ "&BIOS=" + System.Web.HttpUtility.UrlEncode(hardwareInfo.biosID)
+ "&MB=" + System.Web.HttpUtility.UrlEncode(hardwareInfo.baseID)
+ "&DISK=" + System.Web.HttpUtility.UrlEncode(hardwareInfo.diskID)
+ "&MAC=" + System.Web.HttpUtility.UrlEncode(hardwareInfo.macID)
+ "&VIDEO=" + System.Web.HttpUtility.UrlEncode(hardwareInfo.videoID);
try
{
WebRequest requestRegistration = WebRequest.Create(url_string);
registrationKey = requestRegistration.GetResponse();
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show("Failed connecting to server");
return;
}
在服务器上(参考项目“TestPage” *Registration.aspx.cs*),从客户端接收到的 QueryString
被检索,并生成唯一的注册密钥并返回给用户。
//Call the Foolproof Registration Key algorithm :)
TheFoolProofRegistrationKey regKey = new TheFoolProofRegistrationKey();
String key = regKey.getRegistrationKey(Request.QueryString["CPU"]);
Response.Write(key);
注意:如果您决定下载并运行该程序
如果您决定下载并试用该应用程序,请务必在您的本地 Web 服务器上创建一个名为“Registration”的虚拟文件夹。 这是必需的,因为 WebRequest
使用以下 URL:https:///Registration/Registration.aspx(否则将文件复制到服务器根文件夹下的名为*Registration*的文件夹中)。
仅供新手使用,我附上了一些关于如何在 IIS 上添加虚拟目录的屏幕截图。

最后,您应该得到如下结果

关注点
为了测试,我还尝试从另一台 PC 连接到服务器:(例如:*http://10.10.42.135/Registration/Registration.aspx*),它仍然有效 - 防火墙没有抱怨:)。
我没有尝试连接到我们网络之外的服务器,但我想那也应该有效...
要收集特定于机器的信息,请使用这篇文章中的代码。
历史
- 2007 年 9 月 20 日:首次发布