QT獲取本地的主機網路資訊

  • 2019 年 12 月 11 日
  • 筆記

QHostInfo 類:查詢與特定主機名相關聯的主機的IP地址,或者與一個IP地址相關聯的主機名。

QHostAddress 類:提供一個IP地址,可提供獨立於平台和協議的方式來保存 IPv4和IPv6 地址。

QNetworkInterface 類:負責提供主機IP地址和網路介面的列表,表示了當前程式正在運行時與主機綁定的一個網路介面。

QNetworkAddressEntry 類:存儲了一個網路介面所支援的一個IP地址,同時還有與之相關的子網掩碼和廣播地址。

#include <QCoreApplication>    #include <QHostInfo>  #include <QNetworkInterface>  #include <QString>    void getHostInformation();    int main(int argc, char *argv[])  {      QCoreApplication a(argc, argv);        getHostInformation();        return a.exec();  }    void getHostInformation()  {        /***********************************************************/      //QHostInfo 提供一系列有關網路資訊的靜態函數,可獲取主機名、IP地址      QString localHostName = QHostInfo::localHostName();         // 獲取本機主機名      qDebug() << "主機名: " << localHostName;      qDebug() << endl;        /***********************************************************/      //根據主機名獲取相關主機資訊,包括IP地址。      QHostInfo hostInfo = QHostInfo::fromName(localHostName);      QList<QHostAddress> addrList = hostInfo.addresses();        // 獲取本主機上的IP地址列表      qDebug() << "本主機上的IP地址列表,總計: " << addrList.count() ;        /***********************************************************/      foreach (QHostAddress var, addrList) {          qDebug() << var.toString(); //本機IP地址列表      }      qDebug() << endl;        /***********************************************************/      if(!addrList.isEmpty()) //獲得的主機IP地址列表可能為空。      {          // 在不為空情況下使用第一個IP地址,可能IPv6,也可能IPv4          qDebug() << "first ip addr:" << addrList.first().toString();      }      qDebug() << endl;        /***********************************************************/      QString ipAddress;      //QList<QHostAddress> addrList = QNetworkInterface::allAddresses(); //僅僅獲取IP地址列表      for (int i = 0; i < addrList.size(); ++i) {          if (addrList.at(i) != QHostAddress::LocalHost &&              addrList.at(i).toIPv4Address()) { //是IPv4地址且非 QHostAddress::LocalHost              ipAddress = addrList.at(i).toString();              qDebug() << "first ipv4 addr:" << ipAddress;// 在不為空情況下使用第一個IPv4地址              break;          }      }      qDebug() << endl;        /***********************************************************/      // 獲取本機的網路介面列表      QList<QNetworkInterface> ifaceList = QNetworkInterface::allInterfaces();      for (int i = 0; i < ifaceList.count(); i++){          QNetworkInterface var = ifaceList.at(i);          qDebug() << QString("########## 設備%1 ############").arg(i);          qDebug() << QString("介面名稱:") << var.humanReadableName();          qDebug() << QString("設備名稱:") << var.name();          qDebug() << QString("硬體地址:") << var.hardwareAddress();            /***********************************************************/          // 讀取一個IP地址的關聯資訊列表          QList<QNetworkAddressEntry> entryList = var.addressEntries();          //qDebug() << "IP地址的關聯資訊列表: ";          //foreach(QNetworkAddressEntry entry, entryList){              //qDebug() << "IP: " << entry.ip().toString();              //qDebug() << "子網掩碼:" << entry.netmask().toString();              //qDebug() << "廣播地址:" << entry.broadcast().toString();          //}            /***********************************************************/          // 讀取一個IPv4地址的關聯資訊列表          //qDebug() << "IPv4地址的關聯資訊列表: ";          foreach(QNetworkAddressEntry ipv4entry, entryList){              if (ipv4entry.ip().toIPv4Address())              {                  qDebug() << "IP: " << ipv4entry.ip().toString();                  qDebug() << "子網掩碼:" << ipv4entry.netmask().toString();                  qDebug() << "廣播地址:" << ipv4entry.broadcast().toString();              }            }      }        /***********************************************************/  }

版權聲明:源文來自CSDN,點擊這裡查看源文!