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

linux下查看网卡名字与mac地址源码

2018-03-20 15:29 302 查看
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <net/if.h>
#include <sys/types.h>
#include <dirent.h>
#define EHOMAC_FILEPATH "/sys/class/net"
1.首先头文件,调用getdirentname(EHOMAC_FILEPATH),可以获得网卡的名字。entry->d_name遍历出每个应用层显示出的网卡名字。

string regMacInfo::getdirentname(string fileaddress)
{
string macinfo = "";
DIR *d = opendir(fileaddress.c_str());
if(NULL== d)
{
return "error";
}
struct dirent * entry;
while((entry=readdir(d))!=NULL)
{
if(strcmp(entry->d_name,".")==0 | strcmp(entry->d_name,"..")==0 |strcmp(entry->d_name,"lo")==0)
{
continue;
}
macinfo=macinfo+"#"+getnamebymacname(entry->d_name);
}
closedir(d);
return macinfo;
}2.上面使用网卡名字获取各个mac地址的函数定义。string regMacInfo::getnamebymacname(string macname)
{
struct ifreq ifreq;
int sock = 0;
char mac[32] = "";
sock = socket(AF_INET,SOCK_STREAM,0);
if(sock < 0)
{
perror("error sock");
return "error";
}
strcpy(ifreq.ifr_name,macname.c_str());
if(ioctl(sock,SIOCGIFHWADDR,&ifreq) < 0)
{
perror("error ioctl");
return "error";
}

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;
return mac;
}本例子直接将两个结合,可以获取ifconfig命令下看到的mac地址。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: