好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

php获取本机mac地址三种方法 - php高级应用

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高级应用的详细内容...

  阅读:49次