2 Stimmen

Wie funktionieren gethostbyname() oder getnameinfo() im Hintergrund?

Wie funktionieren gethostbyname() oder getnameinfo() im Hintergrund?

#include 
#include 
#include 

/* paddr: Druckt die IP-Adresse im Standard-Dezimalformat aus */
void
paddr(unsigned char *a)
{
        printf("%d.%d.%d.%d\n", a[0], a[1], a[2], a[3]);
}

main(int argc, char **argv) {
        struct hostent *hp;
        char *host = "google.com";
        int i;

        hp = gethostbyname(host);
        if (!hp) {
                fprintf(stderr, "Adresse von %s konnte nicht ermittelt werden\n", host);
                return 0;
        }
        for (i=0; hp->h_addr_list[i] != 0; i++)
                paddr((unsigned char*) hp->h_addr_list[i]);
        exit(0);
}

Ausgabe für google.com:

74.125.236.198
74.125.236.199
74.125.236.206
74.125.236.201
74.125.236.200
74.125.236.196
74.125.236.193
74.125.236.197
74.125.236.194
74.125.236.195
74.125.236.192

Ausgabe für www.google.com:

74.125.236.210
74.125.236.209
74.125.236.212
74.125.236.208
74.125.236.211
  1. Wird das obige Programm eine Überprüfung im Internet durchführen, um in eine IP aufzulösen?
  2. Warum werden weniger IP-Adressen für www.google.com angezeigt und mehr für einfach google.com?

5voto

gerrit zijlstra Punkte 766

Auf einem Linux-System führt der in der glibc implementierte gethostbyname()-Aufruf Suchvorgänge gemäß den Konfigurationsdateien /etc/host.conf und /etc/nsswitch.conf durch.

Typischerweise wird in einer Standardkonfiguration zuerst in der Datei /etc/hosts nach einem lokalen Eintrag für den angegebenen Namen gesucht und gegebenenfalls zurückgegeben. Andernfalls wird das DNS-Protokoll verwendet, das wiederum in /etc/resolv.conf konfiguriert ist, wo die Nameserver angegeben sind.

Viel komplexere Setups können konfiguriert werden, die LDAP-Server, Datenbanken usw. durchsuchen.

Sie können auch in einige Handbuchseiten wie man 5 nsswitch.conf nachschlagen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X