如何在C++中找到应用程序当前正在运行的计算机的mac地址,然后将该mac地址与某个mac地址进行比较?如何找到一个mac地址?
因此可以说我们想要比较的某个mac地址是AB-12-CD-34-EF-56
,如何找到运行该应用程序的mac地址,然后将该mac地址与AB-12-CD-34-EF-56
mac地址进行比较?做这样的事情的最好和最简单的方法是什么?
如何在C++中找到应用程序当前正在运行的计算机的mac地址,然后将该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];
(这是mac地址)的IP_ADAPTER_ADDRESSES
结构。
该函数将引入库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("%.2X\n", (int) pCurrAddresses->PhysicalAddress[i]);
else
std::printf("%.2X-",(int) pCurrAddresses->PhysicalAddress[i]);
}
pCurrAddresses = pCurrAddresses->Next;
}
}
std::system("pause");
return 0;
}
不要'新的POD()'。使用'malloc'或'HeapAlloc'来保持特定的平台...或只是一个'std :: vector
@CodeAngry为什么我不应该在POD中使用'new'有什么具体原因吗?之所以我在这里使用'new'是因为我经常阅读SO,所以'malloc'不应该在C++中使用。即http://stackoverflow.com/questions/184537/in-what-cases-do-i-use-malloc-vs-new – Constantin 2014-07-09 07:59:02
他们说,不使用'malloc'出于同样的原因,因为不使用' new'。为了避免裸指针,因为人们倾向于忘记“释放”/“删除”它们,特别是在具有多个退出'(返回)'的代码中。 [检查rastertek DX教程的代码,你会看到。] std :: vector <>'释放内存,对于POD和对象都是很好的。经验法则是,除非你真的知道你在做什么,谁拥有对象并访问它,并且是异常安全的......不要使用new/malloc。为您的堆对象存储需求使用'std :: containers'或'std :: unique_ptr'。 - * Hai bafta!* – CodeAngry 2014-07-09 08:04:27
这完全取决于您正在运行的操作系统。鉴于你已经标记了这个VC++,你必须在Windows网络API中寻找适当的函数。 – 2012-04-28 15:16:52
[visual 6.0和查找mac地址]的可能的重复(http://stackoverflow.com/questions/10365739/visual-6-0-and-finding-mac-address) – Joe 2012-04-28 18:30:47