C++获取电脑物理地址
·
C++获取电脑物理地址
#include "GetMacAddres.h"
#include <iostream>
#include <winsock2.h>
#include <iphlpapi.h>
#include <iomanip>
#include <sstream>
#pragma comment(lib, "iphlpapi.lib")
#pragma comment(lib, "ws2_32.lib")
int main() {
PIP_ADAPTER_INFO pAdapterInfo;
PIP_ADAPTER_INFO pAdapter = NULL;
DWORD dwRetVal = 0;
UINT i;
ULONG ulOutBufLen = sizeof(IP_ADAPTER_INFO);
pAdapterInfo = (IP_ADAPTER_INFO*)malloc(sizeof(IP_ADAPTER_INFO));
if (pAdapterInfo == NULL) {
std::cout << "Error allocating memory needed to call GetAdaptersinfo" << std::endl;
return 1;
}
// 首次调用获取所需缓冲区大小
if (GetAdaptersInfo(pAdapterInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW) {
free(pAdapterInfo);
pAdapterInfo = (IP_ADAPTER_INFO*)malloc(ulOutBufLen);
if (pAdapterInfo == NULL) {
std::cout << "Error allocating memory needed to call GetAdaptersinfo" << std::endl;
return 1;
}
}
// 获取适配器信息
if ((dwRetVal = GetAdaptersInfo(pAdapterInfo, &ulOutBufLen)) == NO_ERROR)
{
pAdapter = pAdapterInfo;
std::string info = "";//将物理地址提取到字符串
while (pAdapter) {
std::cout << "适配器名称: " << pAdapter->AdapterName << std::endl;
std::cout << "描述: " << pAdapter->Description << std::endl;
std::cout << "物理地址: ";
for (i = 0; i < pAdapter->AddressLength; i++)
{
if (i == (pAdapter->AddressLength - 1))
{
std::stringstream ss;
ss << std::hex << (int)pAdapter->Address[i];
info += ss.str();
std::cout << std::hex << std::setw(2) << std::setfill('0') << (int)pAdapter->Address[i];
}
else
{
std::stringstream ss;
ss << std::hex << (int)pAdapter->Address[i];
info += ss.str();
std::cout << std::hex << std::setw(2) << std::setfill('0') << (int)pAdapter->Address[i] << "-";
/* std::cout << std::hex << std::setw(2) << std::setfill('0') << (int)pAdapter->Address[i] ;*/
}
}
std::cout << std::endl;
std::cout << info<< std::endl;
info = "";
std::cout << std::dec << std::endl; // 恢复十进制输出
std::cout << "----------------------------------------" << std::endl;
pAdapter = pAdapter->Next;
}
}
else {
std::cout << "GetAdaptersInfo failed with error: " << dwRetVal << std::endl;
}
if (pAdapterInfo)
free(pAdapterInfo);
std::cout << "按任意键退出..." << std::endl;
std::cin.get();
return 0;
}
更多推荐


所有评论(0)