现在的位置: 首页 > 综合 > 正文

转:asp.net获取客户端登录者mac地址

2012年10月06日 ⁄ 综合 ⁄ 共 2820字 ⁄ 字号 评论关闭

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,0, ref 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 "";
        }
    }
【上篇】
【下篇】

抱歉!评论已关闭.