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

linux下获取多个网卡MAC地址

2012-10-23 17:33 771 查看
    #include <arpa/inet.h>

    #include <net/if.h>

    #include <net/if_arp.h>

    #include <netinet/in.h>

    #include <stdio.h>

    #include <sys/ioctl.h>

    #include <sys/socket.h>

    #include <unistd.h>

    #include <stdlib.h>

    #include <stdio.h>

    #include <iostream>

    #include <vector>

    #include <string.h>

    using namespace std;

    const int MAX_MAC_NUM = 128;

    

bool GetMac_1(vector<string>& vecMac)

{

    unsigned char mac[6];    

    memset(mac,0,sizeof(mac));

    struct ifreq ifr;

    int iSoc = socket(AF_INET,SOCK_STREAM,0);

    if(iSoc < 0)

    {

        cout<<"OPen socket Error in _GetMac\n"<<endl;

        return false;

    }

    int iMacNum = 0;

    string strMac;

    char LocalMac[128];

    while(iMacNum < MAX_MAC_NUM)

    {

        memset(&ifr,0,sizeof(ifr));

        sprintf(ifr.ifr_name,"eth%d",iMacNum);

        if(ioctl(iSoc,SIOCGIFHWADDR,&ifr,sizeof(ifr)) == 0)

        {

            memcpy(mac,ifr.ifr_hwaddr.sa_data,6);

            memset(LocalMac,0,128);

            sprintf(LocalMac,"%02X%02X%02X%02X%02X%02X",mac[0],mac[1],mac[2],mac[3],mac[4],mac[5]);

            strMac = LocalMac;

            vecMac.push_back(strMac);

        }

        else

            break;

        ++iMacNum;   

    }

    close(iSoc);

}

 

int main()

{

    vector<string> vecMac;

    GetMac_1(vecMac);

    vector<string>::iterator beg = vecMac.begin();

    vector<string>::iterator end = vecMac.end();

    cout<<"Mac: "<<endl;

    while(beg < end)

    {

        cout<<*beg<<endl;

        ++beg;

    }

        

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息