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

在这里插入图片描述

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

在这里插入图片描述


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/149310.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

SQL Server2012保姆安装教程----带你快速上手数据库创建

目录 1.前言 2.安装准备 3.参考文章 4.安装过程 5.快速上手 5.1如何连接服务器 5.2创建数据库 5.3添加新的文件 5.4属性介绍 5.5创建表的引入 1.前言 我之前使用的就是mysql数据库&#xff0c;这个数据库使用的比较多&#xff0c;我学的初期也是这个&#xff1b; 但是…

虚拟机使用FileZilla软件实现文件互传

软件版本&#xff1a;FizeZilla 3.63.2 VirtualBox7.0.20 1.设置桥接模式(网卡) 2.查看ip 在控制台输入ifconfig 3.在终端打开控制台安装FTP服务 sudo apt-get install vsftpd 等待软件自动安装&#xff0c;安装完成以后使用 VI命令打开 /etc/vsftpd.conf&#xff0c;命令…

Kali 联网

VMware 中分三种网络模式 桥接模式&#xff1a;默认余宿主机 VMnet0 绑定&#xff0c;像一台独立机 NAT 模式&#xff1a;默认余宿主机 VMnet8 绑定&#xff0c;需要通过物理机连接外网 仅主机模式&#xff1a;默认余宿主机 VMnet1 绑定&#xff0c;只能与物理机通信 VMware…

3. 轴指令(omron 机器自动化控制器)——>MC_MoveVelocity

机器自动化控制器——第三章 轴指令 6 MC_MoveVelocity变量▶输入变量▶输出变量▶输入输出变量 功能说明▶指令详情▶时序图▶重启运动指令▶多重启动运动指令▶异常 动作示例▶动作示例▶梯形图▶结构文本(ST) MC_MoveVelocity 使用伺服驱动器的位置控制模式&#xff0c;进行…

股价已暴涨64000%,估值比英伟达还高,Costco股票还能投资吗?

猛兽财经核心观点&#xff1a; &#xff08;1&#xff09;自1985年上市以来&#xff0c;Costco的股价已经上涨了64,000%以上。 &#xff08;2&#xff09;该公司已成为了美股市场上最被高估的公司之一&#xff08;估值比英伟达还高&#xff09;。 &#xff08;3&#xff09;猛兽…

八大排序——万字长文带你剖析八大排序(C语言)

本篇文章主要介绍八大排序的思想和具体实现&#xff0c;也会分析具体的时间复杂度和空间复杂度&#xff0c;提醒一些容易出现的坑和实现一些不同版本的排序&#xff0c;以及这些不同排序之间的效率分析 目录 1.插入排序 1.1直接插入排序 1.1.1 直接插入排序的思想&#xff…

linux 下的静态库与动态库

目录 一、介绍 1、静态库 2、动态库 二、操作 1、静态库 2、动态库 3、使用库文件 &#xff08;1&#xff09;方法一 &#xff08;2&#xff09;方法二 &#xff08;3&#xff09;方法三 一、介绍 1、静态库 静态链接库实现链接操作的方式很简单&#xff0c;即程序文…

【2024W38】肖恩技术周刊(第 16 期):白嫖AI的最佳时段

周刊内容: 对一周内阅读的资讯或技术内容精品&#xff08;个人向&#xff09;进行总结&#xff0c;分类大致包含“业界资讯”、“技术博客”、“开源项目”和“工具分享”等。为减少阅读负担提高记忆留存率&#xff0c;每类下内容数一般不超过3条。 更新时间: 星期天 历史收录:…

同等学力申硕英语网课如何选择

很多考生想知道同等学力申硕英语网课如何选择&#xff0c;小编告诉大家&#xff0c;首先明确自己的学习目标和需求是为了提高口语、阅读、写作还是听力能力? 只有明确了自己的学习目标和需求&#xff0c;才能更好地选择适合自己的课程和平台。 二、选择知名品牌和口碑良好的平…

怎么一键更换PPT模板?2个做PPT必备的办公神器推荐!

在主打快节奏的当下&#xff0c;一份精美的PPT演示文稿往往能够为你赢得更多的关注和机会。但不可否认的是&#xff0c;制作一份高质量的PPT并非易事&#xff0c;特别是当你需要频繁更换PPT模板以应对不同场合时&#xff0c;根本抽不出时间来逐一修改。 本文将为大家介绍2款强…

什么是上层封禁海外流量

上层封禁海外流量&#xff08;Upper-layer Blocking of Overseas Traffic&#xff09;是一种网络安全策略&#xff0c;旨在通过在网络传输的上层进行流量控制和过滤&#xff0c;从而阻止来自海外的恶意流量或不必要的访问。这一措施主要用于防止分布式拒绝服务&#xff08;DDoS…

多线程——“死锁”

目录 前言 一、一个线程&#xff0c;一把锁 1.问题介绍 2.可重入锁 二、两个线程&#xff0c;两把锁 1.问题介绍 2.解决方式 三、N个线程&#xff0c;M把锁 1.哲学家就餐问题 2.解决方式 结尾 前言 “死锁”是多线程代码中一类常见的问题&#xff0c;加锁是能解决线…

java算法OJ(1)位运算

目录 1.前言 2.正文 2.1位运算符号 2.1俩数相除 2.1.1题目 2.1.2示例 2.1.3题解 2.2二进制求和 2.2.1题目 2.2.2示例 2.2.3题解 2.3只出现一次的数字 2.3.1题目 2.3.2示例 2.3.3题解 2.4只出现一次的数字&#xff08;进阶版&#xff09; 2.4.1题目 2.4.2示例…

怎么在Proteus中找到排阻

1、打开安装好的Proteus&#xff0c;点击上方菜单栏中的“库”&#xff0c;再选择“从库选取零件”&#xff0c;或者在左侧元件列表中单击鼠标右键&#xff0c;再点击右键菜单中的“从库中挑选”选项。 2、之后会打开元器件库&#xff0c;我们打开类别中的“Resistors”&#x…

方法部分 学习

方法是程序中最小的执行单元 方法的定义调用 public static void 方法名&#xff08;&#xff09;{ 方法体 } 写在main方法外面&#xff0c;在main函数里面直接调用带参数&#xff1a;public static void 方法名&#xff08;int num1 &#xff0c; int num2&am…

付费计量应用过程(Payment Metering Application process)

The Payment Metering Application process is the combination of the business and support processes as the resultant interactions between the business and support functions, which thus describes the dynamic behavior of the system as a whole. 付费计量…

postman中使用Pre-request Script

一、get方法 get请求时 &#xff0c;有多个params&#xff0c;并且有一个参数为sign&#xff0c;这个参数是有其他params拼接之后md5加密得到的&#xff0c;如何通过js语句获取params参数并生成sign。 const CryptoJS require(crypto-js); // 引入 CryptoJS 库进行 MD5 加密…

深度学习(5):逻辑斯蒂回归Logistic

文章目录 一、逻辑斯蒂回归&#xff08;Logistic Regression&#xff09;二、KL 散度&#xff08;相对熵&#xff09;三、交叉熵&#xff08;Cross-Entropy&#xff09;四、关系五、总结 一、逻辑斯蒂回归&#xff08;Logistic Regression&#xff09; 概述 逻辑斯蒂回归是一种…

MiniCPM-V 2.6训练时fuse_adam报错

原本pip install deepspeed安装了0.15.1版本的&#xff0c;但是在进行sft训练的时候还是报错。大概就是fuse_adam这个op编译有错&#xff0c;c版本要大于17什么的&#xff0c;一堆错。看了一堆解决方案尝试后发现如下这样的有用&#xff1a; 1.下载DeepSpeend源码 git clone ht…

《机器学习》周志华-CH8(集成学习)

8.1个体与集成 集成学习(ensemble learning)通过构建并结合多个学习器来完成学习任务&#xff0c;有时也被称为多分类器系统&#xff0c;基于委员会的学习。 同质”集成“&#xff1a;只包含同种类型的个体学习器&#xff0c;同质集成中的个体学习器亦称“基学习器”&#xff0…