„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > 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?

Veröffentlicht am 21.12.2024
Durchsuche:102

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

Programmatische 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 innerhalb einer C-Anwendung programmgesteuert 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 
#include 
#include 

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;
}

Um die externe IP-Adresse abzurufen, können Sie einen ähnlichen Ansatz verwenden, aber gezielt nach der Schnittstelle suchen, die eine Verbindung zum externen Netzwerk herstellt. 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.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3