Ist es gültig, dass ein Hostname mit einer Ziffer beginnt?


45

Ist es gültig, dass ein Hostname mit einer Ziffer beginnt? z.B8server

Aus dem Lesen von RFC 1123 geht hervor, dass dies ein gültiger Hostname ist. Mir ist jedoch nicht klar, ob ein Hostname nur mit einer Ziffer beginnen kann, wenn es ein Suffix gibt, z8server.com

Der Ursprung dieser Frage ist, dass InternetDomainName.isValid("8server");in der Google Guava-Bibliothek ( Javadoc ) die Eingabe abgelehnt wird. Ich habe auch eine spezielle Frage zur Guava Discuss- Gruppe gestellt.


2
Als Beispiel gibt es sie: 7dayshop.com
Holloway

3
Wie wäre es mit einem Hostnamen, der nur aus Ziffern besteht? 88888888.cn
小 太郎

7
4chan.comist ein gültiger (und bekannter) Hostname, der mit einer Zahl beginnt.
IQAndreas

3
Wie kannst du 9gag.com vergessen ? : D
ADTC

8
@IQAndreas, 4chan.org ist ein guter Grund, es ungültig zu machen . (Nur ein Scherz anonym, verletze mich nicht.)
Paul Ruane

Antworten:


33

RFC 1123 lockert eine Einschränkung von RFC 952, die ein Erbe des Hostname Server-Protokolls (beschrieben in RFC 953 ) angibt, das durch DNS ersetzt wird. Somit wäre ein vollständig numerischer Hostname gemäß diesen RFCs gültig.

RFC 1123 selbst erörtert die Konsequenzen beim Parsen von IP- und Hostnamen:

Wenn eine Punkt-Dezimal-Zahl ohne solche Trennzeichen eingegeben werden kann, muss eine vollständige syntaktische Überprüfung durchgeführt werden, da ein Segment eines Host-Domänennamens nun mit einer Ziffer beginnen darf und legal vollständig numerisch sein kann (siehe Abschnitt 6.1. 2.4). Ein gültiger Hostname kann jedoch niemals die Punkt-Dezimal-Form #. #. #. # Haben, da mindestens die Komponentenbezeichnung der höchsten Ebene alphabetisch ist.

In den RFC 1178- Richtlinien wurde jedoch festgelegt, dass aufgrund von Implementierungsproblemen ein gültiger Hostname ausgewählt werden sollte. Viele dieser Implementierungen erkennen numerische Hostnamen nicht gut und versuchen, sie so zu analysieren, als wären sie IPs, bis sie unabhängig vom Standort mindestens ein nicht numerisches Zeichen enthalten.

Außerdem werden Sie feststellen, dass Implementierungen andere ursprüngliche Einschränkungen von RFC 952 nicht immer berücksichtigen, sodass beispielsweise der Hostname mit einem Minuszeichen oder einem Punkt endet.

DNS behielt diese ursprünglichen Spezifikationen für Hostnamen bei und fügte Unterstützung für Unterstriche hinzu ( RFC 2782 ).

Aktualisieren Wie in den Kommentaren angefordert, Erläuterung des Satzes: Ein gültiger Hostname kann jedoch niemals die Punkt-Dezimal-Form #. #. # Haben, da mindestens die Komponentenbezeichnung der höchsten Ebene alphabetisch ist . Dies bedeutet, dass der Domänenname der obersten Ebene alphabetisch sein muss , sodass der vollständig qualifizierte Hostname niemals mit einer IPv4-Adresse verwechselt werden kann. Diese Idee wurde von RFC 3696 für DNS geklärt und in nicht rein numerisch geändert . Beachten Sie den kleinen Unterschied.


7
Denken Sie daran, dass Implementierungen, die mit Ziffern in Namen aus den 1980er Jahren nicht umgehen konnten; RFC 1178 wurde 1990 veröffentlicht. Alles, was jetzt nicht damit umgehen kann, ist einfach fehlerhaft.
Michael Hampton

@MichaelHampton Sie wären überrascht, wie viele Implementierungen diese RFCs immer noch nicht erfüllen. Ausgehend von Ihrem Linux Hosts File Handling.
Xavier Lucas

11
Haha, nein würde ich nicht. Es vergeht kaum ein Tag, an dem ich mit einem RFC keinen Entwickler über den Kopf schlagen muss.
Michael Hampton

2
@Michael Hampton: Du würdest der Scheiße nicht glauben, die ich manchmal von Entwicklern sehe. Vor ein paar Wochen hatte ich einen, der eine Netzwerk-Konfigurations-Webseite in einer IP-Kamera erstellt hatte, damit der Benutzer den Hostnamen für die Kamera eingeben konnte. Er hat KEINE Validierung für die frei formatierte Benutzereingabe durchgeführt. Der Benutzer des Beta-Tests hat "Raum 1.10" eingegeben und die Kamera sendet das gerne als DHCP-Client-ID. Ich kann Ihnen versichern, dass Microsoft DHCP- und DNS-Server das nicht mögen. Gut, dass ich es bemerkt habe, bevor es in die Produktion ging. Ich kann nur bei dem Gedanken schaudern, was manchmal zum Kunden durchkommt ...
Tonny

13

Ursprünglich konnte der Hostname nicht mit einer Ziffer oder einem Unterstrich beginnen ( RFC 952 ), aber die neue Spezifikation RFC 1123 erlaubt dies, wie Sie bereits erwähnt haben.

In Bezug auf den Aufruf von isValid () sollte in diesem Fall der vollständige Domänenname im Parameter übergeben werden: InternetDomainName.isValid("8server.com");


Soll ein vollständiger Domainname wirklich an die isValid-Methode übergeben werden? Immerhin InternetDomainName.isValid("server");kehrt wahr zurück.
Mark

@Mark OK, ich habe die Antwort entsprechend aktualisiert
Céline Aussourd

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.