int main(int argc, char *argv[]) { struct ifreq ifreq; int sock = 0; char mac[32] = ""; if (argc < 2) { printf("Usage: ./program_name NIC_name"); return 1; } sock = socket(AF_INET, SOCK_STREAM, 0); if (sock < 0) { perror("error sock"); return 2; } strcpy(ifreq.ifr_name, argv[1]); if (ioctl(sock, SIOCGIFHWADDR, &ifreq) < 0) { perror("error ioctl"); return 3; } int i = 0; for (i = 0; i < 6; i++) { sprintf(mac + 3 * i, "%02X:", (unsigned char) ifreq.ifr_hwaddr.sa_data[i]); } mac[strlen(mac) - 1] = 0; printf("MAC: %s\n", mac); return 0; }
时间: 2024-04-28 17:23:25 浏览: 9
这是一个简单的用于获取指定网卡的MAC地址的C语言程序。程序首先检查命令行参数,确保输入了一个正确的网卡名称。然后它创建一个套接字,使用ioctl系统调用来获取指定网卡的MAC地址,最后将MAC地址格式化为十六进制字符串并输出到控制台上。具体来说,程序使用了ifreq结构体来存储网卡的名称和MAC地址信息,使用SIOCGIFHWADDR参数获取MAC地址,使用sprintf函数将MAC地址格式化为十六进制字符串,最后输出到控制台上。
相关问题
C++ 获取 eth0 的 mac 地址
C 获取 eth0 的 mac 地址可以使用 ioctl 函数和 SIOCGIFHWADDR 命令来实现。下面是示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main(int argc, char *argv[]) {
int fd;
struct ifreq ifr;
unsigned char *mac;
fd = socket(AF_INET, SOCK_DGRAM, 0);
ifr.ifr_addr.sa_family = AF_INET;
strncpy(ifr.ifr_name, "eth0", IFNAMSIZ-1);
ioctl(fd, SIOCGIFHWADDR, &ifr);
close(fd);
mac = (unsigned char *)ifr.ifr_hwaddr.sa_data;
printf("MAC address of eth0: %02x:%02x:%02x:%02x:%02x:%02x\n",
mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
return 0;
}
```
希望能为您提供帮助。
C++中获取enp1s0的mac地址
在 C 语言中,可以使用 SIOCGIFHWADDR 命令获取网络设备的 MAC 地址,其中 enp1s0 是一个网络接口的名称。以下是一个示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
struct ifreq ifr;
int fd;
fd = socket(AF_INET, SOCK_DGRAM, 0);
if (fd < 0) {
perror("socket");
exit(1);
}
strncpy(ifr.ifr_name, "enp1s0", IFNAMSIZ - 1);
ifr.ifr_name[IFNAMSIZ - 1] = '\0';
if (ioctl(fd, SIOCGIFHWADDR, &ifr) < 0) {
perror("ioctl");
close(fd);
exit(1);
}
close(fd);
printf("MAC address: %02x:%02x:%02x:%02x:%02x:%02x\n",
(unsigned char) ifr.ifr_hwaddr.sa_data[0],
(unsigned char) ifr.ifr_hwaddr.sa_data[1],
(unsigned char) ifr.ifr_hwaddr.sa_data[2],
(unsigned char) ifr.ifr_hwaddr.sa_data[3],
(unsigned char) ifr.ifr_hwaddr.sa_data[4],
(unsigned char) ifr.ifr_hwaddr.sa_data[5]);
return 0;
}
```
该程序通过 socket() 函数创建一个套接字,然后使用 ioctl() 函数和 SIOCGIFHWADDR 命令获取 enp1s0 网络接口的 MAC 地址。最后,格式化输出结果。