当前位置:C++技术网 > 资讯 > Windows中C++获取本机Mac地址

Windows中C++获取本机Mac地址

更新时间:2016-10-13 18:27:31浏览次数:1+次

    MAC(Medium/Media Access Control)地址,用来表示互联网上每一个站点的标识符,采用十六进制数表示,共六个字节(48位)。其中,前三个字节是由IEEE的注册管理机构RA负责给不同厂家分配的代码(高位24位),也称为"编制上唯一的标识符"(Organizationally Unique Identifier),后三个字节(低位24位)由各厂家自行指派给生产的适配器接口,称为扩展标识符(唯一性)。一个地址块可以生成2个不同的地址。MAC地址实际上就是适配器地址或适配器标识符EUI-48。

    Windows中C++获取本机MAC地址的代码函数如下:

#include <WinSock2.h> 
#include "Iphlpapi.h" 
#pragma comment(lib,"Iphlpapi.lib")

void GetMac(byte * mac)
{
    PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO(); 
    unsigned long stSize = sizeof(IP_ADAPTER_INFO); 
    int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize); 
    if (ERROR_BUFFER_OVERFLOW == nRel) 
    { 
        delete pIpAdapterInfo; 
        pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize]; 
        nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);     
    } 
    if (ERROR_SUCCESS == nRel) 
    { 
        while (pIpAdapterInfo) 
        { 
            memcpy(mac,pIpAdapterInfo->Address,8);
            break;//获取到第一个网卡的MAC 
        } 
    } 
    if (pIpAdapterInfo)delete pIpAdapterInfo; 
}
void main(int argc, char* argv[]) 
{
    byte mac[8]={0};
    GetMac(mac);
    printf("本机MAC:");
    for (DWORD i = 0; i < 6; i++)
    {
        if (i < 5) 
        { 
            printf("%02X-", mac[i]); 
        } 
        else 
        { 
            printf("%02X", mac[i]); 
        }
    }
    printf("\n");
    system("pause");
}

    效果图如下:

Windows中C++获取本机Mac地址

    这个实现代码网上很多,不过感觉比较臃肿,我这里就精简一个版本,并包装好一个函数,供以后需要的时候,随时取用。