Wie erhalten wir programmgesteuert die IP-Adressen eines Linux-Servers, auf dem unsere Anwendung ausgeführt wird? , insbesondere das externe (öffentliche)?
Ein Linux-Server verfügt normalerweise über mehrere Netzwerke Schnittstellen mit jeweils eigener IP-Adresse. Es verfügt über:
Mit der getifaddrs-Funktion können alle einer Maschine zugeordneten IP-Adressen abgerufen werden. Es stellt eine verknüpfte Liste von ifaddrs-Strukturen bereit. Hier ist ein C-Beispiel:
#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; }
Dieser Code durchläuft alle Netzwerkschnittstellen und gibt die IP-Adressen sowohl für IPv4- als auch für IPv6-Adressen aus.
Durch Überprüfung der Netzwerkschnittstellennamen (z. B. eth0 , eth1 usw.) können Sie die externe (öffentliche) IP-Adresse identifizieren und zum Binden Ihrer Anwendung verwenden.
Das obige ist der detaillierte Inhalt vonWie erhalte ich programmgesteuert die öffentliche IP-Adresse eines Linux-Servers in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!