識別Linux 伺服器的IP 位址對於網路通訊和應用程式部署至關重要。本文介紹了一種用 C 編寫的程式設計解決方案,用於有效檢索 Linux 電腦的 IP 位址。
目標是在 C 應用程式中以程式設計方式取得 Linux 伺服器的 IP 位址。伺服器可能有多個 IP 位址,包括本機主機位址、內部(管理)位址和外部(公用)位址。目標是檢索應用程式綁定的外部 IP 位址。
標準 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 位址。
getifaddrs() 函數和siocgifaddr 與SIOCGIFADDR 提供了用於檢索Linux 電腦的IP 位址的可靠方法在C.這些方法使應用程式能夠動態適應網路變化並建立必要的網路連線。
以上是如何用 C 語言以程式設計方式決定 Linux 伺服器的 IP 位址?的詳細內容。更多資訊請關注PHP中文網其他相關文章!