Heim > Backend-Entwicklung > C++ > Wie erhalte ich programmgesteuert die öffentliche IP-Adresse einer Linux-Maschine in C?

Wie erhalte ich programmgesteuert die öffentliche IP-Adresse einer Linux-Maschine in C?

Patricia Arquette
Freigeben: 2024-12-10 09:18:14
Original
465 Leute haben es durchsucht

How to Programmatically Get a Linux Machine's Public IP Address in C  ?

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(&amp;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=&amp;((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=&amp;((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;
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage