如何查找 MAC 地址

how to find a mac address?

本文关键字:MAC 地址 查找 何查找      更新时间:2023-10-16

如何在 C++ 中找到当前正在运行应用程序的计算机的 MAC 地址,然后将该 Mac 地址与某个 Mac 地址进行比较?

因此,假设我们要比较的某些Mac地址是AB-12-CD-34-EF-56,如何找到运行应用程序的Mac地址,然后将该Mac地址与AB-12-CD-34-EF-56 MAC地址进行比较? 做这样的事情最好和最简单的方法是什么?

在Windows上,您可以使用函数GetAdaptersAddresses()来获取包含PhysicalAddress[MAX_ADAPTER_ADDRESS_LENGTH];IP_ADAPTER_ADDRESSES结构(即Mac地址)。

此函数将引入库Iphlpapi.lib和头文件<iphlpapi.h>作为依赖项。一个简单的示例,它将从可用适配器打印所有 mac 地址:

#include <Winsock2.h>
#include <iphlpapi.h>
#include <cstdint>
#include <cstdio>
#include <cstdlib>
#include <vector>
#pragma comment(lib, "IPHLPAPI.lib")
int main(int argc, char* argv[]){
  ULONG outBufLen = sizeof(IP_ADAPTER_ADDRESSES);
  GetAdaptersAddresses(0, 0, NULL, NULL, &outBufLen);
  std::vector<uint8_t> bytes(outBufLen, 0);
  PIP_ADAPTER_ADDRESSES pCurrAddresses = (IP_ADAPTER_ADDRESSES *)bytes.data();
  DWORD dwRetVal = GetAdaptersAddresses(0, 0, NULL, pCurrAddresses, &outBufLen);
  if (dwRetVal == NO_ERROR) {
    while (pCurrAddresses != NULL){ 
      for (size_t i = 0; i < (int) pCurrAddresses->PhysicalAddressLength; i++) {
        if (i == (pCurrAddresses->PhysicalAddressLength - 1))
          std::printf("%.2Xn", (int) pCurrAddresses->PhysicalAddress[i]);
        else
          std::printf("%.2X-",(int) pCurrAddresses->PhysicalAddress[i]);
      }
      pCurrAddresses = pCurrAddresses->Next;
    }
  }
  std::system("pause");
  return 0;
}