当前位置: 首页 > 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地址列表
}

http://www.lryc.cn/news/279632.html

相关文章:

  • 【C++】STL 算法 ④ ( 函数对象与谓词 | 一元函数对象 | “ 谓词 “ 概念 | 一元谓词 | find_if 查找算法 | 一元谓词示例 )
  • C++ 并发编程 | 并发世界
  • GitHub注册新账号的操作流程(详细)
  • Kali安装Xrdp结合内网穿透实现无公网ip远程访问系统桌面
  • 【WEB API自动化测试】接口文档与在线测试
  • 【深度学习每日小知识】Training Data 训练数据
  • [acm算法学习] 后缀数组SA
  • DNS解析和它的三个实验
  • [redis] redis的安装,配置与简单操作
  • C++ STL set容器
  • 专业课148,总分410+电子科技大学858信号与系统考研经验电子信息与通信
  • 密码学:一文读懂非对称加密算法 DH、RSA
  • ZooKeeper 实战(二) 命令行操作篇
  • 关于在前台应用路由调用子应用
  • Spring学习 Spring事务控制
  • c++一些使用频率较高的库函数
  • 【从零开始学技术】Fiddler 抓取 https 请求大全
  • 第二百六十四回
  • 用Kimi chat识别并整理图片里面的文字
  • 驾驭未来:从传统运维到智能化运维的转型之路
  • LabVIEW在旋转机械故障诊断中的随机共振增强应用
  • 尚硅谷大数据技术-数据湖Hudi视频教程-笔记02【核心概念(基本概念、数据写、数据读)】
  • 鸿蒙(HarmonyOS)应用开发指南
  • Android 13 辅助屏导航栏不显示问题
  • 【QT】标准对话框
  • 微信小程序跳转方式及问题
  • Redis实现分布式会话
  • AntDesignBlazor示例——暗黑模式
  • 高通平台开发系列讲解(USB篇)adb function代码分析
  • SQL基础知识3