应用软件中经常有需要显示mac地址的功能,方便用户判断当前联网状态,如果是在多网卡存在(无线,有线等)下,网络会经常切换,获取到的MAC地址可能与预期不同,现给出指定网卡获取mac地址的方法。
void get_mac(Mac_Address &mac_address)
{
int fd = -
1
struct ifreq buf
snprintf(mac_address,sizeof(mac_address),
"00:00:00:00:00:00")
if((fd = socket(AF_INET, SOCK_DGRAM,
0)) <
0)
{
return
}
//wlan0代表网卡的名字
strncpy(buf
.ifr_ifrn
.ifrn_name,
"wlan0",sizeof(buf
.ifr_ifrn
.ifrn_name)-
1)
if((ioctl(fd, SIOCGIFHWADDR, &buf)) != -
1)
{
snprintf(mac_address, sizeof(),
"x:x:x:x:x:x", buf
.ifr_hwaddr
.sa_data[
0],buf
.ifr_hwaddr
.sa_data[
1],
buf
.ifr_hwaddr
.sa_data[
2], buf
.ifr_hwaddr
.sa_data[
3],
buf
.ifr_hwaddr
.sa_data[
4]), buf
.ifr_hwaddr
.sa_data[
5])
}
close(fd)
return
}
如上。