edsonwu

导航

C# 获取客户端电脑MAC 地址

前台代码

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication2.WebForm1" %>

<!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="领取帐号密码" />&nbsp;<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;

namespace WebApplication2

{    

public partial class WebForm1 : 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>");               

  }               

  }       

      }

        }

    } }

 

 

 

posted on 2013-03-08 10:20  edsonwu  阅读(888)  评论(0编辑  收藏  举报