QT 获取本机所有 IP 地址

复制代码
获取本机所有 IP 地址,包括 IPV6的地址,需要引用 QNetworkInterface 
cpp 复制代码
#include <QNetworkInterface>

// 获取本机所有 IP 地址
void MainWindow::getLocalIPs() {
    QList<QHostAddress> ipAddressesList;
    QList<QNetworkInterface> interfaces = QNetworkInterface::allInterfaces();
    foreach (QNetworkInterface interface, interfaces) {
        if (interface.flags() & QNetworkInterface::IsUp && !(interface.flags() & QNetworkInterface::IsLoopBack)) {
            QList<QNetworkAddressEntry> addressEntries = interface.addressEntries();
            foreach (QNetworkAddressEntry entry, addressEntries) {
                 只获取IPV4地址
                 if (entry.ip().protocol() == QAbstractSocket::IPv4Protocol)
                    ipAddressesList.append(entry.ip());
            }
        }
    }


    // 输出所有 IP 地址
    foreach (QHostAddress address, ipAddressesList) {
        qDebug() << address.toString();
       // ui->textEdit->append(address.toString());
    }
}

QNetworkInterface 是 Qt 框架中用于检索和处理网络接口的类。它提供了获取本地系统中所有网络接口的信息的能力,并允许访问与这些接口相关的属性,比如IP地址、硬件地址、接口名称等。

以下是一些关于 QNetworkInterface 类的主要功能和应用场景的说明:

1.检索所有网络接口:

通过 QNetworkInterface::allInterfaces() 可以获取当前设备的所有网络接口的列表。这在构建网络工具、诊断工具或其他与网络相关的应用时很有用。

QList<QNetworkInterface> interfaces = QNetworkInterface::allInterfaces();

2.获取接口的详细信息:

每个 QNetworkInterface 对象包含接口的属性,如硬件地址、接口名称、标志(如是否为环回、是否可用、是否为无线等)。

for (const QNetworkInterface &interface : interfaces) {

QString name = interface.name(); // 接口名称

QString hardwareAddress = interface.hardwareAddress(); // MAC 地址

QFlags<QNetworkInterface::InterfaceFlag> flags = interface.flags(); // 接口标志

}

3.获取接口的 IP 地址:

你可以通过 QNetworkInterface::allAddresses() 获取与特定接口关联的所有 IP 地址。这些地址可能是 IPv4 或 IPv6。

QList<QHostAddress> addresses = interface.allAddresses();

for (const QHostAddress &address : addresses) {

if (address.protocol() == QAbstractSocket::IPv4Protocol) {

qDebug() << "IPv4 address:" << address.toString();

} else if (address.protocol() == QAbstractSocket::IPv6Protocol) {

qDebug() << "IPv6 address:" << address.toString();

}

}

4.用于网络诊断和监控:

QNetworkInterface 可以帮助构建用于诊断和监控网络状态的工具。例如,查看设备上所有网络接口的状态、检测网络连接问题、获取接口相关信息等。

相关推荐
笑鸿的学习笔记1 分钟前
C++笔记之大块顺序写
java·c++·笔记
无名猿1 小时前
对象构造与析构顺序全解:声明顺序、继承链与逆序析构
c++·内存管理·调试技巧·现代c++
殷色玫瑰1 小时前
C/C++ 内存管理详解:从内存分布到 new/delete 底层原理
java·linux·c语言·c++
C++ 老炮儿的技术栈1 小时前
不一样的数值交换
数据结构·c++·人工智能·算法·c·csdn开发云
C++ 老炮儿的技术栈2 小时前
main函数之后的调用
c语言·c++·人工智能·qt·mfc·c
知识分享小能手2 小时前
C++ 学习教程,从入门到精通,C++ 友元、异常和其他特性 — 详细知识点(15)
开发语言·c++·学习
ebiobiz2 小时前
极海 APM32 使用 Nimmake 编译指南
c++·python·单片机·嵌入式硬件·mcu
朝朝辞暮i3 小时前
C++ 第 26 课:对象、指针与 ->
java·开发语言·c++
殷色玫瑰4 小时前
C++入门基础复习:从命名空间到引用与nullptr,一篇重新捡回C++基础
java·开发语言·c++
(Charon)4 小时前
【C++面试】手写线程池:任务队列、工作线程与优雅退出
开发语言·c++