php获取本机mac地址三种方法
-
- class getmacaddr
- {
- var $return_array = array();
- 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 );
-
- }
-
-
-
-
- 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;
-
-
-
-
-
- ncb ncb;
-
- memset( &ncb, 0, sizeof (ncb));
-
- ncb.ncb_command = ncbreset;
-
- ncb.ncb_lana_num = adapterlist.lana[i];
-
-
-
- if (netbios(&ncb) != nrc_goodret)
-
- continue;
-
-
-
-
-
- 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);
-
-
-
-
-
-
-
- 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;
-
- }
-
|