利用Web服务在线生成软件注册码

通过客户端的网卡号和机器名生成一个软件注册码,该注册码通过Web服务中的方法生成。运行程序时,将会自动获取客户端的网卡号和机器名,单击“生成注册码”按钮,将会调用Web服务中的生成注册码的方法实现生成注册码并返回。当单击“注册”按钮时,将调用Web服务中的分解注册码的方法,将注册码分解出网卡号、机器名和所获取的网卡号、机器名对比如果正确说明注册成功。实例运行结果如图1所示。

利用Web服务在线生成软件注册码

 关键技术

本实例主要用到的关键技术如下:

(1)获取客户端IP

HttpRequest类中的UserHostAddress属性用来获取远程客户端的IP主机地址,该属性的语法如下。

返回值:String类型,表示远程客户端的IP地址。

(2)获取网卡号

在ASP.NET中获取客户端网卡号,首先需要获取到客户端的IP地址,在使用进程执行nbtstat –A IPAddress命令获取到NetBIOS名称表再使用正则表达式截取到网卡号。

nbtstat命令:该命令用来显示基于TCP/IP的NetBIOS(NetBT)协议统计资料、本地计算机和远程计算机的NetBIOS名称表和NetBIOS名称缓存。该命令的语法如下。

nbtstat[-a RemoteName] [-A IPAddress] [-c] [-n] [-r] [-R] [-RR] [-s] [-S] [Interval]

在本程序中主要使用到了-A IPAddress参数,该参数说明如下。

该参数用来显示远程计算机的NetBIOS名称表,其名称由远程计算机的IP地址指定。读者可以在“开始”菜单中选择运行选项,在弹出的“运行”窗口中输入cmd命令,就会打开DOS窗口。在该窗口中输入nbtstat –A 读者机器的IP,会显示NetBIOS名称表。在该表中可以查看网卡号信息(MAC Address)。如图1所示。

1  MAC地址信息

(3)获取机器名

Dns类Resolve方法可以获取到IPHostEntry实例,该实例中包含机器名信息。Resolve方法的语法如下。

public static IPHostEntry Resolve(string hostName)

Œ 参数hostName:为DNS样式的主机名或IP地址。

返回值:一个IPHostEntry实例,包含有关hostName中指定的主机的地址信息。

  设计过程

(1)新建一个网站,将其命名为SoftwareRegister,默认主页为Default.aspx。

(2)Web服务的生成。自定义getNumber方法,该方法用来返回软件注册码。调用该方法需要传入两个字符串变量,第一个字符串变量表示客户端网卡号,第二个字符串变量表示客户端机器名。在该方法中将客户端的网卡号分成4组,将机器名分别取出一个字符添加到网卡号所分的组中。最后将数组赋值到字符串变量中并返回。实现代码如下:

[WebMethod]

public string getNumber(string carNmu, string hosNam)

{

    string cardStr = carNmu.Replace(":", "");                       //将字符串中“:”替换为空字符

    string[] cards = new string[4];                                  //创建数组      

    int s = 0;

    string hn = hosNam;                                                    //获取机器名

    if (hn.Length > 4)                                                        //判断机器名是否大于4位

    {

        hn = hn.Substring(0, 4);                                     //截取4位字符

    }

    else

    {

        int len = hn.Length;                                           //获取机器名的长度

        switch (len)                                                      //将机器名填充到4位

        {                       

            case 1: hn += "ABC"; break;

            case 2: hn += "AB"; break;

            case 3: hn += "A"; break;

        }

    }

    hn = hn.ToUpper();                                                     //将机器名转换为大写

    for (int i = 0; i < 4; i++)                                               //创建for循环添加数组

    {

        //将网卡号分成4组,在每组i的位置插入所获取的1为机器名

        cards[i] = cardStr.Substring(s, 3).Insert(i, hn.Substring(i, 1));               

        s += 3;

    }

    string getRegNum = "";

    for (int k = 0; k < 3; k++)                                            //将每个数组之间插入“-”并存储在字符串变量中

    {

        getRegNum += cards[k] + "-";

    }

    return getRegNum += cards[3];                                  //返回所生成的注册码  

}

(2)注册软件注册码的实现,在“注册”按钮的Click事件中,判断用户填写的软件注册码是否正确。在该事件中将调用Web服务中的getCar方法,将该方法返回的值通过“-”分组,在Label控件中所显示的网卡号和机器名与数组中的值进行比较,如果相同表示注册成功并给出提示信息,代码如下:

protected void btnRegion_Click(object sender, EventArgs e)

{

    string strNum =txt1.Text + "-" + txt2.Text + "-" + txt3.Text+ "-" + txt4.Text;  //获取用户填写的软件注册码

    webGet.Service ws=new webGet.Service();                                       //创建web服务对象

    string[] strs = ws.getCar(strNum).Split('-');                                 //将Web服务中的方法返回的分解值,分组

    string hn = labName.Text;                                                          //获取机器名

    if (hn.Length > 4)                                                                      //添加机器名为四位

    {

        hn = hn.Substring(0, 4);                                                   //截取4位字符

    }

    else

    {

     int len = hn.Length;                                                               //获取机器名的长度

     switch (len)                                                                            //将机器名填充到4位

     {

         case 1: hn += "ABC"; break;

         case 2: hn += "AB"; break;

             case 3: hn += "A"; break;

         }

     }

     //判断分解的客户端网卡号、机器名和自动获取到的客户端网卡号、机器名是否相同

     if (labCard.Text.Replace(":", "") == strs[1] && hn == strs[0])

     {

         RegisterStartupScript("", "<script>alert('注册成功!')</script>");

     }

     else

     {

        RegisterStartupScript("", "<script>alert('注册失败!')</script>");

    }       

}

  秘笈心法

       心法领悟:注册码的由来

注册码的生成,是将机器名插入到网卡序列号中所生成的。网卡序列号是有一个12位的字符串所组成的,首先将网卡序列号分为四组,每组三个字符。在将机器名分为四组,每组一个字符。将机器名分别插入到网卡序列号所分的四组中。该机器名插入的顺序为,机器名第一组插入到网卡序列号第一组的第一位,机器名第二组插入到网卡序列号第二组的第二位。以此类推,最终生成一个注册码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Code_徐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值