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,因此通过循环去判断
            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获取网卡信息内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++基于LINUX的文件操作

    C++基于LINUX的文件操作

    这篇文章主要为大家介绍了C++基于LINUX的文件操作示例知识扩充,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • vscode C++远程调试运行(学习C++用)

    vscode C++远程调试运行(学习C++用)

    这篇文章主要介绍了vscode C++远程调试运行(学习C++用),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • c++结构体排序方式(1条件,多条件)

    c++结构体排序方式(1条件,多条件)

    这篇文章主要介绍了c++结构体排序方式(1条件,多条件),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • Visual C++ 6.0新建一个C语言文件的图文教程

    Visual C++ 6.0新建一个C语言文件的图文教程

    本教程适用于C语言初学者,本文主要介绍了Visual C++ 6.0新建一个C语言文件的图文教程,具有一定的参考价值,感兴趣的可以了解一下
    2024-06-06
  • C++ Opencv imfill孔洞填充函数的实现思路与代码

    C++ Opencv imfill孔洞填充函数的实现思路与代码

    在Matlab下,使用imfill可以很容易的完成孔洞填充操作,下面这篇文章主要给大家介绍了关于C++ Opencv imfill孔洞填充函数的实现思路与代码,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2021-09-09
  • C++封装IATHOOK类实例

    C++封装IATHOOK类实例

    这篇文章主要介绍了C++封装IATHOOK类的实现方法,对IAT的HOOK实例进行了封装,非常具有实用价值,需要的朋友可以参考下
    2014-10-10
  • C++ OpenCV实现二维码检测功能

    C++ OpenCV实现二维码检测功能

    这篇文章主要介绍了如何利用C++ OpenCV实现二维码检测功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2022-01-01
  • 一文搞懂C++中的四种强制类型转换

    一文搞懂C++中的四种强制类型转换

    很多朋友向小编了解C语言中怎么进行强制类型转换呢?在这小编告诉大家强制类型转换可以分为两种,一种是隐式类型转换一种是显示类型转换,下面通过示例代码给大家介绍下,需要的朋友参考下吧
    2021-07-07
  • 谈谈C++中的单例

    谈谈C++中的单例

    这篇文章主要介绍了C++中单例的相关资料,帮助大家更好的理解和学习c++,感兴趣的朋友可以了解下
    2020-09-09
  • 利用QT设计秒表功能

    利用QT设计秒表功能

    这篇文章主要为大家详细介绍了利用QT设计秒表功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08

最新评论