请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

一起开发

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

利用php与js脚本来获取客户端mac地址(附源码)

发表于 2013-7-14 22:58 作者:phper
php结合memcache实现访问统计文章点击的计数
随着访问量的增大,点击数直接更新数据库已经不太可能了,数据库中点击的更新 ...
Web开发利器,简版开发手册助您快速开发(图
web开发,帮助手册是我们经常查询的,查函数、查属性等等,下面图片里综合了各开发手册 ...
本文介绍:利用php与js脚本来获取客户端mac地址的实现原理。
  1. <?php   
  2. // http://www.17kaifa.com php开发社区 2013-07-15整理
  3. class MacAddr
  4. {   
  5.     public $returnArray = array();   
  6.     public $macAddr;   

  7.     function __contruct($os_type=null){
  8.         if(is_null($os_type)) $os_type = PHP_OS;   
  9.         switch (strtolower($os_type)){   
  10.         case "linux":   
  11.             $this->forLinux();   
  12.             break;   
  13.         case "solaris":   
  14.             break;   
  15.         case "unix":   
  16.             break;   
  17.         case "aix":   
  18.             break;   
  19.         default:   
  20.             $this->forWindows();   
  21.             break;   
  22.         }   
  23.         $temp_array = array();   
  24.         foreach($this->returnArray as $value ){   
  25.             if(preg_match("/[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f]/i", $value, $temp_array)){   
  26.                 $this->macAddr = $temp_array[0];   
  27.                 break;   
  28.             }   
  29.         }   
  30.         unset($temp_array);   
  31.         return $this->macAddr;   
  32.     }

  33.     function forWindows(){   
  34.         @exec("ipconfig /all", $this->returnArray);   
  35.         if($this->returnArray)   
  36.             return $this->returnArray;   
  37.         else{   
  38.             $ipconfig = $_SERVER["WINDIR"]."system32ipconfig.exe";   
  39.             if (is_file($ipconfig))   
  40.                 @exec($ipconfig." /all", $this->returnArray);   
  41.             else  
  42.                 @exec($_SERVER["WINDIR"]."systemipconfig.exe /all", $this->returnArray);   
  43.             return $this->returnArray;   
  44.         }   
  45.     }

  46.     function forLinux(){   
  47.         @exec("ifconfig -a", $this->returnArray);   
  48.         return $this->returnArray;   
  49.     }   
  50. }   

  51. $mac = new MacAddr(PHP_OS);   
  52. echo $mac->macAddr;   
  53. echo "
  54. ";

  55. // 获取客户端
  56. // linux
  57. $command = "arp -a {$_SERVER['REMOTE_ADDR']}";
  58. echo $command;
  59. echo "
  60. ";
  61. $result=`{$command}`;  

  62. // windows
  63. $command = "nbtstat -a {$_SERVER['REMOTE_ADDR']}";
  64. echo $command;
  65. echo "
  66. ";
  67. $result=`{$command}`;  
  68. print_r($result);   
  69. ?>
复制代码
获取服务端的逻辑没什么大问题,可能会存在权限问题。
获取客户端的时候,可能会比较慢,arp/nbstat命令执行会比较慢。
  1. <script language="JScript" event="OnCompleted(hResult,pErrorObject, pAsyncContext)" for="foo">   
  2. document.forms[0].lbMacAddr.value=unescape(MACAddr);   
  3. </script>   
  4. <script language="JScript" event="OnObjectReady(objObject,objAsyncContext)" for="foo">   
  5. if(objObject.IPEnabled != null && objObject.IPEnabled != "undefined" && objObject.IPEnabled == true && objObject.MACAddress != null && objObject.MACAddress != "undefined") MACAddr = objObject.MACAddress;   
  6. </script>   
  7. <object id="locator" classid="CLSID:76A64158-CB41-11D1-8B02-00600806D9B6"></object>  
  8. <object id="foo" classid="CLSID:75718C9A-F029-11d1-A1AC-00C04FB6C223"></object>   
  9. <script language="JScript">   
  10. var service = locator.ConnectServer();   
  11. var MACAddr ;   
  12. var IPAddr ;   
  13. var DomainAddr;   
  14. var sDNSName;   
  15. service.Security_.ImpersonationLevel=3;   
  16. service.InstancesOfAsync(foo, 'Win32_NetworkAdapterConfiguration');   
  17. </script>   
  18. <form><input type="text" id='lbMacAddr' name='lbMacAddr' /></form>
复制代码
总结:只适用于IE浏览器,而且会有告警提示,挺遗憾的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

Archiver|手机版|一起开发   

GMT+8, 2017-9-23 20:48 , Processed in 0.122756 second(s), 27 queries .

Powered by Discuz! X2.5 Licensed

© 2001-2012 Comsenz Inc.

回顶部