空白';名称';DNS区域文件记录中的字段

空白';名称';DNS区域文件记录中的字段,dns,bind,Dns,Bind,我目前正在工作中解析大量区域文件,以便将这些数据存储在数据库中并轻松重新生成区域文件 我试图使我的解析器非常严格,这样我们就可以提取任何格式错误的区域文件,并且我遇到一些在“name”字段中没有任何内容的记录 例如: $TTL 120 $ORIGIN example.com @ NS example.com @ A 192.0.2.178 www CNAME example.com A 192.0.2.144 file CNAME

我目前正在工作中解析大量区域文件,以便将这些数据存储在数据库中并轻松重新生成区域文件

我试图使我的解析器非常严格,这样我们就可以提取任何格式错误的区域文件,并且我遇到一些在“name”字段中没有任何内容的记录

例如:

$TTL 120
$ORIGIN example.com

@    NS      example.com
@    A       192.0.2.178
www  CNAME   example.com
     A       192.0.2.144
file CNAME   example.com
如何处理第二个记录?这是一种有效的语法吗?

空白的“名称”字段表示只使用与上一条记录相同的名称,因此在您的示例中,
a
记录用于
www.example.com
。见本协议第5.1条

如果RR的条目以 空白,则假定RR为最后声明的所有者所有


但是,这也使得该特定文件非法-您不能在同一标签上显示
CNAME
a
记录。请参阅。

的§3.6.2。我知道这是一个老问题-只是在寻找其他内容时无意中发现了它,无论如何,最后一条评论——“空白的“名称”字段表示只使用与前一条记录相同的名称”是不正确的

每当区域文件中缺少标签时(标签是左边的字段-即主机名或完全限定的域名),它都由
$ORIGIN
变量的值限定(
$ORIGIN
=example.com,在这种情况下-也可以由
@
引用)

所以在上面的区域文件中,记录

A 192.0.2.144

example.com A 192.0.2.144
原样..
@A 192.0.2.144

话虽如此,这个区域文件包含非常糟糕的语法,因为它似乎没有一个是完全限定的(即根的末尾没有尾随点),如中所示

$ORIGIN example.com.


somehost.example.com。在192.0.2.144中

我猜名称服务器不是工作不好就是有问题


基本上/通常至少在绑定区域文件中,如果未通过尾随点完全限定,$ORIGIN var的值将附加到标签。

这比Alnitak答案更有意义。空中楼阁$ORIGIN@baaroz这个答案完全不正确。@确实意味着$ORIGIN,但空绝对不是!根据RFC 1035-“如果RR的条目以空白开头,则假定RR为最后声明的所有者所有。”此回答完全错误,任何对此进行投票的人从未运行过DNS服务器。此分区文件无效,并且不会由任何遵守标准的DNS服务器加载。因为您同时拥有
www-CNAME
www-A
(前面的空白部分表示使用上一个标签,正如@Alnitak回答的那样),根据定义,对于具有任何其他记录类型的给定标签,
CNAME
记录类型不可能发生。除此之外,我当然不建议名称服务器与区域名称相同,这将造成无尽的麻烦。。。