首頁 >後端開發 >C++ >如何用 C 語言以程式設計方式決定 Linux 伺服器的 IP 位址?

如何用 C 語言以程式設計方式決定 Linux 伺服器的 IP 位址?

Barbara Streisand
Barbara Streisand原創
2024-12-10 20:43:11394瀏覽

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 <stdio.h>
#include <sys/types.h>
#include <ifaddrs.h>

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.這些方法使應用程式能夠動態適應網路變化並建立必要的網路連線。

以上是如何用 C 語言以程式設計方式決定 Linux 伺服器的 IP 位址?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn