如何在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