程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php 獲取客戶端mac地址程序代碼

php 獲取客戶端mac地址程序代碼

編輯:關於PHP編程

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)
      )
      {
          $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浏覽器,而且會有告警提示

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved