读取客户端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;
}
}
}
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>
<!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";
}
}
}
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...。