php获取本机mac地址三种方法
//方法一 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; } } ?> <? $mac = new getmacaddr(php_os); echo $mac ->mac_addr; //方法二 qstring getlocalmac() { int sock_mac; struct ifreq ifr_mac; char mac_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" , (unsigned char)ifr_mac.ifr_hwaddr.sa_data[0], (unsigned char)ifr_mac.ifr_hwaddr.sa_data[1], (unsigned char)ifr_mac.ifr_hwaddr.sa_data[2], (unsigned char)ifr_mac.ifr_hwaddr.sa_data[3], (unsigned char)ifr_mac.ifr_hwaddr.sa_data[4], (unsigned char)ifr_mac.ifr_hwaddr.sa_data[5]); printf( "local mac:%s " ,mac_addr); close( sock_mac ); return qstring( mac_addr ); } //用c实现的,代码如下: int getalllocaladaptermacaddr(std::list<std::vector<unsigned char> >& mac) { ncb ncb; lana_enum adapterlist; memset(&ncb, 0, sizeof(ncb)); ncb.ncb_command = ncbenum; ncb.ncb_buffer = (unsigned char *)&adapterlist; ncb.ncb_length = sizeof(adapterlist); netbios(&ncb); mac.resize(0); for (int i = 0; i < adapterlist.length ; ++i ) { struct astat { adapter_status adapt; name_buffer ps教程z_name[30]; } adapter; // reset the lan adapter so that we can begin querying it ncb ncb; 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 = (unsigned char *)&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<unsigned char> v6; v6.resize(6); for (int i=0; i<6; i++) v6[i] = adapter.adapt.adapter_address[i]; if (v6[0] == 0) { std::list<std::vector<unsigned char> >::iterator i = mac.begin(); for (; i!=mac. end (); i++) if (*i == v6) break ; if (i==mac. end ()) mac.push_back(v6); } } else break ; } return 0; //开源代码phpfensi测试数据 }查看更多关于php获取本机mac地址三种方法 - php高级应用的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did30094