首先说一下什么是mac地址。
MAC(Medium/Media Access Control)地址,用来表示互联网上每一个站点的标识符,采用十六进制数表示,共六个字节(48位)。其中,前三个字节是由IEEE的注册管理机构RA负责给不同厂家分配的代码(高位24位),也称为"编制上唯一的标识符"(Organizationally Unique Identifier),后三个字节(低位24位)由各厂家自行指派给生产的适配器接口,称为扩展标识符(唯一性)。一个地址块可以生成2个不同的地址。MAC地址实际上就是适配器地址或适配器标识符EUI-48。
总结:和IP地址比较,mac地址硬件出厂即固化在硬件里,而且是全球唯一,不可随意更改,ip地址人为指定,符合网络要求的情况下可以随意更改。
获取客户端Mac地址有什么作用呢,首先mac地址是全球唯一的,所以可以通过mac地址现在每台电脑的操作进行限制了,比如投票,限制mac比现在ip就完美很多了。
这里介绍PHP获取服务器和客户端的mac地址
namespace base; class Getmac{ private $result = array(); private $macAddr = ''; private $macAddrs = []; function getServerMac(){ switch ( strtolower(PHP_OS) ){ case 'unix': break; case 'solaris': break; case 'aix': break; case 'linux': case 'darwin': $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地址 } } return $this->macAddr; } /** * Linux系统 * @return array */ private function getLinux(){ @exec("ifconfig -a", $this->result); return $this->result; } /** * Windows系统 * @return array */ private function getWindows(){ @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 * @return mixed */ function getRemoteMac(){ @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; } } return empty($mac) ? '' : $mac; } } //使用方法 $obj = new \base\GetMac(); //服务器mac地址 dump($obj->getServerMac()); //客户端mac地址,远程访问 dump($obj->getRemoteMac());
注意:得到客户端地址请远程访问,不要在当前服务器访问