PHP

什么是mac地址,PHP如何得到服务器和客户端mac地址


首先说一下什么是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());


注意:得到客户端地址请远程访问,不要在当前服务器访问

0.075648s