我们如何以编程方式获取运行我们的应用程序的 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中文网其他相关文章!