linux网卡MAC地址
warning:
这篇文章距离上次修改已过201天,其中的内容可能已经有所变动。
在Linux系统中,你可以使用ip
命令或者ifconfig
命令来查看网卡的MAC地址。
使用ip
命令查看MAC地址:
ip link show
使用ifconfig
命令查看MAC地址(如果已安装):
ifconfig -a
这两个命令都会显示网卡的信息,包括每张网卡的MAC地址(也称为物理地址或硬件地址)。
如果你想要通过编程方式获取MAC地址,可以使用C语言中的sysconf
函数和sysctl
接口。以下是一个简单的C语言示例,它使用sysctl
获取第一个网络接口的MAC地址:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <net/if.h>
#include <linux/if_ether.h>
int main() {
int mib[6];
size_t len;
char *buf;
struct if_msghdr *ifm;
struct sockaddr_dl *sdl;
mib[0] = CTL_NET;
mib[1] = AF_ROUTE;
mib[2] = 0;
mib[3] = AF_LINK;
mib[4] = NET_RT_IFLIST;
if (sysctl(mib, 5, NULL, &len, NULL, 0) < 0) {
perror("sysctl: mib");
exit(EXIT_FAILURE);
}
if ((buf = malloc(len)) == NULL) {
perror("malloc");
exit(EXIT_FAILURE);
}
if (sysctl(mib, 6, buf, &len, NULL, 0) < 0) {
perror("sysctl: iflist");
exit(EXIT_FAILURE);
}
ifm = (struct if_msghdr *)buf;
sdl = (struct sockaddr_dl *)(ifm + 1);
// skip first interface (lo)
ifm = (struct if_msghdr *)((char *)ifm + ifm->ifm_msglen);
printf("MAC Address: ");
for ( ; ifm->ifm_msglen != 0; ifm = (struct if_msghdr *)((char *)ifm + ifm->ifm_msglen)) {
sdl = (struct sockaddr_dl *)(ifm + 1);
printf("%02x:", (unsigned char)LLADDR(sdl)[0]);
printf("%02x:", (unsigned char)LLADDR(sdl)[1]);
printf("%02x:", (unsigned char)LLADDR(sdl)[2]);
printf("%02x:", (unsigned char)LLADDR(sdl)[3]);
printf("%02x:", (unsigned char)LLADDR(sdl)[4]);
printf("%02x\n", (unsigned char)LLADDR(sdl)[5]);
break; // we only need the first MAC address
}
free(buf);
return 0;
}
这段代码使用sysctl
获取网络接口列表,然后遍历它们以找到第一个非环回接口的MAC地址并打印出来。这个方法通常用于获取网络接口的更多属性,但同样可以用来获取MAC地址。
评论已关闭