php获取本机mac地址三种方法
发布:smiling 来源: PHP粉丝网 添加日期:2014-08-16 14:26:19 浏览: 评论:0
- //方法一
- 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;//开源代码phpfensi.com
- }
Tags: php获取本机mac mac地址
- 上一篇:php 缓存技术
- 下一篇:php ftp上传,下载,删除服务器文件实例
相关文章
- ·php获取客户端mac地址程序代码(2014-08-27)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)