我知道你可以通过运行来测试DNS服务器是否有效
dig +short test_hostname @nameserver
但是,如果我们没有test_hostname
来测试查询呢?例如,如果我们要在其上运行此命令的系统位于受限制的网络中,并且我们不知道他们可以访问或在其网络上可用的主机名。
使用localhost
作为test_hostname
是否是检查这是否是有效DNS服务器的可靠方法?
或者我确实注意到dig, host, nslookup
将全部返回:
;; connection timed out; no servers could be reached
如果你输入了一个无效的DNS服务器,而不管你输入了什么test_hostname
,那么就只运行:
dig +short @nameserver
是否是检查DNS服务器是否有效的可靠方法?不需要检查DNS服务器是否是假的/恶意的,只需要检查它是有效的还是无效的。
尝试:
dig . ns @nameserver +short
即使服务器没有配置根名称服务器,如果它处于活动状态,它也会对此做出响应。如果有根服务器,您将获得一个有效的NS记录列表;否则,您将得到一个带有rcode=NOERROR
的空响应。
您并不是在说您是在测试递归名称服务器还是权威名称服务器。
您还需要定义有效。您希望您的查询得到DNS答复吗?
您可以使用已知的无效/不存在的名称进行测试,例如whatever.test
或whatever.example
。您应该始终得到DNS回复,即使是NXDOMAIN
,或者在向上推荐的情况下可能是NOERROR
。
请注意,如果您对您不控制的服务器这样做,根据速率,人们可能会开始注意到并限制您的速率,甚至更糟。
您也可以尝试查询CHaos
区域,但这通常是禁用的。这是"识别"给定名称服务器软件的一种方法。
示例:
$ dig @a.root-servers.net version.bind TXT chaos +short
"NSD"
即使该功能被禁用,您也应该返回一个带有REFUSED
或NOTIMP
的DNS回复或类似的返回代码:
$ dig @ns1.google.com version.bind TXT chaos
...
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOTIMP, id: 57909
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
;; WARNING: recursion requested but not available
PS:注意,dig有一个header-only
标志,允许发送一个只有标题而没有内容的问题(不需要指定名称(。
并不是所有的名称服务器都能对此做出正确的反应,同样的可能只是超时而根本不回复。