当前位置:首页 > PHP教程 > php高级应用 > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2014-08-16 14:26:19 浏览: 评论:0 
  1. //方法一 
  2. class getmacaddr 
  3. { 
  4.         var $return_array = array(); // 返回带有mac地址的字串数组 
  5.         var $mac_addr; 
  6.          
  7.         function getmacaddr($os_type) 
  8.         { 
  9.                 switch ( strtolower($os_type) ) 
  10.                 { 
  11.                         case "linux": 
  12.                                 $this->forlinux(); 
  13.                                 break; 
  14.                         case "solaris": 
  15.                                 break; 
  16.                         case "unix": 
  17.                                 break; 
  18.                         case "aix": 
  19.                                 break; 
  20.                         default: 
  21.                                 $this->forwindows(); 
  22.                                 break; 
  23.                 } 
  24.                  
  25.                 $temp_array = array(); 
  26.                 foreach ( $this->return_array as $value ) 
  27.                 { 
  28.                         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 ) ) 
  29.                         { 
  30.                                 $this->mac_addr = $temp_array[0]; 
  31.                                 break; 
  32.                         } 
  33.                 } 
  34.                 unset($temp_array); 
  35.                 return $this->mac_addr; 
  36.         } 
  37.  
  38.         function forwindows() 
  39.         { 
  40.                 @exec("ipconfig /all", $this->return_array); 
  41.                 if ( $this->return_array ) 
  42.                         return $this->return_array; 
  43.                 else{ 
  44.                         $ipconfig = $_server["windir"]."system32ipconfig.exe"; 
  45.                         if ( is_file($ipconfig) ) 
  46.                                 @exec($ipconfig." /all", $this->return_array); 
  47.                         else 
  48.                                 @exec($_server["windir"]."systemipconfig.exe /all", $this->return_array); 
  49.                         return $this->return_array; 
  50.                 } 
  51.         } 
  52.  
  53.         function forlinux() 
  54.         { 
  55.                 @exec("ifconfig -a", $this->return_array); 
  56.                 return $this->return_array; 
  57.         } 
  58. } 
  59. ?> 
  60. <? 
  61. $mac = new getmacaddr(php_os); 
  62. echo $mac->mac_addr; 
  63.  
  64. //方法二  
  65.  
  66. qstring getlocalmac() 
  67.  
  68.   { 
  69.  
  70.   int sock_mac; 
  71.  
  72.   struct ifreq ifr_mac; 
  73.  
  74.   char mac_addr[30]; 
  75.  
  76.   sock_mac = socket( af_inet, sock_stream, 0 ); 
  77.  
  78.   if( sock_mac == -1) 
  79.  
  80.   { 
  81.  
  82.   perror("create socket falise...mac "); 
  83.  
  84.   return ""; 
  85.  
  86.   } 
  87.  
  88.   memset(&ifr_mac,0,sizeof(ifr_mac)); 
  89.  
  90.   strncpy(ifr_mac.ifr_name, "eth0", sizeof(ifr_mac.ifr_name)-1); 
  91.  
  92.   if( (ioctl( sock_mac, siocgifhwaddr, &ifr_mac)) < 0) 
  93.  
  94.   { 
  95.  
  96.   printf("mac ioctl error "); 
  97.  
  98.   return ""; 
  99.  
  100.   } 
  101.  
  102.   sprintf(mac_addr,"%02x%02x%02x%02x%02x%02x", 
  103.  
  104.   (unsigned char)ifr_mac.ifr_hwaddr.sa_data[0], 
  105.  
  106.   (unsigned char)ifr_mac.ifr_hwaddr.sa_data[1], 
  107.  
  108.   (unsigned char)ifr_mac.ifr_hwaddr.sa_data[2], 
  109.  
  110.   (unsigned char)ifr_mac.ifr_hwaddr.sa_data[3], 
  111.  
  112.   (unsigned char)ifr_mac.ifr_hwaddr.sa_data[4], 
  113.  
  114.   (unsigned char)ifr_mac.ifr_hwaddr.sa_data[5]); 
  115.  
  116.   printf("local mac:%s ",mac_addr); 
  117.  
  118.   close( sock_mac ); 
  119.  
  120.   return qstring( mac_addr ); 
  121.  
  122.   } 
  123.   
  124.  
  125. //用c实现的,代码如下: 
  126.   
  127. int getalllocaladaptermacaddr(std::list<std::vector<unsigned char> >& mac) 
  128.  
  129. { 
  130.  
  131.     ncb ncb; 
  132.  
  133.     lana_enum adapterlist; 
  134.  
  135.   
  136.  
  137.     memset(&ncb, 0, sizeof(ncb)); 
  138.  
  139.     ncb.ncb_command = ncbenum; 
  140.  
  141.     ncb.ncb_buffer = (unsigned char *)&adapterlist; 
  142.  
  143.     ncb.ncb_length = sizeof(adapterlist); 
  144.  
  145.     netbios(&ncb); 
  146.  
  147.   
  148.  
  149.     mac.resize(0); 
  150.  
  151.   
  152.  
  153.     for (int i = 0; i < adapterlist.length ; ++i ) 
  154.  
  155.     { 
  156.  
  157.         struct astat 
  158.  
  159.         { 
  160.  
  161.             adapter_status adapt; 
  162.  
  163.             name_buffer    ps教程z_name[30]; 
  164.  
  165.         } adapter; 
  166.  
  167.                    
  168.  
  169.         // reset the lan adapter so that we can begin querying it 
  170.  
  171.         ncb ncb; 
  172.  
  173.         memset( &ncb, 0, sizeof (ncb)); 
  174.  
  175.         ncb.ncb_command  = ncbreset; 
  176.  
  177.         ncb.ncb_lana_num = adapterlist.lana[i]; 
  178.  
  179.                    
  180.  
  181.         if (netbios(&ncb) != nrc_goodret) 
  182.  
  183.             continue; 
  184.  
  185.                    
  186.  
  187.         // prepare to get the adapter status block 
  188.  
  189.         memset(&ncb, 0, sizeof(ncb)) ; 
  190.  
  191.         ncb.ncb_command = ncbastat; 
  192.  
  193.         ncb.ncb_lana_num = adapterlist.lana[ i ]; 
  194.  
  195.         strcpy((char *)ncb.ncb_callname, "*" ); 
  196.  
  197.                   
  198.  
  199.         memset(&adapter, 0, sizeof (adapter)); 
  200.  
  201.         ncb.ncb_buffer = (unsigned char *)&adapter; 
  202.  
  203.         ncb.ncb_length = sizeof (adapter); 
  204.  
  205.                   
  206.  
  207.         // get the adapter's info and, if this works, return it in standard, 
  208.  
  209.         // colon-delimited form. 
  210.  
  211.         if ( netbios( &ncb ) == 0 ) 
  212.  
  213.         { 
  214.  
  215.             std::vector<unsigned char> v6; 
  216.  
  217.             v6.resize(6); 
  218.  
  219.             for (int i=0; i<6; i++) 
  220.  
  221.                 v6[i] = adapter.adapt.adapter_address[i]; 
  222.  
  223.             if (v6[0] == 0) 
  224.  
  225.             { 
  226.  
  227.                 std::list<std::vector<unsigned char> >::iterator i = mac.begin(); 
  228.  
  229.                 for (; i!=mac.end(); i++) if (*i == v6) 
  230.  
  231.                     break; 
  232.  
  233.                 if (i==mac.end()) 
  234.  
  235.                     mac.push_back(v6); 
  236.  
  237.             } 
  238.  
  239.         } 
  240.  
  241.         else 
  242.  
  243.             break; 
  244.  
  245.     } 
  246.  
  247.     return 0;//开源代码phpfensi.com 
  248.  
  249. } 
  250.   

Tags: php获取本机mac mac地址

分享到:

相关文章