編碼的世界 / 優質文選 / 文明

PHP獲取客戶端的網卡mac物理地址


2022年7月13日
-   

獲取客戶端的mac地址是非常有用的一個功能,因為它是客戶端的不可變的唯一標識,更換IP或者清除本地記錄都是沒用的。
Ruesin.com
所以獲取mac地址經常會用到購買軟件時的一機一激活碼,網站注冊每台機器只能注冊一次等等。
在電商系統開發中,常見的一個功能就是:用戶在沒有登錄的狀態下將商品加入購物車,登錄後自動將購物車數據同步上來。對此的解決辦法我們一般都是使用COOKIE或者SESSION解決即可。其實也可以用獲取客戶端的mac地址作為唯一標識存入到數據庫中,登錄成功後再進行匹配。
大數據時代的雲很多時候都有用到此類方法。
網上查詢整理的代碼如下:
<?php
class GetMac{
var $result = array();
var $macAddrs = array(); //所有mac地址
var $macAddr; //第一個mac地址
function __construct($OS){
$this->GetMac($OS);
}
function GetMac($OS){
switch ( strtolower($OS) ){
case "unix": break;
case "solaris": break;
case "aix": break;
case "linux":
$this->getLinux();
break;
default:
$this->getWindows();
break;
}
$tem = array();
foreach($this->result as $val){
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) ){
$this->macAddr = $tem[0];//多個網卡時,會返回第一個網卡的mac地址,一般夠用。
break;
//$this->macAddrs[] = $temp_array[0];//返回所有的mac地址
}
}
unset($temp_array);
return $this->macAddr;
}
//Linux系統
function getLinux(){
@exec("ifconfig -a", $this->result);
return $this->result;
}
//Windows系統
function getWindows(){
@exec("ipconfig /all", $this->result);
if ( $this->result ) {
return $this->result;
} else {
$ipconfig = $_SERVER["WINDIR"]."system32ipconfig.exe";
if(is_file($ipconfig)) {
@exec($ipconfig." /all", $this->result);
} else {
@exec($_SERVER["WINDIR"]."systemipconfig.exe /all", $this->result);
return $this->result;
}
}
}
}
$obj = new GetMac(PHP_OS);
print_r($obj->result);
echo $obj->macAddr;
//獲取客戶端
//$result=`arp -a $REMOTE_ADDR`;
//$result=`nbtstat -a $REMOTE_ADDR`;
//print_r($result);
exit;

請把最起碼的版權請留給博主,謝謝! 轉載請注明:PHP獲取客戶端的網卡mac物理地址

熱門文章