VC获取mac地址

MAC地址(英语:Media Access Control Address),直译为媒体存取控制位址,也称为局域网地址(LAN Address),MAC位址,以太网地址(Ethernet Address)或物理地址(Physical Address),它是一个用来确认网络设备位置的位址。

vc获取mac地址(参考:http://blog.okbase.net/JO2000/archive/642.html)

#include <atlbase.h>
#include <atlconv.h>
#include <string>
#include <vector>
#include <iphlpapi.h>

using namespace std;
#pragma comment(lib,"Iphlpapi.lib")

std::vector<std::string> GetMac()
{
    std::vector<std::string> vRet;

    ULONG ulAdapterInfoSize = sizeof(IP_ADAPTER_INFO);
    IP_ADAPTER_INFO *pAdapterInfoBkp = NULL, *pAdapterInfo = (IP_ADAPTER_INFO*)new char[ulAdapterInfoSize];
    if (GetAdaptersInfo(pAdapterInfo, &ulAdapterInfoSize) == ERROR_BUFFER_OVERFLOW) // 缓冲区不够大
    {
        delete pAdapterInfo;
        pAdapterInfo = (IP_ADAPTER_INFO*)new char[ulAdapterInfoSize];
        pAdapterInfoBkp = pAdapterInfo;
    }

    if (GetAdaptersInfo(pAdapterInfo, &ulAdapterInfoSize) == NO_ERROR)
    {
        do{ // 遍历所有适配器
            if (pAdapterInfo->Type == MIB_IF_TYPE_ETHERNET)    // 判断是否为以太网, 以太网适配器是 6  无线局域网适配器是 71
            {
                // pAdapterInfo->Description 是适配器描述
                // pAdapterInfo->AdapterName 是适配器名称

                string strMac;
                for (UINT i = 0; i < pAdapterInfo->AddressLength; i++)
                {
                    char szTmp[8];
                    sprintf(szTmp, "%02X%c", pAdapterInfo->Address[i], (i == pAdapterInfo->AddressLength - 1) ? '\0' : '-');
                    strMac.append(szTmp);
                }
                vRet.push_back(strMac);
            }
            pAdapterInfo = pAdapterInfo->Next;
        } while (pAdapterInfo);
    }

    if (pAdapterInfoBkp)
        delete pAdapterInfoBkp;

    return vRet;
}

 

posted @ 2020-10-17 12:05  htj10  阅读(405)  评论(0编辑  收藏  举报
TOP