Qt之QNetworkInterface

简述

QNetworkInterface类负责提供主机的IP地址和网络接口的列表。

QNetworkInterface表示了当前程序正在运行时与主机绑定的一个网络接口。每个网络接口可能包含0个或多个IP地址,每个IP地址都可选择性地与一个子网掩码和/或一个广播地址相关联。这样的列表可以通过addressEntries()方法获得。当子网掩码或者广播地址不必要时,可以使用allAddresses()便捷函数来仅仅获得IP地址。

QNetworkInterface使用hardwareAddress()方法获取接口的硬件地址。

不是所有的操作系统都支持这些所有的特性。只有IPv4地址可以保证在所有平台上都能被这个类列举出来,尤其是IPv6地址的列举目前只支持Windows XP及相关版本、Linux、MacOS和BSDs。

 

  • 简述
  • 常用接口
  • 获取所有IP地址
  • 获取网络接口列表
  • 更多参考

 

常用接口

枚举 QNetworkInterface::InterfaceFlag 
标识 QNetworkInterface::InterfaceFlags

指定网络接口相关的标识,可能的值:

常量描述
QNetworkInterface::IsUp0x1网络接口处于活动状态
QNetworkInterface::IsRunning0x2网络接口已分配资源
QNetworkInterface::CanBroadcast0x4网络接口工作在广播模式
QNetworkInterface::IsLoopBack0x8网络接口是环回接口:也就是说,它是一个虚拟接口,其目的是主机本身
QNetworkInterface::IsPointToPoint0x10网络接口是一个点对点接口:也就是说,有一个,单一的其他地址可以直接由它到达。
QNetworkInterface::CanMulticast0x20网络接口支持多播

 

注意:一个网络接口不能既是broadcast-based又是point-to-point。

InterfaceFlags类型是一个QFlags类型定义,它存储一个或InterfaceFlag的组合值。

 

QList<QHostAddress> allAddresses() [static]

这个便利函数返回主机上面发现的所有IP地址。相当于allInterfaces()返回的所有对象调用addressEntries()来获取QHostAddress对象列表,然后对每一个对象调用QHostAddress::ip()方法。

 

QList<QNetworkInterface> allInterfaces() [static]

返回的主机上找到的所有的网络接口的列表。在失败情况下,它会返回一个空列表。

 

QList<QNetworkAddressEntry> addressEntries() const

返回IP地址列表,这个接口具备连同与其相关的网络掩码和广播地址。

如果不需要子网掩码或广播地址的信息,可以调用allAddresses()函数来只获取IP地址。

 

InterfaceFlags flags() const

返回与此网络接口关联的标志。

 

QString hardwareAddress() const

返回此接口的底层硬件地址。在以太网接口上,这将是表示MAC地址的字符串,用冒号分隔。

其他接口类型可能有硬件地址的其他类型。不应该依赖于实现这个函数返回一个有效的MAC地址。

 

QString humanReadableName() const

如果名称可确定,在Windows上,返回网络接口的人类可读的名称,例如:“本地连接”;如果不能,这个函数返回值与name()相同。用户可以在Windows控制面板中修改人类可读的名称,因此它可以在程序的执行过程中变化的名称。

在Unix上,此函数目前返回值总是和name()相同,因为Unix系统不存储人类可读的名称的配置。

 

bool isValid() const

如果此QNetworkInterface对象包含一个的有效的网络接口,则返回true。

 

QString QNetworkInterface::name() const

返回网络接口的名称。在Unix系统中,这是一个包含接口的类型和任选的序列号的字符串,例如:“eth0”、“lo”或者“pcn0”;在Windows中,这是一个内部ID,用户不能更改。

获取所有IP地址

通过调用便利的静态函数allAddresses(),可以返回一个QHostAddress地址列表(只能获取IP地址,没有子网掩码和广播地址的信息)。

QList<QHostAddress> list = QNetworkInterface::allAddresses();
foreach (QHostAddress address, list) {if (!address.isNull())qDebug() << "Address : " << address.toString();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

输出如下:

Address : “fe80::550c:ab19:fb48:1c9%15” 
Address : “169.254.1.201” 
Address : “fe80::d086:8566:6065:8954%11” 
Address : “172.18.4.165” 
Address : “fe80::f864:a962:7219:f98e%16” 
Address : “192.168.17.1” 
Address : “fe80::8169:691f:148e:d3cb%17” 
Address : “192.168.178.1” 
Address : “fe80::5996:27a3:83b5:2ae7%18” 
Address : “192.168.56.1” 
Address : “::1” 
Address : “127.0.0.1”

QHostAddress类提供一个IP地址,更多参考:Qt之QHostAddress

获取网络接口列表

通过调用便利的静态函数allInterfaces(),可以返回一个QNetworkInterface网络接口列表(通过QNetworkAddressEntry,可以获取IP地址、子网掩码和广播地址等信息)。

QList<QNetworkInterface> list = QNetworkInterface::allInterfaces();
foreach (QNetworkInterface netInterface, list) {if (!netInterface.isValid())continue;qDebug() << "********************";QNetworkInterface::InterfaceFlags flags = netInterface.flags();if (flags.testFlag(QNetworkInterface::IsRunning)&& !flags.testFlag(QNetworkInterface::IsLoopBack)) {  // 网络接口处于活动状态qDebug() << "Device : " << netInterface.name();  // 设备名qDebug() << "HardwareAddress : " << netInterface.hardwareAddress();  // 硬件地址qDebug() << "Human Readable Name : " << netInterface.humanReadableName();  // 人类可读的名字}// QList<QNetworkAddressEntry> entryList = netInterface.addressEntries();// foreach(QNetworkAddressEntry entry, entryList) { // 遍历每一个IP地址// qDebug() << "IP Address:" << entry.ip().toString();  // IP地址// qDebug() << "Netmask:" << entry.netmask().toString();  // 子网掩码// qDebug() << "Broadcast:" << entry.broadcast().toString();  // 广播地址//}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

通过flags()函数,可以获取到当前网络接口的标识,利用testFlag()进行过滤,就可以获取我们想要的内容(设备名、硬件地址、名字)。

注意:为了简单,我注释掉了IP地址的信息,需要的可以自行测试。

QNetworkAddressEntry类存储了一个IP地址,子网掩码和广播地址。更多参考:Qt之QNetworkAddressEntry

输出如下:

 


 

Device : “{BE9972CD-860E-4E15-8CE2-3F25EF0A7A24}” 
HardwareAddress : “94:DE:80:21:92:17” 
Human Readable Name : “本地连接”


Device : “{29F85058-E757-4F60-BF7B-47F6227C8CBC}” 
HardwareAddress : “00:50:56:C0:00:01” 
Human Readable Name : “VMware Network Adapter VMnet1”


Device : “{A297491C-D43C-4F85-A674-88368F8D4FC1}” 
HardwareAddress : “00:50:56:C0:00:08” 
Human Readable Name : “VMware Network Adapter VMnet8”


Device : “{1AE5F6FC-478A-4EAB-B4D2-86201A6B2090}” 
HardwareAddress : “0A:00:27:00:00:12” 
Human Readable Name : “VirtualBox Host-Only Network”

更多参考

  • Qt之网络编程
  • Qt之QHostInfo
  • Qt之QHostAddress
  • Qt之QNetworkAddressEntry

转自:http://blog.csdn.net/liang19890820/article/details/50775052

简述

QNetworkInterface类负责提供主机的IP地址和网络接口的列表。

QNetworkInterface表示了当前程序正在运行时与主机绑定的一个网络接口。每个网络接口可能包含0个或多个IP地址,每个IP地址都可选择性地与一个子网掩码和/或一个广播地址相关联。这样的列表可以通过addressEntries()方法获得。当子网掩码或者广播地址不必要时,可以使用allAddresses()便捷函数来仅仅获得IP地址。

QNetworkInterface使用hardwareAddress()方法获取接口的硬件地址。

不是所有的操作系统都支持这些所有的特性。只有IPv4地址可以保证在所有平台上都能被这个类列举出来,尤其是IPv6地址的列举目前只支持Windows XP及相关版本、Linux、MacOS和BSDs。

 

  • 简述
  • 常用接口
  • 获取所有IP地址
  • 获取网络接口列表
  • 更多参考

 

常用接口

枚举 QNetworkInterface::InterfaceFlag 
标识 QNetworkInterface::InterfaceFlags

指定网络接口相关的标识,可能的值:

常量描述
QNetworkInterface::IsUp0x1网络接口处于活动状态
QNetworkInterface::IsRunning0x2网络接口已分配资源
QNetworkInterface::CanBroadcast0x4网络接口工作在广播模式
QNetworkInterface::IsLoopBack0x8网络接口是环回接口:也就是说,它是一个虚拟接口,其目的是主机本身
QNetworkInterface::IsPointToPoint0x10网络接口是一个点对点接口:也就是说,有一个,单一的其他地址可以直接由它到达。
QNetworkInterface::CanMulticast0x20网络接口支持多播

 

注意:一个网络接口不能既是broadcast-based又是point-to-point。

InterfaceFlags类型是一个QFlags类型定义,它存储一个或InterfaceFlag的组合值。

 

QList<QHostAddress> allAddresses() [static]

这个便利函数返回主机上面发现的所有IP地址。相当于allInterfaces()返回的所有对象调用addressEntries()来获取QHostAddress对象列表,然后对每一个对象调用QHostAddress::ip()方法。

 

QList<QNetworkInterface> allInterfaces() [static]

返回的主机上找到的所有的网络接口的列表。在失败情况下,它会返回一个空列表。

 

QList<QNetworkAddressEntry> addressEntries() const

返回IP地址列表,这个接口具备连同与其相关的网络掩码和广播地址。

如果不需要子网掩码或广播地址的信息,可以调用allAddresses()函数来只获取IP地址。

 

InterfaceFlags flags() const

返回与此网络接口关联的标志。

 

QString hardwareAddress() const

返回此接口的底层硬件地址。在以太网接口上,这将是表示MAC地址的字符串,用冒号分隔。

其他接口类型可能有硬件地址的其他类型。不应该依赖于实现这个函数返回一个有效的MAC地址。

 

QString humanReadableName() const

如果名称可确定,在Windows上,返回网络接口的人类可读的名称,例如:“本地连接”;如果不能,这个函数返回值与name()相同。用户可以在Windows控制面板中修改人类可读的名称,因此它可以在程序的执行过程中变化的名称。

在Unix上,此函数目前返回值总是和name()相同,因为Unix系统不存储人类可读的名称的配置。

 

bool isValid() const

如果此QNetworkInterface对象包含一个的有效的网络接口,则返回true。

 

QString QNetworkInterface::name() const

返回网络接口的名称。在Unix系统中,这是一个包含接口的类型和任选的序列号的字符串,例如:“eth0”、“lo”或者“pcn0”;在Windows中,这是一个内部ID,用户不能更改。

获取所有IP地址

通过调用便利的静态函数allAddresses(),可以返回一个QHostAddress地址列表(只能获取IP地址,没有子网掩码和广播地址的信息)。

QList<QHostAddress> list = QNetworkInterface::allAddresses();
foreach (QHostAddress address, list) {if (!address.isNull())qDebug() << "Address : " << address.toString();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

输出如下:

Address : “fe80::550c:ab19:fb48:1c9%15” 
Address : “169.254.1.201” 
Address : “fe80::d086:8566:6065:8954%11” 
Address : “172.18.4.165” 
Address : “fe80::f864:a962:7219:f98e%16” 
Address : “192.168.17.1” 
Address : “fe80::8169:691f:148e:d3cb%17” 
Address : “192.168.178.1” 
Address : “fe80::5996:27a3:83b5:2ae7%18” 
Address : “192.168.56.1” 
Address : “::1” 
Address : “127.0.0.1”

QHostAddress类提供一个IP地址,更多参考:Qt之QHostAddress

获取网络接口列表

通过调用便利的静态函数allInterfaces(),可以返回一个QNetworkInterface网络接口列表(通过QNetworkAddressEntry,可以获取IP地址、子网掩码和广播地址等信息)。

QList<QNetworkInterface> list = QNetworkInterface::allInterfaces();
foreach (QNetworkInterface netInterface, list) {if (!netInterface.isValid())continue;qDebug() << "********************";QNetworkInterface::InterfaceFlags flags = netInterface.flags();if (flags.testFlag(QNetworkInterface::IsRunning)&& !flags.testFlag(QNetworkInterface::IsLoopBack)) {  // 网络接口处于活动状态qDebug() << "Device : " << netInterface.name();  // 设备名qDebug() << "HardwareAddress : " << netInterface.hardwareAddress();  // 硬件地址qDebug() << "Human Readable Name : " << netInterface.humanReadableName();  // 人类可读的名字}// QList<QNetworkAddressEntry> entryList = netInterface.addressEntries();// foreach(QNetworkAddressEntry entry, entryList) { // 遍历每一个IP地址// qDebug() << "IP Address:" << entry.ip().toString();  // IP地址// qDebug() << "Netmask:" << entry.netmask().toString();  // 子网掩码// qDebug() << "Broadcast:" << entry.broadcast().toString();  // 广播地址//}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

通过flags()函数,可以获取到当前网络接口的标识,利用testFlag()进行过滤,就可以获取我们想要的内容(设备名、硬件地址、名字)。

注意:为了简单,我注释掉了IP地址的信息,需要的可以自行测试。

QNetworkAddressEntry类存储了一个IP地址,子网掩码和广播地址。更多参考:Qt之QNetworkAddressEntry

输出如下:

 


 

Device : “{BE9972CD-860E-4E15-8CE2-3F25EF0A7A24}” 
HardwareAddress : “94:DE:80:21:92:17” 
Human Readable Name : “本地连接”


Device : “{29F85058-E757-4F60-BF7B-47F6227C8CBC}” 
HardwareAddress : “00:50:56:C0:00:01” 
Human Readable Name : “VMware Network Adapter VMnet1”


Device : “{A297491C-D43C-4F85-A674-88368F8D4FC1}” 
HardwareAddress : “00:50:56:C0:00:08” 
Human Readable Name : “VMware Network Adapter VMnet8”


Device : “{1AE5F6FC-478A-4EAB-B4D2-86201A6B2090}” 
HardwareAddress : “0A:00:27:00:00:12” 
Human Readable Name : “VirtualBox Host-Only Network”

更多参考

  • Qt之网络编程
  • Qt之QHostInfo
  • Qt之QHostAddress
  • Qt之QNetworkAddressEntry

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第二周计划

上周计划回顾 3.5 ~ 3.11 数据&#xff1a; 评师网爬取&#xff0c;完成&#xff1a;2k条记录 finished后端 数据结构 技术选型 学校API封装未完成&#xff1a;后端负责人出差 工作暂停产品 功能设计&#xff1a;主要功能提交&#xff1a;原型图 几个页面 每个页面大概功能完成…

python编程软件排行榜_PYPL 9月编程语言排行榜发布 Python一枝独秀

开发者可以将 PYPL 作为一个参考&#xff0c;决定学习何种语言或 IDE&#xff0c;或者在新的软件项目中使用何种语言或数据库。9 月份的榜单如下&#xff1a;前五名分别是 Python、Java、JavaScript、C# 与 PHP。相比去年 9 月份的数据&#xff0c;除了 Python 大幅上涨了 4.5%…

分享到系统面板_win7电脑没有nvidia控制面板怎么办【解决方法】

我们在使用电脑的时候&#xff0c;当电脑显卡出现问题导致屏幕画面不清晰时&#xff0c;可以使用win7系统自带nvidia控制面板&#xff0c;它能够对显卡进行设置&#xff0c;提升显卡功能&#xff0c;不过很多电脑用户点击nvidia控制面板时却提示nvidia显示设置不可用&#xff0…

Python之数据加密与解密(hashlib、hmac、random、base64、pycrypto)--转载

本文内容 数据加密概述Python中实现数据加密的模块简介hashlib与hmac模块介绍random与secrets模块介绍base64模块介绍pycrypto模块介绍总结参考文档提示&#xff1a; Python 2.7中的str是字节串&#xff0c;而Python 3.x中的str是字符串。本文中的代码都是通过Python 2.7实现的…

day3-文件操作之基本操作

一、文件的基本操作 文件内容&#xff1a; Somehow, it seems the love I knew was always the most destructive kind 不知为何&#xff0c;我经历的爱情总是最具毁灭性的的那种 Yesterday when I was young 昨日当我年少轻狂1、read() 当read()函数中传入整数(int)参数&#…

QT连接多种数据库f方法及测试

QT提供了对多种数据库的访问支持&#xff0c;对SQL Server也可以通过ODBC来进行访问。要想顺利访问SQL Server。 首先要保证以下几点&#xff1a;1. QT编译时已经编译了QtSql2. 编译了ODBC插件。可以通过 configure -plugin-sql-odbc来保证&#xff0c;也可以单独编译~/src/plu…

服务器如何实现电脑无线桥接,无线路由器WDS桥接成功副路由器下电脑无法上网怎么办【解决方法】...

摘 要无线WDS桥接设置完成后&#xff0c;在副路由器管理面&#xff0c;运行状态 无线状态 中&#xff0c;WDS状态显示成功&#xff0c;但电脑通过副路由无法上网。该问题可能与主、副路由器的设置有关&#xff0c;如下图所示&#xff1a; 解决办法&#xff1a; 排查一&#xff…

spad 探测器_从光到光子—“单光子”探测器

光电探测器光电探测器是指在光辐射作用下将其非传导电荷变为传导电荷的一类器件。在电子学中&#xff0c;二极管是一种具有不对称传输特性的双端电子元件&#xff0c;在一个方向上对电流具有低(理想为零)电阻&#xff0c;在另一个方向上具有高(理想为无限)电阻。最常见的类型如…

天地图专题五:在天地图上绘制电子区域并保存数据

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请注明出处。 上一文章讲了如何在天地图上显示坐标轨迹。 本文介绍如何在天地图上绘制电子区域&#xff08;电子范围或电子栅栏&#xff09;&#xff0c;并且&#xff0c;我们要将我们绘制的电子区域的坐标数据保存到数…

Mysql中natural join和inner join的区别

假设有如下两个表TableA&#xff0c;TableB TableA TableB Column1 Column2 Column1 Column3 1 2 1 3TableA的Column1列名和TableB的Column1列名相同。 SELECT * FROM TableA INNER JOIN TableB USING (Column1) SEL…

微信和支付宝的服务器在哪里,手机恢复出厂设置,里面支付宝与微信怎么办?原来数据在这里...

当手机使用一段时间之后&#xff0c;因为硬件落后会出现卡顿、内存不足等情况&#xff0c;这个时候提高手机速度最直接的一个办法就是恢复出厂设置&#xff0c;虽然不能从根源上解决问题&#xff0c;但是还是可以凑合个半年时间的。那么这个时候就出现一个问题&#xff0c;手机…

python线上编辑问题_python django - static文件处理与线上部署测试

static文件相关操作涉及&#xff1a;a. 文件位置与访问路径映射b. setting.py与static相关配置STATIC_URLSTATIC_ROOTSTATICFILES_DIRSc. html中对于static文件引用方式d. python manage.py collectstatic1. 开发环境-目录结构2. setting.py 设置STATIC_URL /static/# STATIC_…

android arcgis 绘制圆_arcgis for android 定位 圆

不多说直接代码 &#xff0c;群里人共享的方法一&#xff1a; /*** 绘制圆,配合 cleargraphicLayer()清除** param center 圆心* param radius 半径* param alpha 填充的透明度 0-100* param fillColor 填充的颜色*/public void DrawCircle(Point center, double radius, int a…

CreateSolidBrush

[声明] WINGDIAPI HBRUSH WINAPI CreateSolidBrush(COLORREF color); [功能] 初始化一个指定颜色的画刷。画笔可以随后被选为任何设备上下文的当前刷子。 [参数表] color 画刷的颜色[返回值] Long&#xff0c;如函数执行成功&#xff0c;就返回指向新画笔的一个句柄&#xff1b…

mysql insert 不需要日志_MySQL数据库性能优化(1)「转」

1、MySQL概述从本文开始我们将讨论建立在块存储方案之上的关系型数据库的性能优化方案和集群方案。关系型数据库的选型将以创业公司、互联网行业使用最广泛的MySQL数据为目标&#xff0c;但是MySQL的安装过程和基本使用方法等知识并不在我们讨论的范围内。后续几篇文章我们首先…

javascript面试题以及对所涉及到的知识点的总结

前言 这几天将js方面的知识系统的回顾了一遍&#xff0c;但是当尝试去做一些面试题时觉得解决问题的能力以及效率还是有所欠缺&#xff0c;在这里特意记录一下所做的面试题并总结所涉及到的相关知识点。 一、面试题、答案以及总结 1、截取字符串abcdefg的efg var str"abcd…

十代主板改win7_技嘉B460主板UEFI+GPT装win7|10代CPU装win7 Bios设置

随着英特尔十代酷睿处理器的全面上市,针对主流用户的B460平台成为了大众主要关注的目标。作为国际一线板卡品牌的技嘉科技针对十代酷睿的特点,推出了B460主板。这块主板装win7、win10都可以,但是在装win7的过程中USB设备不能使用(本站支持最新的B460/Z490等新主板驱动),需要…

Java swing中的keyListener使用事例

最近在学习Java swing&#xff0c;写了一个域内聊天室&#xff0c;实现用户登录ip,端口号之后&#xff0c;进入聊天窗口聊天&#xff1a; 通过菜单条增加了几个功能&#xff0c;边框&#xff0c;字体&#xff0c;颜色和文件传输。风格里的样式都可以通过自己选择来设置。 介绍以…

「前端」History API与浏览器历史堆栈管理

本文由尚妆前端开发工程师欲休撰写 本文发表于尚妆博客&#xff0c;欢迎订阅&#xff01; 移动端开发在某些场景中有着特殊需求&#xff0c;如为了提高用户体验和加快响应速度&#xff0c;常常在部分工程采用SPA架构。传统的单页应用基于url的hash值进行路由&#xff0c;这种实…

Andrew Ng机器学习(一):线性回归

1.什么是线性回归&#xff1f; 用线性关系去拟合输入和输出。 设输入为x&#xff0c;则输出yaxb。 对于多元的情况yb1a1x1a2x2...anxn。 用θ表示系数&#xff0c;可以写作&#xff1a; 其中&#xff0c;x01。 2.线性回归有什么用&#xff1f; 对于连续输入和输出的问题&#x…