Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

getipnodebyaddr(), getipnodebyname() - Informationen über Rechnernamen und Rechneradressen abfragen

&pagelevel(4)&pagelevel



#include <sys.socket.h>
#include <netdb.h>
 
Kernighan-Ritchie-C:
struct hostent *getipnodebyaddr(addr, len, type, error_num);

char *addr;
int len;
int type;
int *error_num;
  
struct hostent *getipnodebyname(name, af, flags, error_num);

char *name;
int af;
int flags;
int *error_num;

ANSI-C:
struct hostent* getipnodebyaddr(char* addr, int len, int type, int* error_num);

struct hostent* getipnodebyname(char* name, int af, int flags, int* error_num);


Beschreibung

Die Verwendung der Funktionen getipnodebyaddr() und getipnodebyname() ist nur in den Adressfamilien AF_INET und AF_INET6 sinnvoll. getipnodebyaddr() und getipnodebyname() sind Erweiterungen der Funktionen gethostbyaddr() und gethostbyname() für die IPv6-Unterstützung.

getipnodebyaddr() und getipnodebyname() liefern aktuelle Informationen über die im Netz bekannten Rechner. Dabei beschaffen sich getipnodebyaddr() und getipnodebyname() die benötigten Informationen (Rechnername bzw. Rechneradresse) von einem DNS-Server. Nur falls dies nicht erfolgreich ist, wird die Information in BCAM ermittelt (siehe Handbuch „BCAM Band 1/2“).

Bei getipnodebyaddr() ist addr ein Zeiger auf die Rechneradresse. Die Rechneradresse muss in binärem Format mit der Länge len vorliegen. Als Angabe für type ist nur AF_INET oder AF_INET6 zulässig.

Bei getipnodebyname() muss für name der Rechnername (Socket-Hostname) angegeben werden. Geben Sie den Namen an

  • in Form eines Full-Qualified-DNS-Namens, also mit Rechnernamen- und Domain-Anteil
    (z.B. Rechnername.company.com) oder

  • als teilqualifizierter DNS_Name (z.B. Rechnername.) oder

  • nur als Rechnername (z.B. Rechnername).

Es ist außerdem möglich, eine IPv4-Adresse in dezimaler Punkt-Notation oder eine IPv6-Adresse in sedezimaler Doppelpunkt-Notation anzugeben. Dazu müssen die jeweils korrespondierenden Adressfamilien bei af angegeben werden. In der hostent-Rückgabe-Struktur wird dann die umgesetzte Binär-Adresse zurückgeliefert. Wird eine IPv4-Adresse in dezimaler Punkt-Notation und af = AF_INET6 und flags = AI_V4MAPPED angegeben, dann wird in der Ausgabe-Struktur eine binäre IPv4-Mapped-IPv6-Adresse zurückgegeben.

Im Parameter af wird beim Aufruf die Adressfamilie spezifiziert: AF_INET oder AF_INET6.

Mit dem Parameter flags kann die Ausgabe der gewünschten Adressfamilie gesteuert werden. Hat flags den Wert 0, dann wird eine der in af spezifizierten Adressfamilie entsprechende Adresse zurückgeliefert.

In der Adressfamilie af können mit flags verschiedene Optionen angegeben werden (sie sind in <netdb.h> definiert):

AI_V4MAPPED

Der Aufrufer akzeptiert IPv4-Mapped-Adressen, wenn keine IPv6-Adresse zur Verfügung steht.

AI_ALL

Sofern vorhanden, werden IPv6-Adressen und IPv4-Mapped-Adressen zurückgeliefert.
af muss den Wert AF_INET6 haben.

AI_ADDRCONFIG

Abhängig vom Wert von af, wird nur eine IPv6- oder IPv4-Adresse zurückgegeben, wenn auch der Rechner, auf dem die Funktion aufgerufen wird, eine Interface-Adresse des gleichen Typs besitzt.

AI_DEFAULT

ist gleich AI_ADDRCONFIG || AI_V4MAPPED.

  • Wenn af = AF_INET6 gesetzt ist und wenn der Rechner, auf dem die Funktion aufgerufen wird, eine IPv6-Interface-Adresse hat, wird für den angegebenen Rechnernamen eine IPv6-Adresse zurückgeliefert.

  • Wenn der Rechner, auf dem die Funktion aufgerufen wird, nur eine IPv4-Interface-Adresse besitzt, wird eine IPv4-Mapped-IPv6-Adresse zurückgegeben.

Die Funktionen getipnodebyaddr() und getipnodebyname() liefern einen Zeiger auf ein Objekt der nachfolgend beschriebenen Struktur hostent. Für dieses Objekt wird der Speicher dynamisch angefordert und muss mit der Funktion freehostent() vom Aufrufer wieder freigegeben werden.

Die Struktur hostent ist wie folgt deklariert:

struct hostent {
   char *h_name;           /* Socket-Hostname */
   char **h_aliases;       /* Alias-Liste */
   int h_addrtype;         /* Adresstyp */
   int h_length;           /* Länge der Adresse (in Bytes) */
   char **h_addr_list;     /* Liste von Adressen für den Rechner, */
                           /* terminiert durch den Null-Zeiger */ 
};
 
#define h_addr h_addr_list[0]; /* erste Adresse, Netz-Byte-Reihenfolge */

Beschreibung der hostent-Komponenten:

h_name

Name des Rechners

h_aliases

Eine durch Null abgeschlossene Liste mit alternativen Namen für den Rechner.
Alias-Namen werden derzeit nicht unterstützt. 

h_addrtype

Typ der Adresse, die geliefert wird

h_length

Länge der Adresse (in Bytes)

**h_addr_list

Ein Zeiger auf eine durch Null abgeschlossene Liste von Netzadressen für den Rechner. Diese Adressen der Länge h_length werden in Netz-Byte-Reihenfolge geliefert.

Returnwert

Zeiger auf ein Objekt vom Typ struct hostent. Im Fehlerfall wird der Null-Zeiger zurückgeliefert und die Variable errnum mit einem der folgenden Werte versorgt. Diese Werte sind in der Include-Datei <netdb.h> definiert.

HOST_NOT_FOUND

Rechner unbekannt

NO_ADDRESS

Zu dem angegebenen Namen ist keine Rechneradresse verfügbar.

NO_RECOVERY

Es ist ein nicht behebbarer Server-Fehler aufgetreten.

TRY_AGAIN

Zugriff muss wiederholt werden.

Hinweis

Wenn DNS nicht genutzt wird, ist es in der Regel sinnvoll, keinen Fully Qualified Domain Name (FQDN), sondern nur den Rechnernamen anzugeben, um die entsprechenden Adressen von BCAM zu erhalten (z. B. host statt host.mydomain.net).
FQDNs sind an Systemen, an denen DNS nicht genutzt wird, nur dann sinnvoll, wenn es eine FQDN-Datei mit Einträgen gibt.

Für den Zugang zum DNS wird der für SOCKETS(BS2000), BCAM und POSIX-Sockets gemeinsame Resolver LWRESD genutzt. Näheres siehe Handbuch „BCAM Band 1/2“.