asp.net获取客户端登录者的mac地址,有两种方法

1,通过win32特性获得,

        优点:无需在客户端设置;缺点:无法获取服务器的mac(经测试总为0,其实感觉没有必要获取服务器的mac,所以也不算缺点)(能否跨网段获取还没有测试)

2,通过javascript加载ActiveX来实现:

       优点:任意获取mac地址(可以跨网段获取);缺点:需要在客户端浏览器中将activeX的选项全部打开,否则获取不到,所以不怎么稳定;

通过win32特性获得:

代码
 [DllImport("Iphlpapi.dll")] 
      
private static extern int SendARP(Int32 dest,Int32 host,ref Int64 mac,ref Int32 length); 
      [DllImport(
"Ws2_32.dll")]
      
private static extern Int32 inet_addr(string ip);

      
private void Page_Load(object sender, System.EventArgs e)
      {
           
try
           {
                
string userip=Request.UserHostAddress;
                
string strClientIP = Request.UserHostAddress.ToString().Trim();
                Int32 ldest 
= inet_addr(strClientIP); //目的地的ip 
                Int64 macinfo = new Int64(); 
                Int32 len 
= 6
                
int res = SendARP(ldest,0ref macinfo, ref len);
                
string mac_src=macinfo.ToString("X");
                
if(mac_src == "0")
                {
                    
if (userip == "127.0.0.1")
                    {
                        Response.Write(
"正在访问Localhost!");
                    }
                    
else
                    {
                        Response.Write(
"欢迎来自IP为" + userip + "的朋友!" + "<br>");
                    }
                     
return;
                }

                
while(mac_src.Length<12)
                {
                    mac_src 
= mac_src.Insert(0,"0");
                }

                
string mac_dest="";

                
for(int i=0;i<11;i++)
                {
                     
if (0 == (i % 2))
                     {
                          
if ( i == 10 )
                          {
                                mac_dest 
= mac_dest.Insert(0,mac_src.Substring(i,2));
                          }
                          
else
                          {
                                mac_dest 
="-" + mac_dest.Insert(0,mac_src.Substring(i,2));
                          }
                     } 
                }

                Response.Write (
"欢迎来自IP为"+userip+ "<br>" + ",MAC地址为"+mac_dest+"的朋友!" 

                 
+   "<br>");
           }
           
catch(Exception err) 
           { 
                Response.Write(err.Message);
           }
      }

 

通过以上代码则可获取客户端mac,需要在客户机子上面才能看到效果

通过javascript加载ActiveX来实现:

javascript代码如下

 

代码
// JScript 文件

document.write(
"<OBJECT id='locator' classid='CLSID:76A64158-CB41-11D1-8B02-00600806D9B6' VIEWASTEXT></OBJECT>");
document.write(
"<OBJECT id=foo classid=CLSID:75718C9A-F029-11d1-A1AC-00C04FB6C223></OBJECT>");
var MACAddr, IPAddr, sDNSName
function getObject(objObject,objAsyncContext){
    
try{
        
if(MACAddr==null && objObject.IPEnabled)
        {
           
if(objObject.MACAddress != null && objObject.MACAddress != "undefined")
               MACAddr 
= objObject.MACAddress;
           
if(objObject.IPEnabled && objObject.IPAddress(0!= null && objObject.IPAddress(0!= "undefined")
               IPAddr 
= objObject.IPAddress(0);
           
if(objObject.DNSHostName != null && objObject.DNSHostName != "undefined")
               sDNSName 
= objObject.DNSHostName;
        }
    }
    
catch(err)
    {   }
}
function setValue(hResult,pErrorObject, pAsyncContext){
    createTxt(
"txtMAC", MACAddr);
    createTxt(
"txtIp", IPAddr);
    createTxt(
"txtPCName", sDNSName);
}
function createTxt(txtName, txtValue){
    
var macTxt = document.createElement("INPUT");
    macTxt.name 
= txtName;
    macTxt.value 
= txtValue;
    macTxt.type 
= "hidden";
    
try
    {
        document.forms[
0].appendChild(macTxt);
    }
    
catch(err)
    {
    
        
//获取失败
    }
}

document.getElementById(
"foo").attachEvent("OnObjectReady", getObject);
document.getElementById(
"foo").attachEvent("OnCompleted", setValue);

try
{
    
var service = locator.ConnectServer();
    
var MACAddr ;
    
var IPAddr ;
    
var DomainAddr;
    
var sDNSName;
    service.Security_.ImpersonationLevel
=3;
    service.InstancesOfAsync(foo, 
'Win32_NetworkAdapterConfiguration'); 
}
catch(err)
{
    
//获取失败
}

 

在要获取的aspx页面上面引用以上js,可以在该页面通过以下方法来获取max地址

 

代码
 /// <summary>
    
/// 获取mac地址
    
/// </summary>
    
/// <returns></returns>
    public string GetMACs()
    {
         
try
        {
            
return Request.Form["txtMAC"].ToString();
        }
        
catch
        {

            
return "";
        }
    }
posted on 2010-03-03 12:32  William2013  阅读(707)  评论(0编辑  收藏  举报