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