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

 代码如下复制代码

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,"xxxxxx",

(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<:vector 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 v6;

v6.resize(6);

for (int i=0; i<6; i )

v6[i] = adapter.adapt.adapter_address[i];

if (v6[0] == 0)

{

std::list<:vector 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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值