Caracteres válidos de um nome de host?

85

Quais são os caracteres válidos de um nome de host? Isso seria algo como um computador em rede ou um domínio da web.

Para contextualizar, estou escrevendo um jogo para PC que se conecta a um servidor remoto; então eu tenho um campo para hostname e um campo para porta. Obviamente, a porta é um número no intervalo curto, mas preciso saber quais são todos os caracteres de nome de host possíveis (e qualquer outro padrão que possa ser necessário - um nome de host precisa começar com uma letra?).

Exemplos de nome de host incluem localhostou google.com.

Ricket
fonte
2
O comando linux sethostname aceitará quaisquer bytes.
OrangeDog

Respostas:

91

Verifique este wiki , especificamente a seção Restrições sobre nomes de host válidos

Os nomes de host são compostos de uma série de rótulos concatenados com pontos, assim como todos os nomes de domínio. Por exemplo, "en.wikipedia.org" é um nome de host. Cada rótulo deve ter entre 1 e 63 caracteres e o nome do host inteiro (incluindo os pontos delimitadores, mas não o ponto final) tem no máximo 253 caracteres ASCII.

Os padrões da Internet (solicitações de comentários) para protocolos determinam que os rótulos de nome de host do componente possam conter apenas as letras ASCII de 'a' a 'z' (não diferencia maiúsculas de minúsculas), os dígitos de '0' a '9' e o hífen ('-'). A especificação original de nomes de host na RFC 952 determinava que os rótulos não pudessem começar com um dígito ou hífen e não deveriam terminar com um hífen. No entanto, uma especificação subsequente ( RFC 1123 ) permitiu que os rótulos de nome de host comecem com dígitos. Nenhum outro símbolo, caractere de pontuação ou espaço em branco é permitido.

Aaron Hathaway
fonte
6
Certifique-se de ter certeza de que está procurando um nome de host ou um nome de domínio totalmente qualificado ou ambos.
Kevin Gross
Além disso, deixe claro se você está procurando um requisito estrito de interoperabilidade de DNS ou não. Em particular, o DNS proíbe sublinhados nos rótulos de nomes de host, enquanto muitos sistemas operacionais permitem seu uso local. Os servidores DNS tendem a ser tolerantes e o DNS agora, na prática, requer sublinhados em alguns tipos de registro, como registros TXT (para DKIM etc), mas não para rótulos de nome de host.
tripleee
26

Depende se você processa IDNs antes ou depois do toASCIIalgoritmo de IDN (ou seja, você vê o nome de domínio παράδειγμα.δοκιμήem grego ou como xn--hxajbheg2az3al.xn--jxalpdlp?).

No último caso - quando você está lidando com IDNs por meio do punycode - aplicam-se as antigas regras RFC 1123:

U + 0041 a U + 005A (AZ), U + 0061 a U + 007A (az), caixa dobrada entre si, U + 0030 a U + 0039 (0-9) e U + 002D (-).

e U + 002E (.) com certeza; as regras para rótulos permitem as outras, com pontos entre os rótulos.

Se você o estiver vendo no formato IDN, os caracteres permitidos são muito variados, consulte http://unicode.org/reports/tr36/idn-chars.html para obter um gráfico útil de todos os caracteres válidos.

Provavelmente, seu código de rede irá lidar com o punycode, mas seu código de exibição (ou mesmo apenas passar strings de e para outras camadas) com a forma mais legível para humanos, já que ninguém está executando um servidor no السعودية. domínio deseja ver seu servidor listado como ativo .xn--mgberp4a5d4ar.

Jon Hanna
fonte
1
Uau, nunca vi IDN e Ponycode! No momento, estou planejando apenas o apoio em inglês, já que é apenas um projeto meu, mas definitivamente aprendi algo com sua resposta!
Ricket
2
A grande coisa sobre a forma como o punycode funciona, é que abaixo de um certo nível (aquele em que você faz a rede) é tudo ASCII. É basicamente uma maneira de fingir que uma tecnologia apenas ASCII pode funcionar com outro texto (incluindo algumas palavras em inglês que antes não eram permitidas). Além de fornecer à palavra inteira um caminho de atualização, ele também oferece um: construa para fazer apenas o que diz o RFC 1123, e se você adicionar suporte para IDNs posteriormente, o código de rede permanece o mesmo e você adiciona suporte para RFC 3490 no topo (as bibliotecas estão disponíveis em muitos idiomas para ajudar também).
Jon Hanna
2
@Ricket não sei se você digitou ou brincou com o nome ("ponycode"). Eu os chamo de "punidos", pessoalmente.
Camilo Martin
4

Um "nome" (nome de rede, host, gateway ou domínio) é uma sequência de texto de até 24 caracteres tirada do alfabeto (AZ), dígitos (0-9), sinal de menos (-) e ponto (.). Observe que pontos são permitidos apenas quando servem para delimitar componentes de "nomes de estilo de domínio". (Consulte RFC-921, "Cronograma de Implementação do Sistema de Nomes de Domínio" para obter os antecedentes). Nenhum espaço em branco ou espaço é permitido como parte de um nome. Nenhuma distinção é feita entre maiúsculas e minúsculas. O primeiro caractere deve ser um caractere alfa. O último caractere não deve ser um sinal de menos ou ponto final. Um host que serve como um GATEWAY deve ter "-GATEWAY" ou "-GW" como parte de seu nome. Hosts que não funcionam como gateways de Internet não devem usar "-GATEWAY" e "-GW" como parte de seus nomes. Um host que é um TAC deve ter "

Isso é fornecido em http://support.microsoft.com/kb/149044

Vivek
fonte
Isso é citado literalmente no RFC 952 [ tools.ietf.org/html/rfc952] . É enganoso - os nomes de host podem ter de 1 a 63 caracteres, conforme declarado acima.
Craig S. Anderson
O link está quebrado, infelizmente.
Chamada de Eugene Mayevski
0

Se você está registrando um domínio e a terminação (ex .com) não é IDN, como disse Aaron Hathaway : Os nomes de host são compostos de uma série de rótulos concatenados com pontos, assim como todos os nomes de domínio. Por exemplo, en.wikipedia.orgé um nome de host. Cada rótulo deve ter entre 1 e 63 caracteres e o nome do host inteiro (incluindo os pontos delimitadores, mas não o ponto final) tem no máximo 253 caracteres ASCII.

Os padrões da Internet (Requests for Comments) para protocolos de mandato que os rótulos de nome de host de componentes podem conter apenas as letras ASCII aatravés z(de um modo case-insensitive), os dígitos 0através de 9e hífen -. A especificação original de nomes de host no RFC 952 determinava que os rótulos não pudessem começar com um dígito ou hífen e não deveriam terminar com um hífen. No entanto, uma especificação subsequente (RFC 1123) permitiu que os rótulos de nome de host comecem com dígitos. Nenhum outro símbolo, caractere de pontuação ou espaço em branco é permitido.

Mais tarde, a Espanha com ele é .es, .com.es, .org.es, .nom,es, .gob.ese .edu.esintroduziu tlds IDN, se o seu TLD é um dos .esou qualquer outro que o suporta, qualquer personagem pode ser usado, mas você não pode combinar alfabetos como o latim, grego ou Cyril em um nome de host, e que respeita o que não pode ir no início ou no fim.

Se estiver usando tlds não registrados, apenas para rede local, como DNS local ou com arquivos de hosts, você pode tratá-los como IDN.

Lembre-se de que alguns programas podem não funcionar bem, especialmente os antigos, desatualizados e impopulares.

Javier CasdeDie
fonte