我仔细研究了手册页,我很确定答案是“否”,但是有没有办法阻止dig
解析CNAME
主机记录?
例如:
$ dig +short mail.yahoo.com A
edge.gycpi.b.yahoodns.net.
66.218.84.40
66.218.84.44
66.218.84.41
66.218.84.45
66.218.84.42
66.218.84.43
没有A
该主机的记录,所以我应该得不到答案。在这方面,它似乎A
与任何其他记录类型的处理方式不同。AAAA
我已经尝试过+norecurse
和+noadditional
选项但没有成功。我可以轻松解析脚本中的响应,看看它是否有多行,其中第一行是 FQDN,但感觉我不应该这样做。
答案1
根据RFC 1034您可以请求一种CNAME
记录类型,如果存在,您将得到该记录类型。
dig -t cname +short www.bbc.co.uk
www.bbc.co.uk.pri.bbc.co.uk.
但是,似乎没有办法请求(比如说)记录A
但不允许通过以下方式查找CNAME
:
dig -t cname +short uk.www.bbc.co.uk.pri.bbc.co.uk # No output
的确,RFC 1034 第 3.6.2 节写道,
当名称服务器未能在与域名关联的资源集中找到所需的 RR 时,它会检查该资源集是否包含
CNAME
具有匹配类的记录。如果是,则名称服务器将该CNAME
记录包含在响应中,并在该记录的数据字段中指定的域名处重新启动查询CNAME
。此规则的一个例外是与该CNAME
类型匹配的查询不会重新启动。
根据 RFC 术语,因为没有“应该“在本描述中,这是一个明确的行动方案。
为了获得您正在寻找的行为,您可能需要包装dig
一些自定义代码,例如:
query=www.bbc.co.uk
result=$(dig -t cname +short "$query" | xargs)
[ -z "$result" ] && result=$(dig -t a +short "$query" | xargs)
printf "Result: %s\n" "$result"