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

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


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

相关推荐
清醒的兰2 小时前
Qt 调试信息重定向到本地文件
开发语言·qt
AI+程序员在路上3 小时前
QT跨平台软件开发要点
开发语言·qt
道剑剑非道4 小时前
QT开发技术【QT实现桌面右下角消息】
开发语言·数据库·qt
此刻我在家里喂猪呢5 小时前
qt之开发大恒usb3.0相机一
qt·相机开发·大恒usb3.0相机·工业相机开发
xMathematics10 小时前
计算机图形学实践:结合Qt和OpenGL实现绘制彩色三角形
开发语言·c++·qt·计算机图形学·cmake·opengl
星火撩猿13 小时前
ubantu中下载编译安装qt5.15.3
开发语言·qt
机器视觉知识推荐、就业指导16 小时前
开源QML控件:进度条滑动控件(含源码下载链接)
前端·qt·开源·qml
꧁坚持很酷꧂19 小时前
Linux Ubuntu18.04下安装Qt Craeator 5.12.9(图文详解)
linux·运维·qt
ChoSeitaku20 小时前
17.QT-Qt窗口-工具栏|状态栏|浮动窗口|设置停靠位置|设置浮动属性|设置移动属性|拉伸系数|添加控件(C++)
c++·qt·命令模式
OpenC++1 天前
【C++QT】Buttons 按钮控件详解
c++·经验分享·qt·leetcode·microsoft