我們如何以程式設計方式取得執行我們的應用程式的Linux 伺服器的IP 位址,特別是外部(公共)網路?
Linux 伺服器通常有多個網路接口,每個介面都有自己的 IP 位址。它有:
getifaddrs 函數可用於擷取與電腦關聯的所有 IP 位址。它提供了 ifaddrs 結構的鍊錶。這是一個 C 範例:
#include <stdio.h> #include <sys/types.h> #include <ifaddrs.h> #include <netinet/in.h> #include <string.h> #include <arpa/inet.h> using namespace std; int main() { struct ifaddrs *ifAddrStruct, *ifa; void *tmpAddrPtr; getifaddrs(&ifAddrStruct); for (ifa = ifAddrStruct; ifa != NULL; ifa = ifa->ifa_next) { if (!ifa->ifa_addr) { continue; } if (ifa->ifa_addr->sa_family == AF_INET) { tmpAddrPtr = &((struct sockaddr_in *)ifa->ifa_addr)->sin_addr; char addressBuffer[INET_ADDRSTRLEN]; inet_ntop(AF_INET, tmpAddrPtr, addressBuffer, INET_ADDRSTRLEN); printf("%s IP Address: %s\n", ifa->ifa_name, addressBuffer); } else if (ifa->ifa_addr->sa_family == AF_INET6) { tmpAddrPtr = &((struct sockaddr_in6 *)ifa->ifa_addr)->sin6_addr; char addressBuffer[INET6_ADDRSTRLEN]; inet_ntop(AF_INET6, tmpAddrPtr, addressBuffer, INET6_ADDRSTRLEN); printf("%s IP Address: %s\n", ifa->ifa_name, addressBuffer); } } if (ifAddrStruct != NULL) freeifaddrs(ifAddrStruct); return 0; }
此程式碼迭代所有網路介面並列印 IPv4 和 IPv6 位址的 IP 位址。
透過檢查網路介面名稱(例如 eth0) 、eth1 等),您可以識別外部(公用)IP 位址並使用它來綁定您的應用程式。
以上是如何用 C 語言以程式設計方式取得 Linux 伺服器的公共 IP 位址?的詳細內容。更多資訊請關注PHP中文網其他相關文章!