admin 发表于 2017-10-11 21:24:30

C++的方式获取当前系统的MAC物理地址




// 头文件包含
#include "stdafx.h"
#include <WinSock2.h>
#include <Iphlpapi.h>
#include <iostream>
using namespace std;
// 函数声明
void output(PIP_ADAPTER_INFO pIpAdapterInfo);
// 程序入口
int _tmain(int argc, _TCHAR* argv[])
{
    //PIP_ADAPTER_INFO结构体指针存储本机网卡信息
    PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
    //得到结构体大小,用于GetAdaptersInfo参数
    unsigned long stSize = sizeof(IP_ADAPTER_INFO);
    //调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量
    int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
    if (ERROR_BUFFER_OVERFLOW==nRel)
    {
         //如果函数返回的是ERROR_BUFFER_OVERFLOW
  //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
      //这也是说明为什么stSize既是一个输入量也是一个输出量
      //释放原来的内存空间
      delete pIpAdapterInfo;
      //重新申请内存空间用来存储所有网卡信息
      pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE;
      //再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
      nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);   
    }
    if (ERROR_SUCCESS==nRel)
    {
      //输出网卡信息
      output(pIpAdapterInfo);
    }
    //释放内存空间
    if (pIpAdapterInfo)
    {
      delete pIpAdapterInfo;
    }
    getchar();
    return 0;
}
///函数作用,输出网卡信息
void output(PIP_ADAPTER_INFO pIpAdapterInfo)
{
    //可能有多网卡,因此通过循环去判断
    while (pIpAdapterInfo)
    {
      cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
      cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
      cout<<"网卡MAC地址:"<<pIpAdapterInfo->Address;
      for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)
      if (i==pIpAdapterInfo->AddressLength-1)
      {
            printf("%02x\n", pIpAdapterInfo->Address);
      }
      else
      {
            printf("%02x-", pIpAdapterInfo->Address);
      }
      cout<<"网卡IP地址如下:"<<endl;
      //可能网卡有多IP,因此通过循环去判断
      IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
      do
      {
            cout<<pIpAddrString->IpAddress.String<<endl;
            pIpAddrString=pIpAddrString->Next;
      } while (pIpAddrString);
      pIpAdapterInfo = pIpAdapterInfo->Next;
      cout<<"*****************************************************"<<endl;
    }
    return;
}
页: [1]
查看完整版本: C++的方式获取当前系统的MAC物理地址