读取客户端mac地址判断访问权限


一、用wmi读取本机的mac地址的ActiveX

using System;
using System.Runtime.InteropServices;
using System.Management;
namespace NGetid
{
  
public interface Nst
  {
      
string FGet();
      
string GetHardDiskID();
  }
  [ClassInterface(ClassInterfaceType.AutoDual)]
  
public class NGetClass : Nst
  {
      
public string FGet()
      {
          
return "Success";
      }
      
public String GetHardDiskID()
      {
          
string mac="";
          ManagementClass mc 
= new ManagementClass("Win32_NetworkAdapterConfiguration");
          ManagementObjectCollection moc 
= mc.GetInstances();
          
foreach (ManagementObject mo in moc)
          {
              
if ((bool)mo["IPEnabled"== true)
               mac
= mo["MacAddress"].ToString().Replace(":""");
              mo.Dispose();
          }
          
return mac;
      }
  }
}

编译为dll:  csc /t:library ngetclass.cs
在客户机安装: regasm ngetclass /tlb /codebase
二、服务器端接收mac地址,用ajaxpro进行验证返回验证结果
前台:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="getmac.aspx.cs" Inherits="getmac" %>   
<!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>读取Mac地址进行身份验证</title>   
</head>   
<body>   
    
<form id="form1" runat="server">   
        
<div id="top">   
        您的网卡Mac地址为:   
        
<asp:TextBox ID="txtMacAddress" runat="server" Width="100px"></asp:TextBox>   
        
<asp:Label ID="lbAlert" runat="server" Width="100px">aaa</asp:Label>   
        
</div>   
        
<div id="login"  style="visibility:hidden">   
            
<asp:Button ID="Button1" runat="server" Text="登陆" />   
        
</div>   
        
<script type="text/javascript">   
            
var macAddress=document.getElementById("txtMacAddress");   
            
var x=new ActiveXObject("NGetid.NGetClass");   
            
var value=x.GetHardDiskID();   
            macAddress.value
=value;   
            
var v=getmac.checkmac(value).value;   
                           
var logindiv=document.getElementById("login");   
            
if(v=="ok")   
            {   
                logindiv.style.visibility 
= "visible";   
                document.getElementById(
"lbAlert").innerText="验证通过";   
            }   
            
else  
            {   
                logindiv.style.visibility 
= "hidden";   
                document.getElementById(
"lbAlert").innerText="验证未通过";   
            }   
        
</script>   
    
</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;   
  
public partial class getmac : System.Web.UI.Page   
{   
    
protected void Page_Load(object sender, EventArgs e)   
    {   
        AjaxPro.Utility.RegisterTypeForAjax(
typeof(getmac), this.Page);   
    }   
    [AjaxPro.AjaxMethod]   
    
public string  checkmac(string mac)   
    {   
        
if (mac == "00E04CD67945")   
        {   
            
return "ok";   
        }   
        
else  
        {   
            
return "error";   
        }   
    }   
}  

三、客户机需要把服务器的地址加入浏览器信任站点
由于没有数字签名,所以必须确认internet选项中允许未签名的activex,要不每次运行会出现确认窗口


四、运行效果
验证通过

验证未通过


也不知道有没有什么实用价值,o(∩_∩)o...。

posted on 2008-06-23 20:48  DQW  阅读(638)  评论(0)    收藏  举报