"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment puis-je déterminer par programme les adresses IP d’un serveur Linux en C++ ?

Comment puis-je déterminer par programme les adresses IP d’un serveur Linux en C++ ?

Publié le 2024-12-21
Parcourir:819

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

Détermination par programmation des adresses IP des serveurs Linux en C

Introduction

L'identification des adresses IP d'un serveur Linux est essentielle pour la communication réseau et le déploiement d'applications. Cet article présente une solution programmatique en C pour récupérer efficacement les adresses IP d'une machine Linux.

Énoncé du problème

L'objectif est d'obtenir par programmation les adresses IP d'un serveur Linux au sein d'une application C. . Le serveur peut avoir plusieurs adresses IP, notamment une adresse d'hôte local, une adresse interne (de gestion) et une adresse externe (publique). L'objectif est de récupérer l'adresse IP externe pour la liaison d'application.

Lösung

La bibliothèque C standard fournit la fonction getifaddrs() pour obtenir des informations sur les interfaces réseau et les adresses IP d'un système. Voici un exemple qui utilise getifaddrs() pour imprimer toutes les adresses IPv4 et IPv6 de la machine locale :

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

Pour récupérer l'adresse IP externe, vous pouvez utiliser une approche similaire mais en recherchant spécifiquement l'interface qui se connecte au réseau externe. Vous pouvez utiliser siocgifaddr avec SIOCGIFADDR pour récupérer l'adresse IP d'une interface spécifique.

Fazit

La fonction getifaddrs() et siocgifaddr avec SIOCGIFADDR fournissent des méthodes robustes pour récupérer les adresses IP d'une machine Linux. en C. Ces approches permettent aux applications de s'adapter dynamiquement aux changements du réseau et d'établir les connexions réseau nécessaires.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3