首页 >后端开发 >C++ >如何用 C 语言以编程方式确定 Linux 服务器的 IP 地址?

如何用 C 语言以编程方式确定 Linux 服务器的 IP 地址?

Barbara Streisand
Barbara Streisand原创
2024-12-10 20:43:11394浏览

How Can I Programmatically Determine a Linux Server's IP Addresses in C  ?

用 C 语言以编程方式确定 Linux 服务器 IP 地址

简介

识别 Linux 服务器的 IP 地址对于网络通信和应用程序部署至关重要。本文介绍了一种用 C 编写的编程解决方案,用于有效检索 Linux 计算机的 IP 地址。

问题陈述

目标是在 C 应用程序中以编程方式获取 Linux 服务器的 IP 地址。服务器可能有多个 IP 地址,包括本地主机地址、内部(管理)地址和外部(公共)地址。目标是检索应用程序绑定的外部 IP 地址。

Lösung

标准 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 地址。

Fazit

getifaddrs() 函数和 siocgifaddr 与 SIOCGIFADDR 提供了用于检索 Linux 计算机的 IP 地址的可靠方法在 C .这些方法使应用程序能够动态适应网络变化并建立必要的网络连接。

以上是如何用 C 语言以编程方式确定 Linux 服务器的 IP 地址?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn