php获取客户端mac地址程序代码
mac地址是网卡地址一般情况下是无法获取到用户的mac地址地的,因为安全限制了浏览器所以几乎不太可能获取到了,下面拿两段代码给大家玩玩.
例1,PHP代码如下:
<?php @ exec ( "arp -a" , $array ); //执行arp -a命令,结果放到数组$array中 echo "<pre>" ; print_r( $array ); //打印获取的数组 foreach ( $array as $value ) { if ( //匹配结果放到数组$mac_array strpos ( $value , $_SERVER [ "REMOTE_ADDR" ]) && preg_match( "/(:?[0-9a-f]{2}[:-]){5}[0-9a-f]{2}/i" , $value , $mac_array ) ) //开源代码phpfensi测试数据 { $mac = $mac_array [0]; break ; } } echo $mac ; //输出客户端MAC ?>例2,代码如下:
<?php class MacAddr { public $returnArray = array (); public $macAddr ; function __contruct( $os_type =null){ if ( is_null ( $os_type )) $os_type = PHP_OS; switch ( strtolower ( $os_type )){ case "linux" : $this ->forLinux(); break ; case "solaris" : break ; case "unix" : break ; case "aix" : break ; default : $this ->forWindows(); break ; } $temp_array = array (); foreach ( $this ->returnArray as $value ){ 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 )){ $this ->macAddr = $temp_array [0]; break ; } } unset( $temp_array ); return $this ->macAddr; } function forWindows(){ @ exec ( "ipconfig /all" , $this ->returnArray); if ( $this ->returnArray) return $this ->returnArray; else { $ipconfig = $_SERVER [ "WINDIR" ]. "system32ipconfig.exe" ; if ( is_file ( $ipconfig )) @ exec ( $ipconfig . " /all" , $this ->returnArray); else @ exec ( $_SERVER [ "WINDIR" ]. "systemipconfig.exe /all" , $this ->returnArray); return $this ->returnArray; } } function forLinux(){ @ exec ( "ifconfig -a" , $this ->returnArray); return $this ->returnArray; } } $mac = new MacAddr(PHP_OS); echo $mac ->macAddr; echo "<br />" ; // 获取客户端 // linux $command = "arp -a {$_SERVER['REMOTE_ADDR']}" ; echo $command ; echo "<br />" ; $result =`{ $command }`; // windows $command = "nbtstat -a {$_SERVER['REMOTE_ADDR']}" ; echo $command ; echo "<br/>" ; $result =`{ $command }`; print_r( $result ); ?>获取服务端的逻辑没什么大问题,可能会存在权限问题,获取客户端的时候,可能会比较慢,arp/nbstat命令执行会比较慢,代码如下:
<script language= "JScript" event= "OnCompleted(hResult,pErrorObject, pAsyncContext)" for = "foo" > document.forms[0].lbMacAddr.value=unescape(MACAddr); </script> <script language= "JScript" event= "OnObjectReady(objObject,objAsyncContext)" for = "foo" > if (objObject.IPEnabled != null && objObject.IPEnabled != "undefined" && objObject.IPEnabled == true && objObject.MACAddress != null && objObject.MACAddress != "undefined" ) MACAddr = objObject.MACAddress; </script> <object id= "locator" classid= "CLSID:76A64158-CB41-11D1-8B02-00600806D9B6" ></object> <object id= "foo" classid= "CLSID:75718C9A-F029-11d1-A1AC-00C04FB6C223" ></object> <script language= "JScript" > var service = locator.ConnectServer(); var MACAddr ; var IPAddr ; var DomainAddr; var sDNSName; service.Security_.ImpersonationLevel=3; service.InstancesOfAsync(foo, 'Win32_NetworkAdapterConfiguration' ); </script> <form><input type= "text" id= 'lbMacAddr' name= 'lbMacAddr' /></form>只适用于IE浏览器,而且会有告警提示.
查看更多关于php获取客户端mac地址程序代码 - php高级应用的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did30350