Asp.net获取客户端登录者mac地址

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

1,通过win32特性获得,

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

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

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

通过win32特性获得:

 

·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
  1.  [DllImport("Iphlpapi.dll")]     
  2.   
  3. 02       private static extern int SendARP(Int32 dest,Int32 host,ref Int64 mac,ref Int32 length);     
  4.   
  5. 03       [DllImport("Ws2_32.dll")]    
  6.   
  7. 04       private static extern Int32 inet_addr(string ip);    
  8.   
  9. 05      
  10.   
  11. 06       private void Page_Load(object sender, System.EventArgs e)    
  12.   
  13. 07       {    
  14.   
  15. 08            try   
  16.   
  17. 09            {    
  18.   
  19. 10                 string userip=Request.UserHostAddress;    
  20.   
  21. 11                 string strClientIP = Request.UserHostAddress.ToString().Trim();    
  22.   
  23. 12                 Int32 ldest = inet_addr(strClientIP); //目的地的ip     
  24.   
  25. 13                 Int64 macinfo = new Int64();     
  26.   
  27. 14                 Int32 len = 6;     
  28.   
  29. 15                 int res = SendARP(ldest,0, ref macinfo, ref len);    
  30.   
  31. 16                 string mac_src=macinfo.ToString("X");    
  32.   
  33. 17                 if(mac_src == "0")    
  34.   
  35. 18                 {    
  36.   
  37. 19                     if (userip == "127.0.0.1")    
  38.   
  39. 20                     {    
  40.   
  41. 21                         Response.Write("正在访问Localhost!");    
  42.   
  43. 22                     }    
  44.   
  45. 23                     else   
  46.   
  47. 24                     {    
  48.   
  49. 25                         Response.Write("欢迎来自IP为" + userip + "的朋友!" + "<br>");    
  50.   
  51. 26                     }    
  52.   
  53. 27                      return;    
  54.   
  55. 28                 }    
  56.   
  57. 29      
  58.   
  59. 30                 while(mac_src.Length<12)    
  60.   
  61. 31                 {    
  62.   
  63. 32                     mac_src = mac_src.Insert(0,"0");    
  64.   
  65. 33                 }    
  66.   
  67. 34      
  68.   
  69. 35                 string mac_dest="";    
  70.   
  71. 36      
  72.   
  73. 37                 for(int i=0;i<11;i++)    
  74.   
  75. 38                 {    
  76.   
  77. 39                      if (0 == (i % 2))    
  78.   
  79. 40                      {    
  80.   
  81. 41                           if ( i == 10 )    
  82.   
  83. 42                           {    
  84.   
  85. 43                                 mac_dest = mac_dest.Insert(0,mac_src.Substring(i,2));    
  86.   
  87. 44                           }    
  88.   
  89. 45                           else   
  90.   
  91. 46                           {    
  92.   
  93. 47                                 mac_dest ="-" + mac_dest.Insert(0,mac_src.Substring(i,2));    
  94.   
  95. 48                           }    
  96.   
  97. 49                      }     
  98.   
  99. 50                 }    
  100.   
  101. 51      
  102.   
  103. 52                 Response.Write ("欢迎来自IP为"+userip+ "<br>" + ",MAC地址为"+mac_dest+"的朋友!"    
  104.   
  105. 53      
  106.   
  107. 54                  +   "<br>");    
  108.   
  109. 55            }    
  110.   
  111. 56            catch(Exception err)     
  112.   
  113. 57            {     
  114.   
  115. 58                 Response.Write(err.Message);    
  116.   
  117. 59            }    
  118.   
  119. 60       }   

 

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

通过javascript加载ActiveX来实现:

javascript代码如下

·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
  1. document.write("<OBJECT id='locator' classid='CLSID:76A64158-CB41-11D1-8B02-00600806D9B6' VIEWASTEXT></OBJECT>");    
  2.   
  3. 04 document.write("<OBJECT id=foo classid=CLSID:75718C9A-F029-11d1-A1AC-00C04FB6C223></OBJECT>");    
  4.   
  5. 05 var MACAddr, IPAddr, sDNSName    
  6.   
  7. 06 function getObject(objObject,objAsyncContext){    
  8.   
  9. 07     try{    
  10.   
  11. 08         if(MACAddr==null && objObject.IPEnabled)    
  12.   
  13. 09         {    
  14.   
  15. 10            if(objObject.MACAddress != null && objObject.MACAddress != "undefined")    
  16.   
  17. 11                MACAddr = objObject.MACAddress;    
  18.   
  19. 12            if(objObject.IPEnabled && objObject.IPAddress(0) != null && objObject.IPAddress(0) != "undefined")    
  20.   
  21. 13                IPAddr = objObject.IPAddress(0);    
  22.   
  23. 14            if(objObject.DNSHostName != null && objObject.DNSHostName != "undefined")    
  24.   
  25. 15                sDNSName = objObject.DNSHostName;    
  26.   
  27. 16         }    
  28.   
  29. 17     }    
  30.   
  31. 18     catch(err)    
  32.   
  33. 19     {   }    
  34.   
  35. 20 }    
  36.   
  37. 21 function setValue(hResult,pErrorObject, pAsyncContext){    
  38.   
  39. 22     createTxt("txtMAC", MACAddr);    
  40.   
  41. 23     createTxt("txtIp", IPAddr);    
  42.   
  43. 24     createTxt("txtPCName", sDNSName);    
  44.   
  45. 25 }    
  46.   
  47. 26 function createTxt(txtName, txtValue){    
  48.   
  49. 27     var macTxt = document.createElement("INPUT");    
  50.   
  51. 28     macTxt.name = txtName;    
  52.   
  53. 29     macTxt.value = txtValue;    
  54.   
  55. 30     macTxt.type = "hidden";    
  56.   
  57. 31     try   
  58.   
  59. 32     {    
  60.   
  61. 33         document.forms[0].appendChild(macTxt);    
  62.   
  63. 34     }    
  64.   
  65. 35     catch(err)    
  66.   
  67. 36     {    
  68.   
  69. 37          
  70.   
  71. 38         //获取失败    
  72.   
  73. 39     }    
  74.   
  75. 40 }    
  76.   
  77. 41      
  78.   
  79. 42 document.getElementById("foo").attachEvent("OnObjectReady", getObject);    
  80.   
  81. 43 document.getElementById("foo").attachEvent("OnCompleted", setValue);    
  82.   
  83. 44      
  84.   
  85. 45 try   
  86.   
  87. 46 {    
  88.   
  89. 47     var service = locator.ConnectServer();    
  90.   
  91. 48     var MACAddr ;    
  92.   
  93. 49     var IPAddr ;    
  94.   
  95. 50     var DomainAddr;    
  96.   
  97. 51     var sDNSName;    
  98.   
  99. 52     service.Security_.ImpersonationLevel=3;    
  100.   
  101. 53     service.InstancesOfAsync(foo, 'Win32_NetworkAdapterConfiguration');     
  102.   
  103. 54 }    
  104.   
  105. 55 catch(err)    
  106.   
  107. 56 {    
  108.   
  109. 57     //获取失败    
  110.   
  111. 58 }   

 

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

·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
  1.   /// <summary>    
  2.   
  3. 02     /// 获取mac地址    
  4.   
  5. 03     /// </summary>    
  6.   
  7. 04     /// <returns></returns>    
  8.   
  9. 05     public string GetMACs()    
  10.   
  11. 06     {    
  12.   
  13. 07          try   
  14.   
  15. 08         {    
  16.   
  17. 09             return Request.Form["txtMAC"].ToString();    
  18.   
  19. 10         }    
  20.   
  21. 11         catch   
  22.   
  23. 12         {    
  24.   
  25. 13      
  26.   
  27. 14             return "";    
  28.   
  29. 15         }    
  30.   
  31. 16     }   

 

转自http://www.cnblogs.com/davinci/archive/2010/01/20/1652171.html

posted @ 2010-11-18 17:25  TC-MrLee  阅读(532)  评论(0编辑  收藏  举报