1

我的问题源于这个过程:假设一个应用程序有一个主机或地址字段,并希望连接到该地址的某些服务。许多应用程序会查看该地址并猜测它是 IP 地址还是主机名。这个应用程序可以使用像 inet_pton() 这样的函数来做这个检查。如果该地址确实看起来像一个 IP 地址,则应用程序不会执行 DNS 查找并直接使用该 IP 地址。

现在,我并不是说这是一个好主意,但如果有人定义了一个看起来像 1.2.3.4 的 dns 名称怎么办。这看起来像一个 ip 地址,所以上面的应用程序将使用它作为和 ip 地址,而不是作为 DNS 名称。

从观察来看,似乎大多数应用程序的行为都如第一段所述。出于几个原因,这对我来说似乎是有益的。是否有任何文档表明不应使用看起来像 IP 地址的 DNS 名称。或者任何说明即使有人将 DNS 名称定义为看起来像 IP 地址的任何文档,也可以不尊重它。

4

2 回答 2

6

其他人已经回答了,但我会补充和巩固。

相关的 RFC:

最初,主机名不能以数字开头,以消除主机名和 IP 地址之间的歧义。在修订版中,这已更改,主机名可以以数字开头。因此,像 127.0.0.1.com 这样的域名是合法的。TLD 不能以数字开头(TLD 代表顶级域,其中 .com、.net、.org、国家代码等是其成员)。名称必须至少包含一个字符,必须以字母数字字符开头和结尾,并且最多可以有 64 个字符(尽管标准支持更长的主机名,但系统不需要支持超过 64 个字符的名称)。

此外,如最终 RFC 中所述,某些 SLD 和 TLD 是保留的,无法注册。

于 2012-07-31T21:13:49.253 回答
3

要查看的相关规范是RFC 1123 的第 2.1 节

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

于 2012-07-31T21:07:04.360 回答