Maison >développement back-end >C++ >Comment obtenir par programme l'adresse IP publique d'un serveur Linux en C ?
Comment obtenir par programme les adresses IP d'un serveur Linux exécutant notre application , en particulier celui externe (public) ?
Un serveur Linux a généralement plusieurs interfaces réseau, chacune avec sa propre adresse IP. Il possède :
La fonction getifaddrs peut être utilisée pour récupérer toutes les adresses IP associées à une machine. Il fournit une liste chaînée de structures ifaddrs. Voici un exemple en C :
#include <stdio.h> #include <sys/types.h> #include <ifaddrs.h> #include <netinet/in.h> #include <string.h> #include <arpa/inet.h> using namespace std; int main() { struct ifaddrs *ifAddrStruct, *ifa; void *tmpAddrPtr; getifaddrs(&ifAddrStruct); for (ifa = ifAddrStruct; ifa != NULL; ifa = ifa->ifa_next) { if (!ifa->ifa_addr) { continue; } if (ifa->ifa_addr->sa_family == AF_INET) { tmpAddrPtr = &((struct sockaddr_in *)ifa->ifa_addr)->sin_addr; char addressBuffer[INET_ADDRSTRLEN]; inet_ntop(AF_INET, tmpAddrPtr, addressBuffer, INET_ADDRSTRLEN); printf("%s IP Address: %s\n", ifa->ifa_name, addressBuffer); } else if (ifa->ifa_addr->sa_family == AF_INET6) { tmpAddrPtr = &((struct sockaddr_in6 *)ifa->ifa_addr)->sin6_addr; char addressBuffer[INET6_ADDRSTRLEN]; inet_ntop(AF_INET6, tmpAddrPtr, addressBuffer, INET6_ADDRSTRLEN); printf("%s IP Address: %s\n", ifa->ifa_name, addressBuffer); } } if (ifAddrStruct != NULL) freeifaddrs(ifAddrStruct); return 0; }
Ce code parcourt toutes les interfaces réseau et imprime les adresses IP pour les adresses IPv4 et IPv6.
En inspectant les noms d'interface réseau (par exemple, eth0 , eth1, etc.), vous pouvez identifier l'adresse IP externe (publique) et l'utiliser pour lier votre application.
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!