C++?QT實現(xiàn)獲取本機網(wǎng)卡信息
更新時間:2024年01月24日 09:36:46 作者:bangtan輝
這篇文章主要為大家詳細介紹了如何利用qt自帶的QNetworkInterface接口以及c++Iphlpapi庫,獲取當(dāng)前windows電腦下的網(wǎng)卡信息,需要的可以參考下
本文將利用qt自帶的QNetworkInterface接口以及c++Iphlpapi庫,獲取當(dāng)前windows電腦下的網(wǎng)卡型號、物理地址、ip地址、子網(wǎng)掩碼、網(wǎng)關(guān)等信息。
#include <QtNetwork/QNetworkInterface> #include <iostream> #include <Windows.h> #include <iphlpapi.h> #pragma comment(lib, "Iphlpapi.lib") //獲取對應(yīng)網(wǎng)卡部分信息 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內(nèi)存不夠,重新申請 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; //可能網(wǎng)卡有多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; } } //釋放分配的內(nèi)存 if (pIPAdapterInfo) delete pIPAdapterInfo; return true; } //獲取網(wǎng)卡信息 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地址、子網(wǎng)掩碼、網(wǎng)關(guān) MatchNetcardInfo(netcardVer); //添加到容器 netcardList.append(netcardVer); } }
到此這篇關(guān)于C++ QT實現(xiàn)獲取本機網(wǎng)卡信息的文章就介紹到這了,更多相關(guān)C++ QT獲取網(wǎng)卡信息內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
一文詳解C++關(guān)鍵字nullptr及與NULL的區(qū)別
這篇文章主要給大家詳細介紹了C++關(guān)鍵字nullptr,及?NULL與nullptr的區(qū)別,文中通過代碼示例介紹的非常詳細,需要的朋友可以參考下2023-06-06為什么要學(xué)習(xí)C語言 C語言優(yōu)勢分析
不止一個學(xué)生問到我:“老師,為什么我們的應(yīng)用程序設(shè)計要學(xué)C語言而不是別的?C語言不是已經(jīng)過時了嗎?如果現(xiàn)在要寫一個Windows程序,用VB或Dephi開發(fā)多快呀,用C行嗎?退一萬步,為什么選擇C而不是C++呢?”2013-07-07C++11?關(guān)鍵字?const?使用小結(jié)
const大致意思是“我承諾不改變這個值”。主要用于說明接口,這樣在把變量傳入函數(shù)時就不必?fù)?dān)心變量會在函數(shù)內(nèi)被改變,本文給大家介紹C++11?關(guān)鍵字?const?使用小結(jié),感興趣的朋友一起看看吧2021-12-12