您的位置:首页 > 运维架构 > Linux

linux下获取所有网卡mac地址(C语言)

2013-05-13 16:56 525 查看
linux下获取所有网卡mac地址(C语言)

网卡包含lo,ethX系列

//文件getmac.c

#include <stdio.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <string.h>
void getmac();

int main()
{
getmac();
return 0;
}

void getmac()
{
#define MAXINTERFACES 16
int fd, interface;
struct ifreq buf[MAXINTERFACES];
struct ifconf ifc;
char mac[32] = {0};

if((fd = socket(AF_INET, SOCK_DGRAM, 0)) >= 0)
{
int i = 0;
ifc.ifc_len = sizeof(buf);
ifc.ifc_buf = (caddr_t)buf;
if (!ioctl(fd, SIOCGIFCONF, (char *)&ifc))
{
interface = ifc.ifc_len / sizeof(struct ifreq);
printf("interface num is %d\n", interface);
while (i < interface)
{
printf("net device %s\n", buf[i].ifr_name);
if (!(ioctl(fd, SIOCGIFHWADDR, (char *)&buf[i])))
{
sprintf(mac, "%02X:%02X:%02X:%02X:%02X:%02X",
(unsigned char)buf[i].ifr_hwaddr.sa_data[0],
(unsigned char)buf[i].ifr_hwaddr.sa_data[1],
(unsigned char)buf[i].ifr_hwaddr.sa_data[2],
(unsigned char)buf[i].ifr_hwaddr.sa_data[3],
(unsigned char)buf[i].ifr_hwaddr.sa_data[4],
(unsigned char)buf[i].ifr_hwaddr.sa_data[5]);
printf("HWaddr %s\n", mac);
}
printf("\n");
i++;
}
}
}
}

编译:

gcc -g getmac.c

执行:

./a.out

结果:

interface num is 2

net device lo

HWaddr 00:00:00:00:00:00

net device eth0

HWaddr D4:4D:5E:54:83:3C
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: