获取PHP服务端的网卡MAC地址的方法

  •   
  • 5157
  • PHP
  • 8
  • super_dodo
  • 2016/09/19

本意是想获得PHP客户端的用户的MAC的地址的,网上查找了一些资料,该篇幅先讲如何获得服务器端的MAC地址的方法和类。Windows下面比较容易,但是Linux下面因为权限的因素,可能坑多一些,希望各自尝试,或者给我提供好的方法和建议。直接上类文件和代码:

<?php 
/** 
获取网卡的MAC地址原码:目前支持WIN/LINUX系统 
获取机器网卡的物理(MAC)地址 
**/

class MacAddr{ 

	public $return_array = array(); // 返回带有MAC地址的字串数组 
	public $mac_addr; 


	/**
	** 得到网卡的MAC地址
	*/
	public function getMacAddr($os_type){

		switch (strtolower($os_type)){ 		//根据系统的类型
			case "linux": $this->forLinux(); break; 
			case "unix": break; 
			default: $this->forWindows(); break; 		//WINNT
		} 

		$temp_array = array(); 		//临时数组用来放正则匹配的结果数组
		foreach($this->return_array 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->mac_addr = $temp_array[0]; 	//匹配到第一个网卡地址
				break; 
			}
		}
		unset($temp_array); 

		return $this->mac_addr; 	//返回网卡地址
	} 


	//对于windows系统
	public function forWindows(){ 
		@exec("ipconfig /all", $this->return_array);	//得到网卡的信息
		if($this->return_array){ 
			return $this->return_array; 
		}else{ 
			$ipconfig = $_SERVER["WINDIR"]."\system32\ipconfig.exe"; 
			if(is_file($ipconfig)){
				@exec($ipconfig." /all", $this->return_array); 
			}else{
				@exec($_SERVER["WINDIR"]."\system\ipconfig.exe /all", $this->return_array); 
				return $this->return_array; 
			}
		} 
	} 

	//对于Linux系统
	public function forLinux(){ 
		@exec("ifconfig -a", $return_array); 		//得到网卡的信息
	//	echo '<pre>';
	//	print_r($return_array);
		return $return_array; 
	}

}


//方法使用示例
$mac = new MacAddr();
$mac_addr = $mac->getMacAddr(PHP_OS);
echo $mac_addr;			//这就是服务端的Mac地址: B8-88-E3-35-8E-D3

//另外科普一下PHP_OS这个函数
echo PHP_OS;		//WINNT  Linux

?>

求各位大神各抒己见,我想获取客户端的唯一标识,Mac地址或者其他。

Ps:PHP获取的IP,不太可靠,因为用户把网断开,重新拨号,如果是动态分配IP(大多数)的话IP就变了,静态IP的话,可以获取到。

因为陌生所以勇敢~