C++?QT實(shí)現(xiàn)獲取本機(jī)網(wǎng)卡信息
本文將利用qt自帶的QNetworkInterface接口以及c++Iphlpapi庫,獲取當(dāng)前windows電腦下的網(wǎng)卡型號(hào)、物理地址、ip地址、子網(wǎng)掩碼、網(wǎng)關(guān)等信息。
#include <QtNetwork/QNetworkInterface>
#include <iostream>
#include <Windows.h>
#include <iphlpapi.h>
#pragma comment(lib, "Iphlpapi.lib")
//獲取對(duì)應(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)存不夠,重新申請(qǐng)
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();
//獲取型號(hào)、ip地址、子網(wǎng)掩碼、網(wǎng)關(guān)
MatchNetcardInfo(netcardVer);
//添加到容器
netcardList.append(netcardVer);
}
}
到此這篇關(guān)于C++ QT實(shí)現(xiàn)獲取本機(jī)網(wǎng)卡信息的文章就介紹到這了,更多相關(guān)C++ QT獲取網(wǎng)卡信息內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vscode C++遠(yuǎn)程調(diào)試運(yùn)行(學(xué)習(xí)C++用)
這篇文章主要介紹了vscode C++遠(yuǎn)程調(diào)試運(yùn)行(學(xué)習(xí)C++用),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04
Visual?C++?6.0新建一個(gè)C語言文件的圖文教程
本教程適用于C語言初學(xué)者,本文主要介紹了Visual?C++?6.0新建一個(gè)C語言文件的圖文教程,具有一定的參考價(jià)值,感興趣的可以了解一下2024-06-06
C++ Opencv imfill孔洞填充函數(shù)的實(shí)現(xiàn)思路與代碼
在Matlab下,使用imfill可以很容易的完成孔洞填充操作,下面這篇文章主要給大家介紹了關(guān)于C++ Opencv imfill孔洞填充函數(shù)的實(shí)現(xiàn)思路與代碼,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-09-09
C++?OpenCV實(shí)現(xiàn)二維碼檢測(cè)功能
這篇文章主要介紹了如何利用C++?OpenCV實(shí)現(xiàn)二維碼檢測(cè)功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-01-01
一文搞懂C++中的四種強(qiáng)制類型轉(zhuǎn)換
很多朋友向小編了解C語言中怎么進(jìn)行強(qiáng)制類型轉(zhuǎn)換呢?在這小編告訴大家強(qiáng)制類型轉(zhuǎn)換可以分為兩種,一種是隱式類型轉(zhuǎn)換一種是顯示類型轉(zhuǎn)換,下面通過示例代碼給大家介紹下,需要的朋友參考下吧2021-07-07

