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

Wie erhalte ich programmgesteuert die öffentliche IP-Adresse eines Linux-Servers in C?

DDD
Freigeben: 2024-12-24 05:24:13
Original
674 Leute haben es durchsucht

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

Bestimmen der IP-Adresse einer Linux-Maschine in C

Problem

Wie erhalten wir programmgesteuert die IP-Adressen eines Linux-Servers, auf dem unsere Anwendung ausgeführt wird? , insbesondere das externe (öffentliche)?

Linux-Netzwerkschnittstellen

Ein Linux-Server verfügt normalerweise über mehrere Netzwerke Schnittstellen mit jeweils eigener IP-Adresse. Es verfügt über:

  • Loopback-Schnittstelle: 127.0.0.1
  • Interne Verwaltungsschnittstelle: 172.16.x.x
  • Externe öffentliche Schnittstelle: 80.190.x.x

Lösung

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

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!

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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage