获取本机所有 IP 地址,包括 IPV6的地址,需要引用 QNetworkInterface
#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 可以帮助构建用于诊断和监控网络状态的工具。例如,查看设备上所有网络接口的状态、检测网络连接问题、获取接口相关信息等。