Qt获取本机Mac地址、Ip地址

一、简述

今天给大家分享一个获取本机IP地址和Mac地址的方法,经过多次测试,台式机、笔记本等多个设备,暂时没有发现问题。

由于很多时候本地安装了虚拟机、蓝牙、无线网卡或者其他设备等,会有多个Mac地址,所以需要进行多次过滤,其中也是遇到了很多坑,经过多次改进,如果小伙伴们有其他更好的方法,欢迎一起讨论。

二、代码之路

如果是使用VS开发记得添加上Network模块,如果是QtCreator则在pro文件中添加上Qt += Network。

下面就是具体实现代码,大家可以直接拷贝到自己的工程中进行测试

cpp 复制代码
/*********记得Qt模块中加上Network**********/
#include <QNetworkInterface>
void getLocalIpAndMacAddress(QString& ipAddress, QString& macAddress)
{
    for (QNetworkInterface netInterface : QNetworkInterface::allInterfaces())
    {
        //MAC地址
        if (netInterface.hardwareAddress().size() == 17)
        {
            // 包含以太网、Wifi等类型;
            QNetworkInterface::InterfaceType type = netInterface.type();
            if (type == QNetworkInterface::Ethernet
                || type == QNetworkInterface::Ieee80211
                || type == QNetworkInterface::Wifi) {
                QNetworkInterface::InterfaceFlags flags = netInterface.flags();
                bool isUp = flags & QNetworkInterface::IsUp;
                bool isRunning = flags & QNetworkInterface::IsRunning;
                bool isVirtual = flags & QNetworkInterface::IsLoopBack;
                macAddress = netInterface.hardwareAddress().replace(":", "-");
                QString name = netInterface.humanReadableName();
                // 测试信息;
//                 qDebug() << "macAddress:" << macAddress << "DisplayName:" << netInterface.humanReadableName();
//                 qDebug() << flags << "\r\n";
                // 剔除VMware字段;
                if (isUp && isRunning && !isVirtual && !name.contains("VMware")) {
                    macAddress = netInterface.hardwareAddress().replace(":", "-");
                    // 获取IPV4地址;
                    QList<QNetworkAddressEntry> addressEntries = netInterface.addressEntries();
                    for (QNetworkAddressEntry entry : addressEntries) {
                        if (entry.ip().protocol() == QAbstractSocket::IPv4Protocol) {
                            ipAddress = entry.ip().toString();
                            break;
                        }
                    }

                    // 测试信息;
//                     qDebug() << QString("IpAdress:%1, MacAddress:%2, DisplayName:%3, Type:%4")
//                         .arg(ipAddress).arg(macAddress).arg(netInterface.humanReadableName()).arg(type);
                    
                    if (ipAddress.isEmpty() || macAddress.isEmpty())
                        continue;
                    else
                        break;
                }
            }
        }
    }

    // check打印(可去除)
    if (!ipAddress.isEmpty())
        qDebug() << QString("Local IpAddress:%1").arg(ipAddress);
    else
        qDebug() << "Get local IpAddress failed";
    if (!macAddress.isEmpty())
        qDebug() << QString("Local MacAddress:%1").arg(macAddress);
    else
        qDebug() << "Get local MacAddress failed.";
}

void testFunction()
{
    QString ipAddress;
    QString macAddress;
    getLocalIpAndMacAddress(ipAddress, macAddress);

    qDebug() << "ipAddress:" << ipAddress;
    qDebug() << "macAddress:" << macAddress;

}

大家可以在cmd控制台窗口中通过下面的命令输出本机设备的操作系统中所有网络配置信息。

ipconfig /all

下面以台式机网口插网线为例,可以对比代码执行结果:


觉得有帮助的小伙伴可以手动点个赞,如果很有帮助也可以打赏,一块两块也是情,哈哈哈!

相关推荐
徒步僧6 小时前
ThingsBoard规则链节点:RPC Call Reply节点详解
qt·microsoft·rpc
可峰科技7 小时前
斗破QT编程入门系列之一:认识Qt:初步使用(四星斗师)
开发语言·qt
我喜欢就喜欢7 小时前
基于qt vs下的视频播放
开发语言·qt·音视频
CP-DD8 小时前
Qt的架构设计
qt
阿_旭8 小时前
基于YOLO11/v10/v8/v5深度学习的维修工具检测识别系统设计与实现【python源码+Pyqt5界面+数据集+训练代码】
人工智能·python·深度学习·qt·ai
Bruce小鬼12 小时前
QT创建按钮篇
开发语言·qt
martian66514 小时前
QT开发:掌握现代UI动画技术:深入解析QML和Qt Quick中的动画效果
开发语言·c++·qt·ui
墨染新瑞16 小时前
两个有趣的小东西(qt和类型转换)
开发语言·网络·qt
Bruce小鬼17 小时前
解决MAC安装QT启动项目不显示窗口问题
开发语言·qt·macos
OkeyProxy17 小时前
怎麼解決IP地址衝突的問題?
代理模式·proxy模式·ip地址·代理服务器·海外ip代理