C++?QT實現獲取本機網卡信息
更新時間:2024年01月24日 09:36:46 作者:bangtan輝
這篇文章主要為大家詳細介紹了如何利用qt自帶的QNetworkInterface接口以及c++Iphlpapi庫,獲取當前windows電腦下的網卡信息,需要的可以參考下
本文將利用qt自帶的QNetworkInterface接口以及c++Iphlpapi庫,獲取當前windows電腦下的網卡型號、物理地址、ip地址、子網掩碼、網關等信息。
#include <QtNetwork/QNetworkInterface> #include <iostream> #include <Windows.h> #include <iphlpapi.h> #pragma comment(lib, "Iphlpapi.lib") //獲取對應網卡部分信息 BOOL MatchNetcardInfo(UiNetcardVersion &netcardVer) { PIP_ADAPTER_INFO pIPAdapterInfo = new IP_ADAPTER_INFO(); PIP_ADAPTER_INFO adapters = nullptr; ULONG size = sizeof(IP_ADAPTER_INFO); int nRet = GetAdaptersInfo(pIPAdapterInfo, &size); //pIPAdapterInfo內存不夠,重新申請 if (ERROR_BUFFER_OVERFLOW == nRet) { delete pIPAdapterInfo; pIPAdapterInfo = (PIP_ADAPTER_INFO)new byte[size]; nRet = GetAdaptersInfo(pIPAdapterInfo, &size); } if (ERROR_SUCCESS == nRet) { adapters = pIPAdapterInfo; while (adapters) { //以XX-XX-XX-XX-XX-XX的形式輸出MAC char buf[20]{0}; sprintf(buf, "%02X:%02X:%02X:%02X:%02X:%02X", adapters->Address[0], adapters->Address[1], adapters->Address[2], adapters->Address[3], adapters->Address[4], adapters->Address[5]); QString macTmp = buf; if(macTmp != netcardVer.macAddr){ adapters = adapters->Next; continue; } netcardVer.desc = adapters->Description; //可能網卡有多IP,因此通過循環(huán)去判斷 IP_ADDR_STRING* pIpAddrString = &(adapters->IpAddressList); do { netcardVer.ipAddr = pIpAddrString->IpAddress.String; netcardVer.netMask = pIpAddrString->IpMask.String; netcardVer.gateway = adapters->GatewayList.IpAddress.String; pIpAddrString = pIpAddrString->Next; } while (pIpAddrString); break; } } //釋放分配的內存 if (pIPAdapterInfo) delete pIPAdapterInfo; return true; } //獲取網卡信息 void GetNetcardInfo(){ QList<UiNetcardVersion> netcardList; netcardList.clear(); QList<QNetworkInterface> interfaces = QNetworkInterface::allInterfaces(); foreach(const QNetworkInterface& it, interfaces){ if(QNetworkInterface::Loopback == it.type()) continue; UiNetcardVersion netcardVer; //獲取名稱和mac地址 netcardVer.name = it.humanReadableName(); netcardVer.macAddr = it.hardwareAddress(); //獲取型號、ip地址、子網掩碼、網關 MatchNetcardInfo(netcardVer); //添加到容器 netcardList.append(netcardVer); } }
到此這篇關于C++ QT實現獲取本機網卡信息的文章就介紹到這了,更多相關C++ QT獲取網卡信息內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
一文詳解C++關鍵字nullptr及與NULL的區(qū)別
這篇文章主要給大家詳細介紹了C++關鍵字nullptr,及?NULL與nullptr的區(qū)別,文中通過代碼示例介紹的非常詳細,需要的朋友可以參考下2023-06-06