php专区

 首页 > php专区 > PHP应用 > 常用功能 > php获取本机mac地址三种方法 - php高级应用

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

分享到:
【字体:大 中 小】
导读:
          //方法一classgetmacaddr{var$return_array=array();//返回带有mac地址的字串数组var$mac_addr;functiongetmacaddr($os_type){switch(strtolower($os_type)){caselinux:$this-forlinux();break;......

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

  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. $mac = new getmacaddr(php_os); 
  61. echo $mac->mac_addr; 
  62.  
  63. //方法二  
  64.  
  65. qstring getlocalmac() 
  66.  
  67.   { 
  68.  
  69.   int sock_mac; 
  70.  
  71.   struct ifreq ifr_mac; 
  72.  
  73.   char mac_addr[30]; 
  74.  
  75.   sock_mac = socket( af_inet, sock_stream, 0 ); 
  76.  
  77.   if( sock_mac == -1) 
  78.  
  79.   { 
  80.  
  81.   perror("create socket falise...mac "); 
  82.  
  83.   return ""; 
  84.  
  85.   } 
  86.  
  87.   memset(&ifr_mac,0,sizeof(ifr_mac)); 
  88.  
  89.   strncpy(ifr_mac.ifr_name, "eth0", sizeof(ifr_mac.ifr_name)-1); 
  90.  
  91.   if( (ioctl( sock_mac, siocgifhwaddr, &ifr_mac)) < 0) 
  92.  
  93.   { 
  94.  
  95.   printf("mac ioctl error "); 
  96.  
  97.   return ""; 
  98.  
  99.   } 
  100.  
  101.   sprintf(mac_addr,"%02x%02x%02x%02x%02x%02x", 
  102.  
  103.   (unsigned char)ifr_mac.ifr_hwaddr.sa_data[0], 
  104.  
  105.   (unsigned char)ifr_mac.ifr_hwaddr.sa_data[1], 
  106.  
  107.   (unsigned char)ifr_mac.ifr_hwaddr.sa_data[2], 
  108.  
  109.   (unsigned char)ifr_mac.ifr_hwaddr.sa_data[3], 
  110.  
  111.   (unsigned char)ifr_mac.ifr_hwaddr.sa_data[4], 
  112.  
  113.   (unsigned char)ifr_mac.ifr_hwaddr.sa_data[5]); 
  114.  
  115.   printf("local mac:%s ",mac_addr); 
  116.  
  117.   close( sock_mac ); 
  118.  
  119.   return qstring( mac_addr ); 
  120.  
  121.   } 
  122.   
  123.  
  124. //用c实现的,代码如下: 
  125.   
  126. int getalllocaladaptermacaddr(std::list >& mac) 
  127.  
  128. { 
  129.  
  130.     ncb ncb; 
  131.  
  132.     lana_enum adapterlist; 
  133.  
  134.   
  135.  
  136.     memset(&ncb, 0, sizeof(ncb)); 
  137.  
  138.     ncb.ncb_command = ncbenum; 
  139.  
  140.     ncb.ncb_buffer = (unsigned char *)&adapterlist; 
  141.  
  142.     ncb.ncb_length = sizeof(adapterlist); 
  143.  
  144.     netbios(&ncb); 
  145.  
  146.   
  147.  
  148.     mac.resize(0); 
  149.  
  150.   
  151.  
  152.     for (int i = 0; i < adapterlist.length ; ++i ) 
  153.  
  154.     { 
  155.  
  156.         struct astat 
  157.  
  158.         { 
  159.  
  160.             adapter_status adapt; 
  161.  
  162.             name_buffer    ps教程z_name[30]; 
  163.  
  164.         } adapter; 
  165.  
  166.                    
  167.  
  168.         // reset the lan adapter so that we can begin querying it 
  169.  
  170.         ncb ncb; 
  171.  
  172.         memset( &ncb, 0, sizeof (ncb)); 
  173.  
  174.         ncb.ncb_command  = ncbreset; 
  175.  
  176.         ncb.ncb_lana_num = adapterlist.lana[i]; 
  177.  
  178.                    
  179.  
  180.         if (netbios(&ncb) != nrc_goodret) 
  181.  
  182.             continue; 
  183.  
  184.                    
  185.  
  186.         // prepare to get the adapter status block 
  187.  
  188.         memset(&ncb, 0, sizeof(ncb)) ; 
  189.  
  190.         ncb.ncb_command = ncbastat; 
  191.  
  192.         ncb.ncb_lana_num = adapterlist.lana[ i ]; 
  193.  
  194.         strcpy((char *)ncb.ncb_callname, "*" ); 
  195.  
  196.                   
  197.  
  198.         memset(&adapter, 0, sizeof (adapter)); 
  199.  
  200.         ncb.ncb_buffer = (unsigned char *)&adapter; 
  201.  
  202.         ncb.ncb_length = sizeof (adapter); 
  203.  
  204.                   
  205.  
  206.         // get the adapter's info and, if this works, return it in standard, 
  207.  
  208.         // colon-delimited form. 
  209.  
  210.         if ( netbios( &ncb ) == 0 ) 
  211.  
  212.         { 
  213.  
  214.             std::vector v6; 
  215.  
  216.             v6.resize(6); 
  217.  
  218.             for (int i=0; i<6; i++) 
  219.  
  220.                 v6[i] = adapter.adapt.adapter_address[i]; 
  221.  
  222.             if (v6[0] == 0) 
  223.  
  224.             { 
  225.  
  226.                 std::list >::iterator i = mac.begin(); 
  227.  
  228.                 for (; i!=mac.end(); i++) if (*i == v6) 
  229.  
  230.                     break; 
  231.  
  232.                 if (i==mac.end()) 
  233.  
  234.                     mac.push_back(v6); 
  235.  
  236.             } 
  237.  
  238.         } 
  239.  
  240.         else 
  241.  
  242.             break; 
  243.  
  244.     } 
  245.  
  246.     return 0;//开源代码phpfensi.com 
  247.  
  248. } 
  249.   
分享到:
php ftp上传,下载,删除服务器文件实例 ...
php ftp上传,下载,删除服务器文件实例 php ftp上传,下载,删除服务器文件实例. php ftp传送文件到服务器,实例代码如下:   php ftp删除文件,实例代码如下:   php ftp下载文件,实例代码如下:  
php 缓存技术 - php高级应用
php 缓存技术 关于缓存技术不只在php有,很多系统都有,这是为了减轻服务器压力与数据库压力来做的,本文章从php缓存技术入门到利用缓存实例来告诉你如何应用php来实例文件缓存描述, 先看这个缓存类,代码如下: class cache{  /*  class name: cache  description: control...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……