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