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.
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.
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.
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.
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