欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

PHP获取客户端的网卡mac物理地址 (不能获取客户端的,只能获取服务端的) 有大用

获取客户端的mac地址是非常有用的一个功能,因为它是客户端的不可变的唯一标识,更换IP或者清除本地记录都是没用的。

Ruesin.com

所以获取mac地址经常会用到购买软件时的一机一激活码,网站注册每台机器只能注册一次等等。

在电商系统开发中,常见的一个功能就是:用户在没有登录的状态下将商品加入购物车,登录后自动将购物车数据同步上来。对此的解决办法我们一般都是使用COOKIE或者SESSION解决即可。其实也可以用获取客户端的mac地址作为唯一标识存入到数据库中,登录成功后再进行匹配。

大数据时代的云很多时候都有用到此类方法。

网上查询整理的代码如下:


  1. <?php  

  2. class GetMac{  

  3.     var $result   = array();   

  4.     var $macAddrs = array(); //所有mac地址  

  5.     var $macAddr;            //第一个mac地址  

  6.   

  7.     function __construct($OS){  

  8.         $this->GetMac($OS);  

  9.     }  

  10.   

  11.     function GetMac($OS){  

  12.         switch ( strtolower($OS) ){  

  13.             case "unix"break;  

  14.             case "solaris"break;  

  15.             case "aix"break;  

  16.             case "linux":  

  17.                 $this->getLinux();  

  18.                 break;  

  19.             default:   

  20.                 $this->getWindows();  

  21.                 break;  

  22.         }  

  23.         $tem = array();  

  24.         foreach($this->result as $val){  

  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",$val,$tem) ){  

  26.                 $this->macAddr = $tem[0];//多个网卡时,会返回第一个网卡的mac地址,一般够用。  

  27.                 break;  

  28.                 //$this->macAddrs[] = $temp_array[0];//返回所有的mac地址  

  29.             }  

  30.         }  

  31.         unset($temp_array);  

  32.         return $this->macAddr;  

  33.     }  

  34.     //Linux系统  

  35.     function getLinux(){  

  36.         @exec("ifconfig -a"$this->result);  

  37.         return $this->result;  

  38.     }  

  39.     //Windows系统  

  40.     function getWindows(){  

  41.         @exec("ipconfig /all"$this->result);  

  42.         if ( $this->result ) {  

  43.             return $this->result;  

  44.         } else {  

  45.             $ipconfig = $_SERVER["WINDIR"]."\system32\ipconfig.exe";  

  46.             if(is_file($ipconfig)) {  

  47.                 @exec($ipconfig." /all"$this->result);  

  48.             } else {  

  49.                 @exec($_SERVER["WINDIR"]."\system\ipconfig.exe /all"$this->result);  

  50.                 return $this->result;  

  51.             }  

  52.         }  

  53.     }  

  54. }  

  55.   

  56. $obj = new GetMac(PHP_OS);  

  57. print_r($obj->result);  

  58. echo $obj->macAddr;  

  59. //获取客户端  

  60. //$result=`arp -a $REMOTE_ADDR`;  

  61. //$result=`nbtstat -a $REMOTE_ADDR`;  

  62. //print_r($result);  

  63. exit;  



请把最起码的版权请留给博主,谢谢!

来自  https://blog.csdn.net/iastro/article/details/78024005


php获取服务器端mac和客户端mac的地址支持WIN/LINUX

转载  更新时间:2014年05月15日 09:36:10   作者:    我要评论

这篇文章主要介绍了php获取服务器端mac和客户端mac地址的方法,需要的朋友可以参考下
获取服务器mac 
复制代码代码如下:

<?php 
/** 
获取网卡的MAC地址原码;目前支持WIN/LINUX系统 
获取机器网卡的物理(MAC)地址 
**/ 
class GetmacAddr{ 
var $result = array(); // 返回带有MAC地址的字串数组 
var $macAddr; 
/*构造*/ 
function __construct($osType){ 
switch ( strtolower($osType) ){ 
case "unix": break; 
case "solaris": break; 
case "aix": break; 
case "linux": { 
$this->for_linux_os(); 
}break; 
default: { 
$this->for_windows_os(); 
}break; 

$temp_array = array(); 
foreach($this->result 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; 

/*linux系统中获取方法*/ 
function for_linux_os(){ 
@exec("ifconfig -a", $this->result); 
return $this->result; 

/*win系统中的获取方法*/ 
function for_windows_os(){ 
@exec("ipconfig /all", $this->result); 
if ( $this->result ) { 
return $this->result; 
} else { 
$ipconfig = $_SERVER["WINDIR"]."\system32\ipconfig.exe"; 
if(is_file($ipconfig)) { 
@exec($ipconfig." /all", $this->result); 
} else { 
@exec($_SERVER["WINDIR"]."\system\ipconfig.exe /all", $this->result); 
return $this->result; 




?> 

获取客户端mac地址: 
复制代码代码如下:

@exec("arp -a",$array); //执行arp -a命令,结果放到数组$array中 
foreach($array as $value){ 
//匹配结果放到数组$mac_array 
if(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不能在本机测试,只能用别的电脑访问才能输出

来自 https://www.jb51.net/article/50135.htm


php/js获取客户端mac地址的实现代码

转载  更新时间:2013年07月08日 18:22:05   作者:    我要评论

这篇文章主要介绍了如何在php与js中分别获取客户度mac地址的方法,需要的朋友可以参考下

废话不多讲,直接上代码吧!


复制代码代码如下:

<?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浏览器,而且会有告警提示,挺遗憾的。

来自  https://www.jb51.net/article/39603.htm

普通分类: