asp.net根据计算机MAC地址限定每台机子只能领取一次账号
asp.net根据计算机MAC地址限定每台机子只能领取一次账号
发布时间:2016-12-29 来源:查字典编辑
摘要:下面开始吧:首先写一个简单的前台代码:复制代码代码如下:无标题页欢迎光临爱智旮旯的博客!注:每台计算机只可以领取一个帐号再来写一个后台代码,...

下面开始吧:

首先写一个简单的前台代码:

复制代码 代码如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

<title>无标题页</title>

</head>

<body>

<form id="form1" runat="server">

<div>

<strong><span>欢迎光临爱智旮旯的博客!</span><br />

</strong><span>注:每台计算机只可以领取一个帐号<br />

</span>

<asp:Button ID="getNamePass" runat="server" Text="领取帐号密码" /><br />

<asp:Label ID="labName" runat="server"></asp:Label><br />

<asp:Label ID="labPass" runat="server"></asp:Label><br />

</div>

</form>

</body>

</html>

再来写一个后台代码,备注已经说的比较清楚,这里不多说了!

复制代码 代码如下:

using System;

using System.Data;

using System.Configuration;

using System.Collections;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

using System.Text.RegularExpressions;

using System.Diagnostics;

public partial class _Default : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

labName.Text = labPass.Text = "";

}

protected void getNamePass_Click(object sender, EventArgs e)

{

//获取客户端的IP地址

string IP = Request.UserHostAddress;

//创建字符串变量

string dirResults = "";

//创建ProcessStartInfo对象表示启动进程时使用的一组值

ProcessStartInfo psi = new ProcessStartInfo();

//创建Process对象使您能够启动和停止本地系统进程

Process proc = new Process();

//设置要启动的应用程序或文档

psi.FileName = "nbtstat";

//设置不从Process.StandardInput流中读取输入

psi.RedirectStandardInput = false;

//设置要输出写入 Process.StandardOutput流

psi.RedirectStandardOutput = true;

//设置启动的应用程序中的一组命令参数

psi.Arguments = "-A " + IP;

//设置从可执行文件创建进程

psi.UseShellExecute = false;

//设置启动进程

proc = Process.Start(psi);

//获取StandardOutput输出流

dirResults = proc.StandardOutput.ReadToEnd();

//设置Process 组件无限期地等待关联进程退出

proc.WaitForExit();

//替换掉StandardOutput输出流中的"/r,/n,/t"

dirResults = dirResults.Replace("r", "").Replace("n", "").Replace("t", "");

//设置正则表达式

Regex reg = new Regex("MAC[ ]{0,}Address[ ]{0,}=[ ]{0,}(?<key>((.)*?))MAC", RegexOptions.IgnoreCase | RegexOptions.Compiled);

//向获取的StandardOutput输出流添加"MAC"字符串

dirResults = dirResults + "MAC";

//获取Cookie

HttpCookie oldCookie = Request.Cookies["netCard"];

//获取正则表达式中的匹配项

Match mc = reg.Match(dirResults);

//获取网卡号去除掉“-”符合

string networkCard = mc.Groups["key"].Value.Replace("-", "");

//判断Cookie是否为空

if (oldCookie == null)

{

//判断是否符合正则表达式的要求

if (mc.Success)

{

//显示帐号

labName.Text = "您的帐号为:" + networkCard;

//显示密码

labPass.Text = "您的密码为:1234";

//创建Cookie对象

HttpCookie newCookie = new HttpCookie("netCard");

//设置Cookie的有效时间

newCookie.Expires = DateTime.MaxValue;

//添加Cookie中的值

newCookie.Values.Add("numberCard", networkCard);

//将Cookie添加到Cookie集合中

Response.Cookies.Add(newCookie);

}

else

{

RegisterStartupScript("", "<script>alert( '您没有联网!');</script>");

}

}

else

{

//获取Cookie中的网卡号

string numberCard = oldCookie.Values["numberCard"];

//判断Cookie中的网卡号是否和获取到的网卡号一致

if (numberCard.Trim() == networkCard.Trim())

{

RegisterStartupScript("", "<script>alert('很抱歉!您的计算机已领取过帐号。')</script>");

}

else

{

//判断是否符合正则表达式的要求

if (mc.Success)

{

//显示帐号

labName.Text = "您的帐号为:" + networkCard;

//显示密码

labPass.Text = "您的密码为:1234";

//修改Cookie中的值

oldCookie.Values.Set("numberCard", networkCard);

//将Cookie添加到Cookie集合中

Response.Cookies.Add(oldCookie);

}

else

{

RegisterStartupScript("", "<script>alert( '您没有联网!');</script>");

}

}

}

}

}

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新asp.net教程学习
热门asp.net教程学习
编程开发子分类