2020-10-12获取网卡的MAC地址

8 篇文章 0 订阅

因为项目中需要使用liscence,所以就想到了使用网卡的MAC地址加密。这里需要获取网卡的MAC地址。

首先使用的是Netbios()函数获取MAC地址,但是发现只获取了正在联网使用的那个网卡的MAC地址,不能获取所有的网卡MAC地址。

通过这个网站https://www.codeguru.com/cpp/i-n/network/networkinformation/article.php/c5451/Three-ways-to-get-your-MAC-address.htm使用GetAdaptersInfo()函数可以获取所有的网卡MAC地址。

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

 

static bool GetMACaddress(char *pMAC,int nType,char *pDescription)
{
    USES_CONVERSION;
    char szMac[100] = { 0 };
    IP_ADAPTER_INFO AdapterInfo[16];            // Allocate information for up to 16 NICs
    DWORD dwBufLen = sizeof(AdapterInfo);        // Save the memory size of buffer

    DWORD dwStatus = GetAdaptersInfo(            // Call GetAdapterInfo
        AdapterInfo,                            // [out] buffer to receive data
        &dwBufLen);                                // [in] size of receive data buffer
    assert(dwStatus == ERROR_SUCCESS);            // Verify return value is valid, no buffer overflow
    MIB_IF_TYPE_ETHERNET;
    PIP_ADAPTER_INFO pAdapterInfo = AdapterInfo;// Contains pointer to current adapter info
    do {
        if (pAdapterInfo->Type == nType)
        {
            strlwr(pAdapterInfo->Description);
            if (strstr(pAdapterInfo->Description, pDescription) != NULL)
            {
                sprintf(pMAC, "%02X-%02X-%02X-%02X-%02X-%02X",
                    pAdapterInfo->Address[0], pAdapterInfo->Address[1], pAdapterInfo->Address[2],
                    pAdapterInfo->Address[3], pAdapterInfo->Address[4], pAdapterInfo->Address[5]);
                return true;
            }
        }
        memset(szMac, 0, sizeof(szMac));
        pAdapterInfo = pAdapterInfo->Next;        // Progress through linked list
    } while (pAdapterInfo);// Terminate if last adapter
    return false;
}

这里需要PIP_ADAPTER_INFO结构体

PIP_ADAPTER_INFO::Type是网卡类型,6代表有限网卡和网卡 ,71代表虚拟网卡、蓝牙设备,无线网卡。

PIP_ADAPTER_INFO::Description是网卡的描述,无线=wireless 、有限=ether 这个描述字符串不太确定。

PIP_ADAPTER_INFO::Address 是6个字节的MAC地址 是HEX。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值