」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何使用 C++ 以程式設計方式確定 Linux 伺服器的 IP 位址?

如何使用 C++ 以程式設計方式確定 Linux 伺服器的 IP 位址?

發佈於2024-12-21
瀏覽:478

How Can I Programmatically Determine a Linux Server's IP Addresses in C  ?

以C 語言程式設計確定Linux 伺服器IP 位址

簡介

識別Linux 伺服器的IP 位址對於網路通訊和應用程式部署至關重要。本文提出了一種用 C 編寫的程式設計解決方案,用於有效檢索 Linux 電腦的 IP 位址。

問題陳述

目標是在 C 應用程式中以程式設計方式取得 Linux 伺服器的 IP 位址。伺服器可能有多個 IP 位址,包括本機主機位址、內部(管理)位址和外部(公用)位址。目標是檢索應用程式綁定的外部 IP 位址。

Lösung

標準 C 函式庫提供 getifaddrs() 函數來取得有關係統的網路介面和 IP 位址的資訊。以下是使用 getifaddrs() 列印本機電腦的所有 IPv4 和 IPv6 位址的範例:

#include 
#include 
#include 

int main() {
    struct ifaddrs *ifAddrStruct = NULL;
    struct ifaddrs *ifa = NULL;
    void *tmpAddrPtr = NULL;

    getifaddrs(&ifAddrStruct);

    for (ifa = ifAddrStruct; ifa != NULL; ifa = ifa->ifa_next) {
        if (!ifa->ifa_addr) {
            continue;
        }
        if (ifa->ifa_addr->sa_family == AF_INET) { // IPv4 address
            tmpAddrPtr = &((struct sockaddr_in *)ifa->ifa_addr)->sin_addr;
            char addressBuffer[INET_ADDRSTRLEN];
            inet_ntop(AF_INET, tmpAddrPtr, addressBuffer, INET_ADDRSTRLEN);
            printf("IPv4 Address %s\n", addressBuffer);
        } else if (ifa->ifa_addr->sa_family == AF_INET6) { // IPv6 address
            tmpAddrPtr = &((struct sockaddr_in6 *)ifa->ifa_addr)->sin6_addr;
            char addressBuffer[INET6_ADDRSTRLEN];
            inet_ntop(AF_INET6, tmpAddrPtr, addressBuffer, INET6_ADDRSTRLEN);
            printf("IPv6 Address %s\n", addressBuffer);
        }
    }

    if (ifAddrStruct != NULL) {
        freeifaddrs(ifAddrStruct);
    }

    return 0;
}

要擷取外部IP位址,您可以使用類似的方法,但專門尋找連接到外部網路的介面。您可以將 siocgifaddr 與 SIOCGIFADDR 一起使用來擷取特定介面的 IP 位址。

Fazit

getifaddrs() 函數和siocgifaddr 與SIOCGIFADDR 一起提供了用於檢索Linux 電腦的IP 位址的可靠方法在C.這些方法使應用程式能夠動態適應網路變化並建立必要的網路連線。

最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3