"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo puedo determinar mediante programación las direcciones IP de un servidor Linux en C++?

¿Cómo puedo determinar mediante programación las direcciones IP de un servidor Linux en C++?

Publicado el 2024-12-21
Navegar:486

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

Determinación programática de las direcciones IP del servidor Linux en C

Introducción

Identificar las direcciones IP de un servidor Linux es esencial para la comunicación de red y la implementación de aplicaciones. Este artículo presenta una solución programática en C para recuperar efectivamente las direcciones IP de una máquina Linux.

Declaración del problema

El objetivo es obtener mediante programación las direcciones IP de un servidor Linux dentro de una aplicación C . El servidor puede tener varias direcciones IP, incluida una dirección de host local, una dirección interna (de administración) y una dirección externa (pública). El objetivo es recuperar la dirección IP externa para el enlace de la aplicación.

Lösung

La biblioteca C estándar proporciona la función getifaddrs() para obtener información sobre las interfaces de red y las direcciones IP de un sistema. Aquí hay un ejemplo que usa getifaddrs() para imprimir todas las direcciones IPv4 e IPv6 de la máquina local:

#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;
}

Para recuperar la dirección IP externa, puede utilizar un enfoque similar pero buscando específicamente la interfaz que se conecta a la red externa. Puede utilizar siocgifaddr con SIOCGIFADDR para recuperar la dirección IP de una interfaz específica.

Fazit

La función getifaddrs() y siocgifaddr con SIOCGIFADDR proporcionan métodos sólidos para recuperar las direcciones IP de una máquina Linux Cª . Estos enfoques permiten que las aplicaciones se adapten dinámicamente a los cambios de la red y establezcan las conexiones de red necesarias.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3