Home  >  Article  >  php教程  >  php获取客户端mac地址程序代码

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

WBOY
WBOYOriginal
2016-05-25 16:40:131498browse

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浏览器,而且会有告警提示.


永久链接:

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

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn