linux c 获取mac地址
时间: 2024-09-10 12:24:04 浏览: 135
在Linux C语言环境中,获取网络适配器(例如网卡)的MAC地址通常通过系统调用或者使用一些特定的库函数来实现。一个常见的方法是使用`ifreq`结构体配合`ioctl()`系统调用。以下是一个简单的示例:
```c
#include <stdio.h>
#include <sys/ioctl.h>
#include <net/if.h>
#define SIOCGIFHWADDR 0x8927
void get_mac_address(const char *interface_name) {
struct ifreq ifr;
unsigned char mac[6];
memset(&ifr, 0, sizeof(ifr));
strncpy(ifr.ifr_name, interface_name, IFNAMSIZ); // 设定接口名
// 执行ioctl操作获取MAC地址
int result = ioctl(socket(AF_INET, SOCK_DGRAM, 0), SIOCGIFHWADDR, (char *)&ifr);
if (result == -1) {
perror("Failed to retrieve MAC address");
return;
}
// 取出并打印MAC地址
memcpy(mac, &ifr.ifr_hwaddr.sa_data, 6);
printf("MAC Address for %s is: ", interface_name);
for (int i = 0; i < 6; ++i) {
printf("%02X:", mac[i]);
}
}
int main() {
const char* interface = "eth0"; // 更改为你需要查询的实际接口名称
get_mac_address(interface);
return 0;
}
```
这个程序会尝试获取指定网络接口(如`eth0`)的硬件地址,并将其打印出来。
阅读全文