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;
}
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐