Ich verwende dieses Codefragment, das ich in Ссылка gefunden habe, um DNS auszuführen Nachschlagewerke
%Vor%Ich stehe vor einer seltsamen Tatsache
%Vor%funktioniert gut, aber wenn ich versuche, eine unvollständige IP-Adresse aufzulösen, bekomme ich das
%Vor%Ich würde einen Fehler wie den folgenden erwarten
%Vor%aber das Programm scheint zu funktionieren.
Irgendeine Idee warum?
Es ist kein Fehler, sondern eine Funktion der Funktion inet_aton ():
BESCHREIBUNG
Die Funktion inet_aton () konvertiert die angegebene Zeichenfolge in der Internet Standard Punktnotation, zu einer Netzwerkadresse, und speichert die Adresse in der bereitgestellten Struktur.
Die mit der Punktnotation angegebenen Werte haben eine der folgenden Formen:
a.b.c.d Wenn vier Teile angegeben sind, wird jeder als Datenbyte interpretiert und von links nach rechts den vier Bytes einer Internetadresse zugewiesen.
a.b.c Wenn eine dreiteilige Adresse angegeben wird, wird der letzte Teil als 16-Bit-Menge interpretiert und in die beiden rechten Bytes der Netzwerkadresse eingefügt. Dadurch eignet sich das dreiteilige Adressformat zum Angeben von Netzwerkadressen der Klasse B als 128.net.host.
Sie können zum Beispiel dort mehr darüber lesen.
POSIX.2004 sagt:
Das Namensargument von gethostbyname () soll ein Knotenname sein; Das Verhalten von gethostbyname () beim Übergeben einer numerischen Adresszeichenfolge ist nicht angegeben. Bei IPv4 muss eine numerische Adresszeichenfolge in der Schreibweise mit Trennzeichen, die in inet_addr () beschrieben wird, angegeben werden.
Wenn Sie also POSIX betrachten, können Sie nichts erwarten, wenn Sie eine IP-Adresse übergeben.
Auf meinem System sagt die man-Seite Folgendes:
Wenn der Name eine IPv4- oder IPv6-Adresse ist, wird keine Suche durchgeführt, und gethostbyname () kopiert den Namen einfach in das Feld h_name und seine Struktur in_addr in das Feld h_addr_list [0] der zurückgegebenen Hoststruktur.
Es sagt nichts darüber aus, was passiert, wenn Sie eine unvollständige IP-Adresse übergeben, so dass alles passieren kann, einschließlich des von Ihnen beobachteten Verhaltens.
Weitere Informationen zur Implementierung von gethostbyname
in Ihrem System finden Sie in der Dokumentation zur Funktion und / oder zum Quellcode (falls verfügbar).
Tags und Links c linux gethostbyname