空白';名称';DNS区域文件记录中的字段
我目前正在工作中解析大量区域文件,以便将这些数据存储在数据库中并轻松重新生成区域文件 我试图使我的解析器非常严格,这样我们就可以提取任何格式错误的区域文件,并且我遇到一些在“name”字段中没有任何内容的记录 例如:空白';名称';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
$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
记录类型不可能发生。除此之外,我当然不建议名称服务器与区域名称相同,这将造成无尽的麻烦。。。