識別Linux 伺服器的IP 位址對於網路通訊和應用程式部署至關重要。本文提出了一種用 C 編寫的程式設計解決方案,用於有效檢索 Linux 電腦的 IP 位址。
目標是在 C 應用程式中以程式設計方式取得 Linux 伺服器的 IP 位址。伺服器可能有多個 IP 位址,包括本機主機位址、內部(管理)位址和外部(公用)位址。目標是檢索應用程式綁定的外部 IP 位址。
標準 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 位址。
getifaddrs() 函數和siocgifaddr 與SIOCGIFADDR 一起提供了用於檢索Linux 電腦的IP 位址的可靠方法在C.這些方法使應用程式能夠動態適應網路變化並建立必要的網路連線。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3