加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2022-02-09 18:41:20 所属栏目:PHP教程 来源:互联网
导读://方法一 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: b
  //方法一
  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;//开源代码Cuoxin.com
  
  } 

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读