首页 > php开发 > php获取本机mac地址三种方法

php获取本机mac地址三种方法

<?php
//方法一
class getmacaddr {
    var $return_array = array(); // 返回带有mac地址的字串数组
    var $mac_addr;
    function getmacaddr($os_type) {
        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->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;
    }
    function forwindows() {
        @exec("ipconfig /all", $this->return_array);
        if ($this->return_array) return $this->return_array;
        else {
            $ipconfig = $_server["windir"] . "system32ipconfig.exe";
            if (is_file($ipconfig)) @exec($ipconfig . " /all", $this->return_array);
            else @exec($_server["windir"] . "systemipconfig.exe /all", $this->return_array);
            return $this->return_array;
        }
    }
    function forlinux() {
        @exec("ifconfig -a", $this->return_array);
        return $this->return_array;
    }
}
?>
<?php
$mac = new getmacaddr(php_os);
echo $mac->mac_addr;
//方法二
qstringgetlocalmac()    {
      intsock_mac;
      structifreqifr_mac;
      charmac_addr[30];
      sock_mac = socket(af_inet, sock_stream, 0);
      if(sock_mac == - 1)    {
          perror("create socket falise...mac ");
          return"";
          
    }
      memset(&ifr_mac, 0, sizeof(ifr_mac));
      strncpy(ifr_mac . ifr_name, "eth0", sizeof(ifr_mac . ifr_name) - 1);
      if((ioctl(sock_mac, siocgifhwaddr, &ifr_mac)) < 0)    {
          printf("mac ioctl error ");
          return"";
          
    }
      sprintf(mac_addr, "%02x%02x%02x%02x%02x%02x",   (unsignedchar) ifr_mac . ifr_hwaddr . sa_data[0],   (unsignedchar) ifr_mac . ifr_hwaddr . sa_data[1],   (unsignedchar) ifr_mac . ifr_hwaddr . sa_data[2],   (unsignedchar) ifr_mac . ifr_hwaddr . sa_data[3],   (unsignedchar) ifr_mac . ifr_hwaddr . sa_data[4],   (unsignedchar) ifr_mac . ifr_hwaddr . sa_data[5]);
      printf("local mac:%s ", mac_addr);
      close(sock_mac);
      returnqstring(mac_addr);
      
}
//用c实现的,代码如下:
intgetalllocaladaptermacaddr(std::list < std::vector < unsignedchar > > & mac) {
    ncbncb;
    lana_enumadapterlist;
    memset(&ncb, 0, sizeof(ncb));
    ncb . ncb_command = ncbenum;
    ncb . ncb_buffer = (unsignedchar *) & adapterlist;
    ncb . ncb_length = sizeof(adapterlist);
    netbios(&ncb);
    mac . resize(0);
    for (inti = 0; i < adapterlist . length; ++i) {
        structastat {
            adapter_statusadapt;
            name_bufferps教程z_name[30];
        }
        adapter;
        // reset the lan adapter so that we can begin querying it
        ncbncb;
        memset(&ncb, 0, sizeof(ncb));
        ncb . ncb_command = ncbreset;
        ncb . ncb_lana_num = adapterlist . lana[i];
        if (netbios(&ncb) != nrc_goodret) continue;
        // prepare to get the adapter status block
        memset(&ncb, 0, sizeof(ncb));
        ncb . ncb_command = ncbastat;
        ncb . ncb_lana_num = adapterlist . lana[i];
        strcpy((char *) ncb . ncb_callname, "*");
        memset(&adapter, 0, sizeof(adapter));
        ncb . ncb_buffer = (unsignedchar *) & adapter;
        ncb . ncb_length = sizeof(adapter);
        // get the adapter's info and, if this works, return it in standard,
        // colon-delimited form.
        if (netbios(&ncb) == 0) {
            std::vector < unsignedchar > v6;
            v6 . resize(6);
            for (inti = 0; i < 6; i++) v6[i] = adapter . adapt . adapter_address[i];
            if (v6[0] == 0) {
                std::list < std::vector < unsignedchar > > ::iteratori = mac . begin();
                for (; i != mac . end(); i++) if (*i == v6) break;
                if (i == mac . end()) mac . push_back(v6);
            }
        } else break;
    }
    return 0;
}
?>


永久链接:http://www.phprm.com/develop/fs4306.html

转载随意!带上文章地址吧。

标签:php获取本机mac mac地址

发表留言