Czy nazwa hosta może zaczynać się od cyfry?


45

Czy nazwa hosta może zaczynać się od cyfry? na przykład8server

Po przeczytaniu RFC 1123 wydaje się, że jest to poprawna nazwa hosta. Nie jestem jednak pewien, czy nazwa hosta może zaczynać się od cyfry tylko wtedy, gdy występuje sufiks, np8server.com

Źródłem tego pytania jest to, że InternetDomainName.isValid("8server");w bibliotece Google Guava ( Javadoc ) odrzuca dane wejściowe. Wysłałem też konkretne pytanie do grupy dyskusyjnej Guava .


2
Jako rodzaj dowodu na przykład, istnieją: 7dayshop.com
Holloway,

3
Co powiesz na cyfrową nazwę hosta? 88888888.cn
小 太郎

7
4chan.comjest prawidłową (i dobrze znaną) nazwą hosta, która zaczyna się od cyfry.
IQAndreas,

3
Jak możesz zapomnieć o 9gag.com ? : D
ADTC

8
@IQAndreas, 4chan.org jest wystarczająco dobrym powodem, aby unieważnić . (Żartuję anonimowo, nie krzywdź mnie.)
Paul Ruane

Odpowiedzi:


33

RFC 1123 rozluźnia ograniczenie RFC 952, które określa starszą wersję protokołu Hostname Server Protocol (opisanego w RFC 953 ) zastąpionego przez DNS. Zatem w pełni numeryczna nazwa hosta byłaby poprawna dla tych RFC.

Sam RFC 1123 omawia konsekwencje przetwarzania IP w porównaniu z analizą nazw hostów:

Jeśli można wprowadzić liczbę dziesiętną z kropkami bez takich identyfikatorów, należy przeprowadzić pełną kontrolę składniową, ponieważ segment nazwy domeny hosta może teraz zaczynać się cyfrą i może być legalnie całkowicie numeryczny (patrz sekcja 6.1. 2.4). Jednak poprawna nazwa hosta nigdy nie może mieć postaci kropkowo-dziesiętnej #. #. #. #, Ponieważ przynajmniej etykieta komponentu najwyższego poziomu będzie alfabetyczna.

Jednak w wytycznych RFC 1178 przewidziano wybór prawidłowej nazwy hosta z powodu problemów z implementacją. Wiele z tych implementacji nie rozpoznaje numerycznych nazw hostów i próbuje je parsować tak, jakby były adresami IP, dopóki nie zawierają co najmniej jednego znaku nienumerycznego, bez względu na lokalizację.

Przekonasz się również, że implementacje nie zawsze uwzględniają inne oryginalne ograniczenia RFC 952, pozwalając na przykład, aby nazwa hosta kończyła się znakiem minus lub kropką.

DNS zachował te oryginalne specyfikacje nazw hostów i dodał obsługę podkreśleń ( RFC 2782 ).

Aktualizacja Zgodnie z żądaniem w komentarzach, wyjaśnienie zdania: Jednak poprawna nazwa hosta nigdy nie może mieć formy kropkowo-dziesiętnej #. #. #. #, Ponieważ przynajmniej etykieta komponentu najwyższego poziomu będzie alfabetyczna . Oznacza to, że nazwa domeny najwyższego poziomu musi być alfabetyczna , dlatego w pełni kwalifikowanej nazwy hosta nigdy nie można pomylić z adresem IPv4. Pomysł ten został wyjaśniony przez RFC 3696 dla DNS i zmieniony na nieliczbowy . Zwróć uwagę na niewielką różnicę.


7
Należy pamiętać, że implementacje, które nie mogły obsługiwać cyfr w nazwach, pochodziły z lat 80. XX wieku; RFC 1178 została opublikowana w 1990 roku wszystko, co nie może obsłużyć go teraz jest po prostu buggy.
Michael Hampton

@MichaelHampton Byłbyś zaskoczony, jak wiele implementacji wciąż nie honoruje tych RFC. Począwszy od obsługi plików w systemie Linux.
Xavier Lucas,

11
Haha, nie, nie zrobiłbym tego. Prawie nie ma dnia, że nie mam powodu, aby pokonać programistę nad głową za pomocą RFC.
Michael Hampton

2
@Michael Hampton: Nie uwierzyłbyś w to gówno, które czasami widzę od deweloperów. Kilka tygodni temu miałem takiego, który utworzył stronę konfiguracji sieci w kamerze ip, aby użytkownik mógł wprowadzić nazwę hosta kamery. Nie dokonał ŻADNEJ weryfikacji na danych wejściowych użytkownika w dowolnym formacie. Użytkownik w wersji beta wszedł do „Pokoju 1.10”, a kamera z radością wysyła go jako identyfikator klienta DHCP. Mogę zapewnić, że Microsoft DHCP i serwery DNS tego nie lubią. Dobrze, że zauważyłem, zanim dostałem się do wersji produkcyjnej. Mogę tylko drżeć na myśl, co czasami dociera do klienta ...
Tonny,

13

Początkowo nazwa hosta nie mogła zaczynać się cyfrą lub podkreśleniem ( RFC 952 ), ale nowa specyfikacja RFC 1123, jak wspomniałeś, pozwala na to.

W przypadku wywołania funkcji isValid () w tym przypadku należy podać pełną nazwę domeny w parametrze: InternetDomainName.isValid("8server.com");


Czy naprawdę należy przekazać pełną nazwę domeny do metody isValid? Po tym wszystkim InternetDomainName.isValid("server");powraca prawda.
Mark

@ Zaznacz OK, odpowiednio zaktualizowałem odpowiedź
Céline Aussourd,

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.