主机名的有效字符?


85

主机名的有效字符是什么?这就像是联网计算机或Web域。

为了说明这一点,我正在编写一个连接到远程服务器的PC游戏。所以我有一个主机名字段和一个端口字段。显然,端口是短范围内的数字,但是我需要知道所有可能的主机名字符是什么(以及可能需要的其他任何模式-主机名是否需要以字母开头?)。

主机名的示例包括localhostgoogle.com


2
linux sethostname命令将接受任何字节。
OrangeDog '16

Answers:


91

检出此Wiki,特别是有效主机名的限制部分

主机名由一系列带有点的标签组成,所有域名也是如此。例如,“ en.wikipedia.org”是一个主机名。每个标签的长度必须在1到63个字符之间,并且整个主机名(包括定界点而不是尾随点)最多具有253个ASCII字符。

协议的Internet标准(要求注释)要求组件主机名标签只能包含ASCII字母“ a”至“ z”(不区分大小写),数字“ 0”至“ 9”以及连字符('-')。RFC 952中主机名的原始规范要求标签不能以数字或连字符开头,并且不能以连字符结尾。但是,随后的规范(RFC 1123)允许主机名标签以数字开头。不允许使用其他符号,标点符号或空格。


6
确保您清楚要查找的是主机名还是完全限定的域名。
凯文·格罗斯

另外,请明确您是否正在寻找严格的DNS互操作性要求。特别是,DNS禁止在主机名标签中使用下划线,而许多操作系统允许它们在本地使用。DNS服务器通常比较宽容,而现在的DNS实际上需要在某些记录类型中使用下划线,例如TXT记录(用于DKIM等),而不是主机名标签。
6

26

这取决于您toASCII是在IDN算法之前还是之后处理IDN (即,您看到的域名παράδειγμα.δοκιμή是希腊语还是as xn--hxajbheg2az3al.xn--jxalpdlp?)。

在后一种情况下(当您通过punycode处理IDN时),旧的RFC 1123规则适用:

U + 0041到U + 005A(AZ),U + 0061到U + 007A(az)外壳折叠在一起,U + 0030到U + 0039(0-9)和U + 002D(-)。

当然还有U + 002E(。);标签规则允许其他标签之间带有点。

如果您以IDN形式看到它,则允许的字符变化很大,有关所有有效字符的便捷图表,请参见http://unicode.org/reports/tr36/idn-chars.html

您的网络代码很可能会处理punycode,但是您的显示代码(甚至只是将字符串传递到其他层或从其他层传递),因为没有人在السعودية上运行服务器,因此更具可读性。域希望看到其服务器被列为开启状态.xn--mgberp4a5d4ar


1
哇,我什至从未见过IDN和Ponycode!目前,我仅打算提供英语支持,因为这只是我的一个宠物项目,但我绝对可以从您的回答中学到一些东西!
Ricket 2010年

2
punycode的工作方式最大的好处是,在某个级别(进行网络连接的级别)以下,它全是ASCII。这几乎是一种伪装纯ASCII技术可以与其他文本一起使用的方法(包括以前不允许的某些英语单词)。除了给整个单词一个升级路径外,它还为您提供了一个途径:将其构建为按RFC 1123所述进行操作,如果以后添加IDN支持,则网络代码将保持不变,并在顶部添加对RFC 3490的支持(图书馆也提供多种语言的帮助)。
乔恩·汉纳

2
@Ricket不知道是拼写错误还是开玩笑说这个名字(“ ponycode”)。我个人称它们为“伪劣”。
卡米洛·马丁

4

“名称”(网络,主机,网关或域名)是从字母(AZ),数字(0-9),减号(-)和句点(。)组成的最多24个字符的文本字符串。请注意,仅当句号用于分隔“域名样式名称”的组成部分时才允许使用。(有关背景,请参阅RFC-921,“域名系统实施时间表”)。名称中不允许使用空格或空格字符。大写和小写之间没有区别。第一个字符必须是字母字符。最后一个字符不能为减号或句号。充当网关的主机应在其名称中包含“ -GATEWAY”或“ -GW”。不用作Internet网关的主机不应使用“ -GATEWAY”和“ -GW”作为其名称的一部分。作为TAC的主机应具有“

这在http://support.microsoft.com/kb/149044中提供


这是从RFC 952 [ tools.ietf.org/html/rfc952]逐字引用的。这具有误导性-如上所述,主机名的长度可以为1到63个字符。
克雷格·安德森

不幸的是,链接已断开。
Eugene Mayevski'Callback

0

如果您要注册域和终止符(ex .com),则它不是IDN,就像Aaron Hathaway所说的那样:主机名与所有域名一样,由一系列带点号的标签组成。例如,en.wikipedia.org是一个主机名。每个标签的长度必须在1到63个字符之间,并且整个主机名(包括定界点而不是尾随点)最多具有253个ASCII字符。

Internet标准(请求注释),用于协议强制该组件的主机名的标签可以仅包含ASCII字母a通过z(在不区分大小写的方式),数字09和连字符-。RFC 952中主机名的原始规范要求标签不能以数字或连字符开头,并且不能以连字符结尾。但是,随后的规范(RFC 1123)允许主机名标签以数字开头。不允许使用其他符号,标点符号或空格。

后来,西班牙与它的.es.com.es.org.es.nom,es.gob.es.edu.es介绍了IDN顶级域名,如果你的顶级域名之一.es或任何其他它,任何字符都可以使用的载体,但你不能在一个主机结合喜欢拉丁,希腊或西里尔字母,并尊重开始或结束时无法完成的事情。

如果您使用的是未注册的顶级域名(TLD),仅用于本地网络(如本地DNS或主机文件),则可以将它们全部视为IDN。

请记住,某些程序不能很好地运行,特别是旧的,过时的和不受欢迎的程序。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.