一、用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,要不每次运行会出现确认窗口
![](https://p-blog.csdn.net/images/p_blog_csdn_net/dqw3721/aa.jpg)
四、运行效果
验证通过
![](https://p-blog.csdn.net/images/p_blog_csdn_net/dqw3721/pass.jpg)
验证未通过
![](https://p-blog.csdn.net/images/p_blog_csdn_net/dqw3721/fail.jpg)