当前位置: 技术问答>linux和unix
unix、linux下只输出本机mac地址的命令
来源: 互联网 发布时间:2017-04-15
本文导语: unix、linux下只输出本机mac地址的shell命令? 不要ifconfig那种的输出一大堆。。。最好时只输出mac字符串 | 没用过苹果系统,不过我觉得上面的资料已经足够了。 Shell方式,可以根据1、2楼的写...
unix、linux下只输出本机mac地址的shell命令?
不要ifconfig那种的输出一大堆。。。最好时只输出mac字符串
不要ifconfig那种的输出一大堆。。。最好时只输出mac字符串
|
没用过苹果系统,不过我觉得上面的资料已经足够了。
Shell方式,可以根据1、2楼的写法自己改。查查grep和awk基本用法而已。
我的方法,如果用苹果系统有strace,那么跟踪一下ifconfig在获取网卡MAC是的syscall。看看是否确如我提供的那个ioctl。如果是,google苹果系统下这个API的头文件;如果不是,用ifconfig的那个syscall。
Shell方式,可以根据1、2楼的写法自己改。查查grep和awk基本用法而已。
我的方法,如果用苹果系统有strace,那么跟踪一下ifconfig在获取网卡MAC是的syscall。看看是否确如我提供的那个ioctl。如果是,google苹果系统下这个API的头文件;如果不是,用ifconfig的那个syscall。
|
# ifconfig | grep HWaddr | awk '{print $4,$5}'
HWaddr 00:50:56:8E:00:3B
HWaddr 52:54:00:B8:7D:FA
#
HWaddr 00:50:56:8E:00:3B
HWaddr 52:54:00:B8:7D:FA
#
|
ifconfig | awk '{print $5}' | head -1
|
我想已经猜到楼主意欲何为了。。。
楼主还是直接用ioctl吧
楼主还是直接用ioctl吧
#include
#include
#include
#include
#include
#include
#include
#include
#include
int getmac(char *ethname, char *macbuf)
{
int sock;
struct ifreq iface;
char tmp_mac[10];
sock = socket(PF_INET, SOCK_DGRAM, 0);
strcpy(iface.ifr_name, ethname);
if(ioctl(sock, SIOCGIFHWADDR, &iface) != 0) {
close(sock);
return 1;
}
memcpy(tmp_mac, iface.ifr_hwaddr.sa_data, 6);
sprintf(macbuf, "%02X:%02X:%02X:%02X:%02X:%02X",
tmp_mac[0] & 0xFF, tmp_mac[1] & 0xFF, tmp_mac[2] &0xFF,
tmp_mac[3] & 0xFF, tmp_mac[4] & 0xFF, tmp_mac[5] & 0xFF);
return 0;
}
int main(void)
{
char buf[256];
getmac("eth0", buf);
puts(buf);
return 0;
}