首頁  >  文章  >  php教程  >  php获取客户端mac地址程序代码

php获取客户端mac地址程序代码

WBOY
WBOY原創
2016-05-25 16:40:131497瀏覽

mac地址是网卡地址一般情况下是无法获取到用户的mac地址地的,因为安全限制了浏览器所以几乎不太可能获取到了,下面拿两段代码给大家玩玩.

例1,PHP代码如下:

<?php 
  @exec("arp -a",$array); //执行arp -a命令,结果放到数组$array中 
  echo "<pre class="brush:php;toolbar:false">"; 
  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) 
      )
      { 
          $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[&#39;REMOTE_ADDR&#39;]}";  
echo $command;  
echo "<br />";  
$result=`{$command}`;   
   
// windows  
$command = "nbtstat -a {$_SERVER[&#39;REMOTE_ADDR&#39;]}";  
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, &#39;Win32_NetworkAdapterConfiguration&#39;);     
</script>    
<form><input type="text" id=&#39;lbMacAddr&#39; name=&#39;lbMacAddr&#39; /></form>

只适用于IE浏览器,而且会有告警提示.


永久链接:

转载随意!带上文章地址吧。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn