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

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

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

Tags: php获取本机mac mac地址

分享到:

相关文章