65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.08/5 (4投票s)

2007年9月20日

CPOL

2分钟阅读

viewsIcon

40544

downloadIcon

718

本文介绍如何使用 System.Net.WebRequest 和 WebResponse 联系服务器并获取 Windows 应用程序的注册密钥。

Screenshot - registration.jpg

引言

在行业中,有时需要收集一些唯一的机器信息并将其发送到服务器,以便根据硬件信息创建唯一的注册密钥。 当软件需要按 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 上添加虚拟目录的屏幕截图。

Screenshot - virtual3.jpg

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

Screenshot - virtual2.jpg

关注点

为了测试,我还尝试从另一台 PC 连接到服务器:(例如:*http://10.10.42.135/Registration/Registration.aspx*),它仍然有效 - 防火墙没有抱怨:)。
我没有尝试连接到我们网络之外的服务器,但我想那也应该有效...

要收集特定于机器的信息,请使用这篇文章中的代码。

历史

  • 2007 年 9 月 20 日:首次发布
© . All rights reserved.