服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服务器之家 - 编程语言 - ASP.NET教程 - asp.net根据计算机MAC地址限定每台机子只能领取一次账号

asp.net根据计算机MAC地址限定每台机子只能领取一次账号

2019-10-06 11:15asp.net教程网 ASP.NET教程

这里只做简单演示过程,请根据您的实际情况作适当修改!另外我的博客只做自己参考查询方便用,请各位大神不要没事喷我,知道您的技术高,我是新手正在努力学习当中,谢谢

下面开始吧: 
首先写一个简单的前台代码: 

复制代码代码如下:


<%@ 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 style="text-align: left"> 
<strong><span style="font-size: 14pt">欢迎光临爱智旮旯的博客!</span><br /> 
</strong><span style="font-size: 10pt; color: #ff0000">注:每台计算机只可以领取一个帐号<br /> 
</span> 
<asp:Button ID="getNamePass" runat="server" OnClick="getNamePass_Click" 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>"); 




延伸 · 阅读

精彩推荐