É válido que um nome de host comece com um dígito?


45

É válido que um nome de host comece com um dígito? por exemplo8server

Ao ler o RFC 1123 , parece que este é um nome de host válido. No entanto, não sei se um nome de host só pode começar com um dígito quando houver um sufixo, por exemplo8server.com

A origem desta pergunta é que InternetDomainName.isValid("8server");na biblioteca do Google Guava ( Javadoc ) rejeita a entrada. Também publiquei uma pergunta específica no grupo Guava Discuss .


2
Como uma espécie de prova por exemplo, elas existem: 7dayshop.com
Holloway

3
Que tal um nome de host com apenas um dígito? 88888888.cn
小太郎

7
4chan.comé um nome de host válido (e bem conhecido) que começa com um número.
IQAndreas

3
Como você pode esquecer o 9gag.com ? : D
ADTC

8
@IQAndreas, 4chan.org é um motivo suficientemente bom para torná-lo inválido . (Brincadeirinha anônimo, não me machuque.)
Paul Ruane

Respostas:


33

O RFC 1123 relaxa uma restrição do RFC 952, que especifica um legado do Hostname Server Protocol (descrito no RFC 953 ) substituído pelo DNS. Portanto, um nome de host totalmente numérico seria válido para esses RFCs.

O próprio RFC 1123 discute as consequências quando se trata de IP versus análise de nome de host:

Se um número decimal com pontos puder ser inserido sem esses delimitadores de identificação, será necessário fazer uma verificação sintática completa, pois agora é permitido que um segmento de um nome de domínio do host comece com um dígito e possa ser legalmente numérico (consulte a Seção 6.1. 2.4) No entanto, um nome de host válido nunca pode ter a forma decimal com pontos #. #. #. #, Pois pelo menos o rótulo do componente de nível mais alto será alfabético.

No entanto, foi fornecido nas diretrizes da RFC 1178 para escolher um nome de host válido devido a problemas de implementação. Muitas dessas implementações não reconhecem bem os nomes de host numéricos e tentam analisá-los como se fossem IPs até que contenham pelo menos um caractere não numérico, independentemente da localização.

Além disso, você descobrirá que as implementações nem sempre respeitam outras restrições originais do RFC 952, permitindo, por exemplo, que o nome do host termine com um sinal de menos ou um ponto.

O DNS preservou essas especificações originais para nomes de host e adicionou suporte para sublinhados ( RFC 2782 ).

Atualização Conforme solicitado nos comentários, esclarecimentos para a frase: No entanto, um nome de host válido nunca pode ter a forma decimal com pontos #. #. #. #, Pois pelo menos o rótulo do componente de nível mais alto será alfabético . Isso significa que o nome de domínio de nível superior deve ser alfabético , portanto, o nome completo do host nunca pode ser confundido com um endereço IPv4. Essa idéia foi esclarecida pela RFC 3696 para DNS e alterada para não totalmente numérica . Observe a pequena diferença.


7
Lembre-se de que implementações que não podiam manipular dígitos em nomes datados da década de 1980; O RFC 1178 foi publicado em 1990. Qualquer coisa que não possa lidar com isso agora é simplesmente um bug.
Michael Hampton

@ MichaelHampton Você ficaria surpreso com quantas implementações ainda não respeitam essas RFCs. A partir do seu Linux hospeda manipulação de arquivos.
Xavier Lucas

11
Haha, não, eu não faria. Dificilmente se passa um dia em que eu não tenha motivos para bater na cabeça de algum desenvolvedor com uma RFC.
Michael Hampton

2
@ Michael Hampton: Você não acreditaria na merda que vejo dos desenvolvedores às vezes. Algumas semanas atrás, tive um que havia feito uma página de configuração de rede em uma câmera IP para que o usuário pudesse inserir o nome do host da câmera. Ele não realizou QUALQUER validação na entrada de usuário de formato livre. O usuário do teste beta entrou em "Sala 1.10" e a câmera o enviou como identificador de cliente DHCP. Posso garantir que os servidores DNS e DNS da Microsoft não gostem disso. Ainda bem que notei antes que isso acontecesse na produção. Eu só posso tremer ao pensar que às vezes faz passar para o cliente ...
Tonny

13

Originalmente, o nome do host não podia começar com um dígito ou sublinhado ( RFC 952 ), mas a nova especificação RFC 1123, como você mencionou, permite.

Em relação à chamada para isValid (), nesse caso, o nome completo do domínio deve ser passado no parâmetro: InternetDomainName.isValid("8server.com");


Um nome de domínio completo deve realmente ser passado para o método isValid? Afinal InternetDomainName.isValid("server");retorna verdadeiro.
Mark

@ Marcos OK, eu atualizei a resposta nesse sentido
Céline Aussourd

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.