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 @   htj10  阅读(438)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
TOP
点击右上角即可分享
微信分享提示