识别 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