Maison >développement back-end >C++ >Comment puis-je déterminer par programme les adresses IP d'un serveur Linux en C ?
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 <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; }
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.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!