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

Qt获取当前系统网络接口信息

1.QInterface获取网络接口信息
void NetProperty::init()
{// 获取所有网络接口const QList<QNetworkInterface> interfaces = QNetworkInterface::allInterfaces();ui->com_Interface->clear();for(const QNetworkInterface& interface : interfaces){ui->com_Interface->addItem(interface.humanReadableName(), interface.name());       // 显示所有网络接口名称}
}void NetProperty::on_com_Interface_activated(int index)
{Q_UNUSED(index)QString strName = ui->com_Interface->currentData().toString();QNetworkInterface interface =  QNetworkInterface::interfaceFromName(strName);   // 根据选择名称获取网卡if(!interface.isValid())   // 判断接口有效return;ui->tableWidget->item(0, 1)->setText(QString::number(interface.index()));                     // 获取网卡索引
#if (QT_VERSION >= QT_VERSION_CHECK(5,11,0))        // qt5.11以后版本才有ui->tableWidget->item(1, 1)->setText(QString::number(interface.maximumTransmissionUnit()));   // 获取网卡最大传输数据单元
#endifui->tableWidget->item(2, 1)->setText(interface.name());                                       // 获取网卡名称#if 0    // 直接显示标志枚举QNetworkInterface::InterfaceFlags flags = interface.flags();QMetaEnum metaEnum = QMetaEnum::fromType<QNetworkInterface::InterfaceFlags>();ui->tableWidget->item(3, 1)->setText(metaEnum.valueToKeys(flags));                            // 返回与此网络接口关联的标志
#elseui->tableWidget->item(3, 1)->setText(FlagsToQString(interface.flags()));
#endif
#if (QT_VERSION >= QT_VERSION_CHECK(5,11,0))        // qt5.11以后版本才有ui->tableWidget->item(4, 1)->setText(TypeToQString(interface.type()));                        // 获取网络类型说明
#endifui->tableWidget->item(5, 1)->setText(interface.hardwareAddress());                            // // 获取MAC地址ui->textEdit_ip->clear();// 如果只是获取所有的IP地址可以使用allAddresses()函数const QList<QNetworkAddressEntry> entrys = interface.addressEntries();  // 返回此接口拥有的 IP 地址列表及其关联的网络掩码和广播地址。for(auto entery : entrys){QString strType;switch (entery.ip().protocol())       // 判断IP地址类型{case QAbstractSocket::IPv4Protocol:strType = "--------IPv4地址--------";break;case QAbstractSocket::IPv6Protocol:strType = "--------IPv6地址--------";break;case QAbstractSocket::AnyIPProtocol:strType = "--------IPv4或IPv6地址--------";break;case QAbstractSocket::UnknownNetworkLayerProtocol:strType = "--------未知地址--------";break;}ui->textEdit_ip->append(strType);             // 显示IP地址类型QString ipInfo = QString("IP地址:%1,子网掩码:%2,广播地址:%3").arg(entery.ip().toString()).arg(entery.netmask().toString()).arg(entery.broadcast().toString());ui->textEdit_ip->append(ipInfo);              // 显示IP地址信息}
}/*** @brief        将网卡关联标志转换为可读的说明信息* @param flags* @return*/
QString NetProperty::FlagsToQString(int flags)
{QString strFlags;if(flags & QNetworkInterface::IsUp){strFlags += "网络接口处于活动状态";}if(flags & QNetworkInterface::IsRunning){strFlags.append(strFlags.isEmpty() ? "" : " | ");strFlags += "网络接口已分配资源";}if(flags & QNetworkInterface::CanBroadcast){strFlags.append(strFlags.isEmpty() ? "" : " | ");strFlags += "网络接口工作在广播模式";}if(flags & QNetworkInterface::IsLoopBack){strFlags.append(strFlags.isEmpty() ? "" : " | ");strFlags += "网络接口是一个环回接口";}if(flags & QNetworkInterface::IsPointToPoint){strFlags.append(strFlags.isEmpty() ? "" : " | ");strFlags += "网络接口是一个点对点接口";}if(flags & QNetworkInterface::CanMulticast){strFlags.append(strFlags.isEmpty() ? "" : " | ");strFlags += "网络接口支持组播";}return strFlags;
}/*** @brief        返回网卡类型说明* @param type   网卡类型枚举* @return       网卡类型说明*/
QString NetProperty::TypeToQString(int type)
{
#if (QT_VERSION >= QT_VERSION_CHECK(5,11,0))        // qt5.11以后版本才有switch (type){case QNetworkInterface::Loopback: return "虚拟环回接口,分配了环回 IP 地址 (127.0.0.1, ::1)";case QNetworkInterface::Virtual:  return "一种确定为虚拟的接口类型,但不是任何其他可能的类型";case QNetworkInterface::Ethernet: return "IEEE 802.3 以太网接口";case QNetworkInterface::Slip:     return "串行线路互联网协议接口";case QNetworkInterface::CanBus:   return "ISO 11898 控制器局域网总线接口";case QNetworkInterface::Ppp:      return "点对点协议接口,通过较低的传输层(通常通过无线电或物理线路串行)在两个节点之间建立直接连接";case QNetworkInterface::Fddi:     return "ANSI X3T12 光纤分布式数据接口,一种光纤局域网";case QNetworkInterface::Wifi:     return "IEEE 802.11 Wi-Fi 接口";         // 别名 Ieee80211case QNetworkInterface::Phonet:   return "使用 Linux Phonet socket系列的接口,用于与蜂窝调制解调器通信";case QNetworkInterface::Ieee802154: return "IEEE 802.15.4 个人区域网络接口,6LoWPAN 除外";case QNetworkInterface::SixLoWPAN:  return "6LoWPAN(低功耗无线个人区域网络上的 IPv6)接口,通常用于网状网络";case QNetworkInterface::Ieee80216:  return "IEEE 802.16 无线城域网";case QNetworkInterface::Ieee1394:   return "IEEE 1394 接口(又名“FireWire”)";case QNetworkInterface::Unknown:    return "接口类型无法确定或不是其他列出的类型之一";default:return "未知";}
#elseQ_UNUSED(type)
#endif
}
2.QHostInfo获取网络接口信息

QHostInfo类用于获取主机的一些网络信息。QHostInfo类有下面这些公有函数:

  • [static] QString QHostInfo::localHostName(),函数获取本机主机名。
  • [static] QHostInfo QHostInfo::fromName(const QString &name),函数根据主机名获取主机的信息。
  • [static] QString QHostInfo::localDomainName(),函数返回本机DNS域名。
  • [static] int QHostInfo::lookupHost(const QString &name, QObject receiver, const char member),以异步方式查找主机的IP地址,并返回一个表示本次查找的ID。name参数表示主机名,可以为主机名、域名或IP地址。参数receiver指定槽函数的接收者,member指定槽函数的名称。异步方式表示执行lookupHost后,程序可能需要花一定时间用来查找,但不阻塞程序的继续执行(类似多线程),查找完毕后,通过信号通知设定的槽函数,在槽函数里读取查找的结果。
#include <QHostInfo>
QString hostName = QHostInfo::localHostName();//获取本机主机名
QHostInfo hostInfo = QHostInfo::fromName(hostName);//获取本机信息
QList<QHostAddress> addList=hostInfo.addresses();//获取IP地址列表
if (!addList.isEmpty())for(int i=0;i<addList.count();i++){QHostAddress aHost=addList.at(i); //每一项是一个QHostAddressQAbstractSocket::NetworkLayerProtocol protocol = aHost.protocol();//返回协议类型QString protocolType;switch(protocol){case QAbstractSocket::IPv4Protocol:protocolType = "IPv4 Protocol";break;case QAbstractSocket::IPv6Protocol:protocolType = "IPv6 Protocol";break;case QAbstractSocket::AnyIPProtocol:protocolType = "Any IP Protocol";default:protocolType = "Unknown Network Layer Protocol";}QString IPAddress = aHost.toString();//返回IP地址的字符串}

lookupHost()函数使用:

//用lookupHost根据主机名、域名或IP地址查找主机相关信息
QString hostname=ui->editHost->text(); //获取主机名
//查找主机名为hostname的主机信息,查找完毕后执行this对象的槽函数lookedUpHostInfo(QHostInfo)
QHostInfo::lookupHost(hostname,this,SLOT(lookedUpHostInfo(QHostInfo)));//槽函数部分代码
void Dialog::lookedUpHostInfo(const QHostInfo &host){QList<QHostAddress> addList=host.addresses();//获取IP地址列表
}

相关文章:

Qt获取当前系统网络接口信息

1.QInterface获取网络接口信息 void NetProperty::init() {// 获取所有网络接口const QList<QNetworkInterface> interfaces QNetworkInterface::allInterfaces();ui->com_Interface->clear();for(const QNetworkInterface& interface : interfaces){ui->…...

【C++】STL 算法 ④ ( 函数对象与谓词 | 一元函数对象 | “ 谓词 “ 概念 | 一元谓词 | find_if 查找算法 | 一元谓词示例 )

文章目录 一、函数对象与谓词1、一元函数对象2、" 谓词 " 概念3、find_if 查找算法 二、一元谓词示例1、代码示例 - 一元谓词示例2、执行结果 一、函数对象与谓词 1、一元函数对象 " 函数对象 " 是通过 重载 函数调用操作符 () 实现的 operator() , 函数对…...

C++ 并发编程 | 并发世界

一、C 并发世界 1、什么是并发&#xff1f; 并发是指两个或更多独立的活动同时发生&#xff0c;计算机中的并发指的是&#xff0c;在单个系统里同时执行多个独立的活动...

GitHub注册新账号的操作流程(详细)

目录 第一步 进入官网&#xff0c;点击右上角的"Sign up" 第二步 输入email地址 第三步 设置密码 第四步 输入昵称 第五步 根据个人喜好决定要不要接收GitHub的邮件推送。然后回答他们的验证问题 第六步 输入验证码 我在注册github账号时遇到过一些阻碍&#x…...

Kali安装Xrdp结合内网穿透实现无公网ip远程访问系统桌面

文章目录 前言1. Kali 安装Xrdp2. 本地远程Kali桌面3. Kali 安装Cpolar 内网穿透4. 配置公网远程地址5. 公网远程Kali桌面连接6. 固定连接公网地址7. 固定地址连接测试 前言 Kali远程桌面的好处在于&#xff0c;它允许用户从远程位置访问Kali系统&#xff0c;而无需直接物理访…...

【WEB API自动化测试】接口文档与在线测试

这一篇我们主要介绍如何做API帮助文档&#xff0c;给API的调用人员介绍各个 API的功能, 输入参数&#xff0c;输出参数, 以及在线测试 API功能(这个也是方便我们自己开发调试) 我们先来看看我们的API最终帮助文档及在线测试最终达到的效果: 概要图 GET API 添加产品API: 删除…...

【深度学习每日小知识】Training Data 训练数据

训练数据是机器学习的基本组成部分&#xff0c;在模型的开发和性能中起着至关重要的作用。它是指用于训练机器学习算法的标记或注释数据集。以下是与训练数据相关的一些关键方面和注意事项。 Quantity 数量 训练数据的数量很重要&#xff0c;因为它会影响模型的泛化能力。通常…...

[acm算法学习] 后缀数组SA

学习自B站up主 kouylan 定义 后缀是包含最后个字母的子串 把字符串 str 的所有后缀按字典排序&#xff0c;sa[i]表示排名为 i 的后缀的开头下标 如何求解SA 倍增的方法 先把每个位置开始的长度为1的子串排序&#xff0c;在此基础上再把长度为2的子串排序&#xff08;长度…...

DNS解析和它的三个实验

一、DNS介绍 DNS&#xff1a;domain name server 7层协议 名称解析协议 tcp /53 主从之间的同步 udp/53 名字解析 DNS作用&#xff1a;将域名转换成IP地址的协议 1.1DNS的两种实现方式 1.通过hosts文件&#xff08;优先级最高&#xff09; 分散的管理 linux /etc/hos…...

[redis] redis的安装,配置与简单操作

一、缓存的相关知识 1.1 缓存的概念 缓存是为了调节速度不一致的两个或多个不同的物质的速度&#xff0c;在中间对速度较慢的一方起到加速作用&#xff0c;比如CPU的一级、二级缓存是保存了CPU最近经常访问的数据&#xff0c;内存是保存CPU经常访问硬盘的数据&#xff0c;而且…...

C++ STL set容器

和 map、multimap 容器不同&#xff0c;使用 set 容器存储的各个键值对&#xff0c;要求键 key 和值 value 必须相等。 举个例子&#xff0c;如下有 2 组键值对数据&#xff1a; {<a, 1>, <b, 2>, <c, 3>} {<a, a>, <b, b>, <c, c>} 显然&…...

专业课148,总分410+电子科技大学858信号与系统考研经验电子信息与通信

今年专业课148分&#xff0c;总分410顺利被电子科技大学录取&#xff0c;回望这一年复习还有很多不足&#xff0c;总结一下自己的复习经历&#xff0c;希望对大家复习有所帮助。 数学&#xff1a;&#xff08;多动手&#xff0c;多计算&#xff0c;多总结&#xff0c;打好基础…...

密码学:一文读懂非对称加密算法 DH、RSA

文章目录 前言非对称加密算法的由来非对称加密算法的家谱1.基于因子分解难题2.基于离散对数难题 密钥交换算法-DH密钥交换算法-DH的通信模型初始化DH算法密钥对甲方构建DH算法本地密钥乙方构建DH算法本地密钥DH算法加密消息传递 典型非对称加密算法-RSARSA的通信模型RSA特有的的…...

ZooKeeper 实战(二) 命令行操作篇

文章目录 ZooKeeper 实战(二) 命令行操作篇1. 服务端命令1.1. 服务启动1.2. 查看服务1.3. 重启服务1.4. 停止服务 2. 客户端命令2.1. 启动客户端2.2. 查看节点信息查看根节点详情 ls -s /添加一个watch监视器 ls -w /列举出节点的级联节点 ls -R / 2.3. 查看节点状态2.4. 创建节…...

关于在前台应用路由调用子应用

需求 在实际写项目的过程中&#xff0c;关于一些前台的官网首页&#xff0c;会需要在一写特定的路由侠调用子应用的需求&#xff0c;在编写的过程中在公用的方法中&#xff0c;来进行处理&#xff0c;处理思想如下&#xff0c;在特定的.vue文件中&#xff0c; 后端 通过后端…...

Spring学习 Spring事务控制

7.1.事务介绍 7.1.1.什么是事务&#xff1f; 当你需要一次执行多条SQL语句时&#xff0c;可以使用事务。通俗一点说&#xff0c;如果这几条SQL语句全部执行成功&#xff0c;则才对数据库进行一次更新&#xff0c;如果有一条SQL语句执行失败&#xff0c;则这几条SQL语句全部不…...

c++一些使用频率较高的库函数

目录 memset&#xff08;&#xff09; memset&#xff08;&#xff09;接受三个参数&#xff1a; 注意 swap&#xff08;&#xff09; reverse&#xff08;&#xff09; reverse函数接收两个参数&#xff1a; reverse&#xff08;&#xff09;反转整形向量元素顺序示例 …...

【从零开始学技术】Fiddler 抓取 https 请求大全

1.Fiddler代理浏览器设置 注意浏览器代理区别 Chrome/IE浏览器使用的都是系统代理设置 在chrome浏览器的设置中搜索代理&#xff0c;可以看到 打开IE浏览器&#xff0c;选择设置->Internet选项 Firefox浏览器使用的是单独的一套代理系统 在Firefox的代理设置中&#xff0c;我…...

第二百六十四回

文章目录 概念介绍使用方法示例代码 我们在上一章回中介绍了SliverPadding组件相关的内容&#xff0c;本章回中将介绍Sliver综合示例.闲话休提&#xff0c;让我们一起Talk Flutter吧。 概念介绍 我们在前面的章回中介绍了各种Sliver相关的组件&#xff1a;SliverList,SliverGr…...

用Kimi chat识别并整理图片里面的文字

Kimi chat是有OCR功能的&#xff0c;可以识别图片中的文字。 下面这张图片是一本书的注释&#xff0c;里面提到有不少图书&#xff0c;利用Kimi chat就可以轻松完成提取其中图书书名的任务。 先拿一张图片来做实验。Kimichat的回复&#xff1a; 在您提供的文件内容中&#xf…...

驾驭未来:从传统运维到智能化运维的转型之路

随着科技的飞速发展&#xff0c;企业的业务需求也在不断变化。为了满足这些需求&#xff0c;企业的IT架构逐渐向云原生、容器化和微服务化演进。作为支撑企业业务发展的运维人员&#xff0c;我们需要紧跟时代步伐&#xff0c;不断提升自己的技能和认知水平。 在2023年全球运维大…...

LabVIEW在旋转机械故障诊断中的随机共振增强应用

在现代工业自动化领域&#xff0c;准确的故障诊断对于保障机械设备的稳定运行至关重要。传统的故障检测方法往往因噪声干扰而难以捕捉到微弱的故障信号。随着LabVIEW在数据处理和系统集成方面的优势日益凸显&#xff0c;其在旋转机械故障诊断中的应用开始发挥重要作用&#xff…...

尚硅谷大数据技术-数据湖Hudi视频教程-笔记02【核心概念(基本概念、数据写、数据读)】

大数据新风口&#xff1a;Hudi数据湖&#xff08;尚硅谷&Apache Hudi联合出品&#xff09; B站直达&#xff1a;https://www.bilibili.com/video/BV1ue4y1i7na 尚硅谷数据湖Hudi视频教程百度网盘&#xff1a;https://pan.baidu.com/s/1NkPku5Pp-l0gfgoo63hR-Q?pwdyyds阿里…...

鸿蒙(HarmonyOS)应用开发指南

1. 概述 1.1 简介 鸿蒙&#xff08;即 HarmonyOS &#xff0c;开发代号 Ark&#xff0c;正式名称为华为终端鸿蒙智能设备操作系统软件&#xff09;是华为公司自 2012 年以来开发的一款可支持鸿蒙原生应用和兼容 AOSP 应用的分布式操作系统。该系统利用“分布式”技术将手机、电…...

Android 13 辅助屏导航栏不显示问题

问题 在Android 13 上开启辅助屏幕。但是发现辅助屏systemui 导航按 icon没有显示&#xff0c;但是点击对应的区域有作用 分析 可以用 anroid device monitor 工具分析视图 解决 public NavigationBarView(Context context, AttributeSet attrs) {super(context, attrs);…...

【QT】标准对话框

目录 1 概述 2 QFileDialog对话框 1.选择打开一个文件 2.选择打开多个文件 3&#xff0e;选择已有目录 4&#xff0e;选择保存文件名 3 QColorDialog对话框 4 QFontDialog对话框 5 QInputDialog标准输入对话框 1.输入文字 2&#xff0e;输入整数 3&#xff0e;输入…...

微信小程序跳转方式及问题

一、五种跳转方式 1.wx.navigateTo() 保留当前页面&#xff0c;跳转到应用内的某个页面。但是不能跳到 tabbar 页面 通常推荐使用 wx.navigateTo进行跳转&#xff0c;以便返回原页面&#xff0c;以提高加载速度 wx.navigateTo({url: })2.wx.redirectTo() 关闭当前页面&#x…...

Redis实现分布式会话

Redis实现分布式会话 1 什么是分布式会话 1 这是我么之前学过的注册登录模式 2 如果非常多的人访问&#xff0c;因为单台服务器的访问承受能力是有限的&#xff0c;那么我们就想用多态服务器来承担压力 3 一般通过负载均衡的方式来实现&#xff0c;来分担服务器的压力。 4 负…...

AntDesignBlazor示例——暗黑模式

本示例是AntDesign Blazor的入门示例&#xff0c;在学习的同时分享出来&#xff0c;以供新手参考。 示例代码仓库&#xff1a;https://gitee.com/known/BlazorDemo 1. 学习目标 暗黑模式切换查找组件样式覆写组件样式 2. 添加暗黑模式切换组件 1&#xff09;双击打开MainL…...

高通平台开发系列讲解(USB篇)adb function代码分析

文章目录 一、FFS相关动态打印二、代码入口三、ffs_alloc_inst四、ep0、ep1&ep2的注册五、读写过程沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本文主要介绍高通平台USB adb function代码f_fs.c。 一、FFS相关动态打印 目录:msm-4.14/drivers/usb/gadget/fun…...