主机名以数字开头是否有效?


45

主机名以数字开头是否有效?例如8server

通过阅读RFC 1123,可以看出这是一个有效的主机名。但是,我不清楚主机名是否只能在有后缀的情况下以数字开头,例如8server.com

这个问题的根源在于InternetDomainName.isValid("8server");Google Guava库(Javadoc)拒绝输入。我还在番石榴讨论小组上发表了一个具体问题。


2
作为示例,它们确实存在:7dayshop.com
Holloway

3
仅数字主机名如何?88888888.cn
小太郎

7
4chan.com是一个以数字开头的有效(众所周知的)主机名。
IQAndreas 2014年

3
您怎么会忘记9gag.com?:D
ADTC

8
@IQAndreas,4chan.org是使其无效的充分理由。(开个玩笑,匿名,不要伤害我。)
Paul Ruane 2014年

Answers:


33

RFC 1123放宽了RFC 952的约束,该约束指定了由DNS代替的主机名服务器协议(在RFC 953中进行了描述)的旧版。因此,根据这些RFC,全数字主机名将有效。

RFC 1123本身讨论了IP与主机名解析时的后果:

如果可以在不使用此类分隔符的情况下输入点分十进制数,则必须进行完整的语法检查,因为主机域名的一部分现在允许以数字开头,并且在法律上可以完全是数字 (请参阅6.1节)。 2.4)。但是,有效的主机名绝不能使用点分十进制格式#。#。#。#,因为至少最高级别的组件标签将是字母形式的。

但是,由于实现问题,RFC 1178指南中提供了选择有效主机名的方法。这些实现中有很多不能很好地识别数字主机名,并试图将它们解析为IP,直到它们包含至少一个非数字字符(无论其位置如何)为止。

此外,您会发现实现并不总是遵循RFC 952的其他原始约束,例如允许主机名以减号或句号结尾。

DNS保留了主机名的这些原始规范,并增加了对下划线的支持(RFC 2782)。

更新根据注释中的要求,对句子进行说明:但是,有效的主机名绝不能使用点分十进制形式#。#。#。#,因为至少最高级别的组件标签将是字母。这意味着顶级域名必须是字母,因此绝对不能将完全限定的主机名与IPv4地址混淆。RFC 3696已针对DNS 澄清了这一想法,并将其更改为非全数字形式。注意细微的差别。


7
请记住,无法处理名称可追溯至1980年代的数字的实现;RFC 1178于1990年发布。现在无法解决的任何问题都只是越野车。
迈克尔·汉普顿

@MichaelHampton您会惊讶于仍然有许多实现不遵守这些RFC。从您的linux主机文件处理开始。
Xavier Lucas

11
哈哈,不,我不会。几乎没有一天,我没有理由使用RFC击败一些开发人员。
迈克尔·汉普顿

2
@迈克尔·汉普顿:你不会相信我有时从开发者那里看到的东西。几周前,我有一个人在ip摄像机中制作了一个网络配置网页,以便用户可以输入摄像机的主机名。他没有对自由格式的用户输入进行任何验证。Beta测试用户输入了“ Room 1.10”,摄像机愉快地将其作为DHCP客户端标识符发送。我可以向您保证Microsoft DHCP和DNS服务器不喜欢那样。在产品投入生产之前,我注意到了一件好事。我只能为这样的想法而颤抖:有时确实会
传达

13

最初,主机名不能以数字或下划线(RFC 952)开头,但正如您提到的,新规范RFC 1123允许它。

关于对isValid()的调用,在这种情况下,应在参数中传递完整域名: InternetDomainName.isValid("8server.com");


是否真的需要将完整的域名传递给isValid方法?毕竟InternetDomainName.isValid("server");返回true。
2014年

@马克OK,我的回答相应更新
席琳Aussourd

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.