首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Qt5 獲取本機網絡信息完整方案:IP、主機名、MAC、子網掩碼、廣播地址

     編輯:關於C語言

Qt5 獲取本機網絡信息完整方案

在 Qt5 中,QNetworkInterface 和 QHostInfo 提供了豐富的 API 獲取本機網絡配置。本文匯總常用信息的獲取方法,代碼可直接用於項目中。

1. 獲取主機名稱

QString getLocalMachineName() {
    return QHostInfo::localHostName();
}

2. 獲取本機 IPv4 地址(優先非回環)

QString getLocalMachineIP() {
    QString ipAddress;
    const QList addresses = QNetworkInterface::allAddresses();
    
    for (const QHostAddress &addr : addresses) {
        if (addr != QHostAddress::LocalHost && addr.protocol() == QAbstractSocket::IPv4Protocol) {
            ipAddress = addr.toString();
            break;
        }
    }
    
    // 兜底:未找到則使用 IPv4 回環地址
    if (ipAddress.isEmpty()) {
        ipAddress = QHostAddress(QHostAddress::LocalHost).toString();
    }
    return ipAddress;
}

3. 獲取網絡接口名稱與 MAC 地址

void printNetworkInterfaces() {
    const QList interfaces = QNetworkInterface::allInterfaces();
    for (const QNetworkInterface &ni : interfaces) {
        qDebug() << "Interface:" << ni.name()
                 << "MAC:" << ni.hardwareAddress()
                 << "HumanName:" << ni.humanReadableName();
    }
}

4. 獲取子網掩碼與廣播地址

需遍歷每個接口的地址條目(QNetworkAddressEntry):

void printIPDetails(const QNetworkInterface &interface) {
    const QList entries = interface.addressEntries();
    for (const QNetworkAddressEntry &entry : entries) {
        qDebug() << "IP:" << entry.ip().toString()
                 << "Netmask:" << entry.netmask().toString()
                 << "Broadcast:" << entry.broadcast().toString();
    }
}

// 組合調用示例
void dumpAllNetworkInfo() {
    const QList interfaces = QNetworkInterface::allInterfaces();
    for (const QNetworkInterface &ni : interfaces) {
        qDebug() << "\n=== Interface:" << ni.name() << "===";
        printIPDetails(ni);
    }
}

關鍵類說明

  • QHostInfo:靜態方法獲取主機名、異步查詢主機地址。
  • QNetworkInterface:枚舉所有網絡接口,提供名稱、MAC、IP 條目列表。
  • QNetworkAddressEntry:封裝單個 IP 地址條目,包含 IP、子網掩碼、廣播地址。

注意事項

  1. 多網卡環境下會返回多個接口,需根據業務邏輯篩選(如忽略回環、虛擬網卡)。
  2. MAC 地址可能為空(如某些虛擬接口)。
  3. 廣播地址僅在支持廣播的接口上有效。
  4. 跨平台一致性良好,Windows/Linux/macOS 均適用。

將上述函數封裝為工具類,即可在項目中輕松獲取完整網絡拓撲信息。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved