#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <net/if.h>
#include <assert.h>
int obtain_mac(const char *ifname, unsigned char *mac, int len)
{
int sk = -1, ret = 0;
struct ifreq ifreq;
assert(ifname);
assert(mac);
assert(len >= 6);
sk = socket(AF_INET, SOCK_STREAM, 0);
if (sk < 0)
{
perror("socket");
ret--;
goto OUT;
}
strcpy(ifreq.ifr_name, ifname);
if (ioctl(sk, SIOCGIFHWADDR, &ifreq) < 0)
{
perror("ioctl");
ret--;
goto OUT;
}
memcpy(mac, (unsigned char *)ifreq.ifr_hwaddr.sa_data, 6);
OUT:
if (sk >= 0)
close(sk);
return ret;
}
int main(int argc, char **argv)
{
unsigned char mac[12];
if (obtain_mac(argv[1], mac, sizeof(mac)) < 0)
return -1;
printf("%02X:%02X:%02X:%02X:%02X:%02X\n",
mac[0],
mac[1],
mac[2],
mac[3],
mac[4],
mac[5]
);
return 0;
}linux获取指定网口的MAC
最新推荐文章于 2024-09-15 04:30:00 发布
本文介绍了一个简单的C程序,该程序用于从指定的网络接口获取MAC地址。通过使用socket编程和ioctl系统调用,程序实现了跨平台的MAC地址读取功能。
2044

被折叠的 条评论
为什么被折叠?



