簡體   English   中英

C++/Qt:如何檢測主機名或 IP 地址何時引用當前系統?

[英]C++ / Qt: How can I detect when a hostname or IP address refers to the current system?

我正在使用 Qt 編寫一個 macOS C++ 應用程序,它同時充當 UDP 客戶端和 UDP 服務器。 服務器功能允許用戶配置接收 UDP 數據包的端口,客戶端功能允許指定目標主機和端口號。 主機可以是主機名或 IP 地址,包括解析為多播或廣播地址的地址或主機名。

為了幫助防止循環,當啟用服務器功能時,我需要能夠在他們為客戶端輸入的主機和端口將數據包直接發送到應用程序的服務器時警告用戶。 當然,檢查端口號是否匹配很容易,但這意味着我需要知道他們輸入的主機是否指的是當前系統。

通常會出現問題的主機名或 IP 地址示例:

  • 127.0.0.1
  • localhost
  • 192.168.1.255 (假設系統在192.168.1.0/24子網上)
  • 分配給當前系統網絡接口的任何 IP 地址
  • 系統的本地 DNS 名稱
  • 除了127.0.0.1之外,可以配置的任何其他環回地址

我怎么能去檢測這個?

由於此應用程序是使用 Qt 編寫的,因此專門使用 Qt 框架的解決方案將是理想的選擇。 但如果這是不可能的(因為 Qt 不能處理所有可能的用例),macOS 特定的解決方案也將起作用。

QNetworkInterface類應該提供您可能需要的最多信息。 您可以使用QNetworkInterface::allAddresses()靜態函數獲取 IP 地址列表。

您還可以使用QNetworkInterface::allInterfaces()獲取所有接口的列表。

QNetworkInterface::allInterfaces()返回的每個QNetworkInterface調用QNetworkInterface:: addressEntries()將為您提供有關每個接口的地址條目的更多信息。

auto ifs = QNetworkInterface::allInterfaces();
foreach (auto interface , ifs){
    auto addresses = interface.addressEntries();
    foreach ( auto addy , addresses){
        ///play with the addy here.
    }
}

您還可以使用QDnsLookup類針對您要禁止的那些 IP 地址測試主機名。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM