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
转载随意!带上文章地址吧。