当前位置: 首页 > news >正文

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

一、简述

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

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

二、代码之路

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

在这里插入图片描述

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

/*********记得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;elsebreak;}}}}// check打印(可去除)if (!ipAddress.isEmpty())qDebug() << QString("Local IpAddress:%1").arg(ipAddress);elseqDebug() << "Get local IpAddress failed";if (!macAddress.isEmpty())qDebug() << QString("Local MacAddress:%1").arg(macAddress);elseqDebug() << "Get local MacAddress failed.";
}void testFunction()
{QString ipAddress;QString macAddress;getLocalIpAndMacAddress(ipAddress, macAddress);qDebug() << "ipAddress:" << ipAddress;qDebug() << "macAddress:" << macAddress;}

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

ipconfig /all

在这里插入图片描述

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

在这里插入图片描述


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

相关文章:

  • iOS OC 底层原理之 category、load、initialize
  • 通过 LabVIEW 正则表达式读取数值(整数或小数)
  • 软件设计之SSM(3)
  • 从《GTA5》的反外挂斗争看网络安全的重要性
  • 高中教辅汇总【35GB】
  • Java:Object操作
  • 【课程总结】day29:大模型之深入了解Retrievers解析器
  • 【C/C++】 秋招常考面试题最全总结(让你有一种相见恨晚的感觉)
  • spring如何解决循环依赖
  • 嵌入式linux裸机调试之windows、linux联合gdb
  • Gromacs——使用过程中暴露问题分析及学习
  • docker-文件复制(docker cp:用于在Docker主机和容器之间拷贝文件或目录)
  • 数学建模研赛总结
  • 【Linux】tar 压缩使用绝对路径时解压会出现多级文件夹
  • 新手教学系列——用 VSCode 实现高效远程开发
  • css属性的继承、初识值、计算值、当前值、应用值
  • JavaScript函数式编程(一)
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • PHP的类修饰符与访问修饰符
  • select2 取值 遍历 设置默认值
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • Webpack 4 学习01(基础配置)
  • 聊聊flink的TableFactory
  • 微信小程序--------语音识别(前端自己也能玩)
  • 项目实战-Api的解决方案
  • 学习HTTP相关知识笔记
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 从如何停掉 Promise 链说起
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #Linux(帮助手册)
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • $.ajax()方法详解
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (论文阅读11/100)Fast R-CNN
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (十三)Flink SQL
  • (学习日记)2024.01.09
  • (转)Sql Server 保留几位小数的两种做法
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .libPaths()设置包加载目录
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .net core Redis 使用有序集合实现延迟队列
  • .net Signalr 使用笔记
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • .Net下的签名与混淆
  • .vollhavhelp-V-XXXXXXXX勒索病毒的最新威胁:如何恢复您的数据?
  • ::前边啥也没有
  • @Controller和@RestController的区别?
  • @vueup/vue-quill使用quill-better-table报moduleClass is not a constructor