Heim > Backend-Entwicklung > C++ > Wie kann ich die IP-Adressen eines Linux-Servers in C programmgesteuert ermitteln?

Wie kann ich die IP-Adressen eines Linux-Servers in C programmgesteuert ermitteln?

Barbara Streisand
Freigeben: 2024-12-10 20:43:11
Original
407 Leute haben es durchsucht

How Can I Programmatically Determine a Linux Server's IP Addresses in C  ?

Programmgesteuerte Ermittlung der IP-Adressen von Linux-Servern in C

Einführung

Die Identifizierung der IP-Adressen eines Linux-Servers ist für die Netzwerkkommunikation und Anwendungsbereitstellung von entscheidender Bedeutung. Dieser Artikel stellt eine programmgesteuerte Lösung in C vor, um die IP-Adressen eines Linux-Computers effektiv abzurufen.

Problemstellung

Das Ziel besteht darin, die IP-Adressen eines Linux-Servers programmgesteuert innerhalb einer C-Anwendung abzurufen . Der Server kann über mehrere IP-Adressen verfügen, darunter eine Localhost-Adresse, eine interne (Verwaltungs-)Adresse und eine externe (öffentliche) Adresse. Ziel ist es, die externe IP-Adresse für die Anwendungsbindung abzurufen.

Lösung

Die Standard-C-Bibliothek stellt die Funktion getifaddrs() bereit, um Informationen über die Netzwerkschnittstellen und IP-Adressen eines Systems zu erhalten. Hier ist ein Beispiel, das getifaddrs() verwendet, um alle IPv4- und IPv6-Adressen des lokalen Computers zu drucken:

#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;
}
Nach dem Login kopieren

Um die externe IP-Adresse abzurufen, können Sie einen ähnlichen Ansatz verwenden, aber gezielt nach der Schnittstelle suchen, die eine Verbindung herstellt an das externe Netzwerk. Sie können siocgifaddr mit SIOCGIFADDR verwenden, um die IP-Adresse einer bestimmten Schnittstelle abzurufen.

Fazit

Die Funktion getifaddrs() und siocgifaddr mit SIOCGIFADDR bieten robuste Methoden zum Abrufen der IP-Adressen einer Linux-Maschine in C. Diese Ansätze ermöglichen es Anwendungen, sich dynamisch an Netzwerkänderungen anzupassen und notwendige Netzwerkverbindungen herzustellen.

Das obige ist der detaillierte Inhalt vonWie kann ich die IP-Adressen eines Linux-Servers in C programmgesteuert ermitteln?. 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