So erhalten Sie programmgesteuert die IP-Adressen einer Linux-Maschine in C
Einführung:
Dieser Artikel befasst sich mit einer häufigen Programmierherausforderung: der Ermittlung der IP-Adressen eines Linux-Computers, auf dem eine in C geschriebene Anwendung ausgeführt wird. Der Fokus liegt hier auf dem Erhalten der externen bzw. öffentlichen IP-Adresse des Servers.
Problemstellung:
Die Aufgabe besteht darin, ein C-Programm zu entwickeln, das die IP-Adressen abruft einer Linux-Maschine, insbesondere derjenigen, die einem bestimmten Netzwerk (der öffentlichen IP) zugewiesen ist. Dadurch wird sichergestellt, dass sich die Anwendung an die gewünschte externe Adresse für die Netzwerkkommunikation binden kann.
Lösung:
Um dieses Problem zu lösen, nutzen wir den Funktionsaufruf getifaddrs(). welches Teil des POSIX-Standards ist und somit unter Linux verfügbar ist. Diese Funktion bietet eine bequeme Möglichkeit, alle Netzwerkschnittstellen zu durchlaufen und deren IP-Adressen abzurufen.
Implementierung:
Der folgende C-Code zeigt, wie getifaddrs() verwendet wird. Funktion:
#include <stdio.h> #include <sys/types.h> #include <ifaddrs.h> #include <netinet/in.h> #include <string.h> #include <arpa/inet.h> int main (int argc, const char * argv[]) { 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) { // check it is IP4 // is a valid IP4 Address 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) { // check it is IP6 // is a valid IP6 Address 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; }
Erklärung:
Dies Der Code durchläuft mithilfe der ifa-Schleife alle Netzwerkschnittstellen und überprüft die Adressfamilie jeder Schnittstelle. Wenn es sich um IPv4 oder IPv6 handelt, wandelt es die Adresse in eine Zeichenfolge um und gibt sie zusammen mit dem Schnittstellennamen aus.
Mit diesem Ansatz können Sie alle dem Linux-Computer zugewiesenen IP-Adressen erkennen und die gewünschte öffentliche IP für die Bindung identifizieren Zwecke.
Das obige ist der detaillierte Inhalt vonWie erhalte ich programmgesteuert die öffentliche IP-Adresse einer Linux-Maschine in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!