有各种参考资料(例如DNS 无法解析主机名;nslookup 可以或者https://web.archive.org/web/20160525082756/http://homepage.ntlworld.com/jonathan.deboynepollard/FGA/nslookup-flaws.html或者https://web.archive.org/web/20121113214415/http://cbfive.com/blog/post/PING-vs-NSLookup.aspx) 陈述以下内容或类似内容,但没有提供替代方法的建议:
ping 无法解析主机名而 nslookup 可以的原因是 nslookup 是一个绕过 Windows DNS 客户端的低级工具。它使用您指定的任何 DNS 服务器(默认情况下为第一个),并即时执行查询。
我的问题是,我该如何手动测试 DNS 客户端以检查 SRV 记录?有没有办法查看它尝试使用的 DNS 信息?我无法在每个环境中的每台服务器上都安装 Wireshark,因此我正在寻找另一种方法来排除故障。我猜答案是“否”,否则我们为什么要使用 nslookup(尽管它有缺陷)。显然我不能使用 ping 来获取 SRV 记录。
已更新结果并进行了编辑:UDP 查询太长,因此带有截断标志的 DNS 响应会发送到客户端,因此需要进行 TCP 查询。TCP DNS 查询后的下一个数据包是(从 TargetDNS 到客户端):“重组 PDU 的 TCP 段”(看起来包含响应信息),然后根据场景的不同而不同:
- Nslookup 查询 - 使用 nslookup 查询实际上会有一个包含以下信息的 DNS 响应数据包
- ApplicationX(我相信它使用 Windows DNS 客户端)-Windows DNS 客户端查询,没有 DNS 响应数据包(即像其他 TCP 数据包已丢失)
- DNS 缓存(ipconfig /displaydns)中或客户端 DNS 服务器缓存中没有任何有关 SRV 记录的内容(甚至没有负数)。
事实证明,DNS客户端和nslookup得到的结果不同,这并不令人意外,但究竟它们做了什么不同的事情(忽略主机、lmhosts、附加DNS搜索后缀等)?它们使用相同的DNS服务器(Wireshark证明)。我该如何缩小故障范围?
答案1
您的理解是正确的,它nslookup
本身充当 DNS 客户端,与操作系统代表典型应用程序执行的操作无关。
Resolve-DnsName
另一方面,Powershell cmdlet使用底层的 Windows DNS 客户端。因此,这是一个可用于触发 DNS 查找(或其他来源,尽管名称不同!)的正常 OS 行为的工具,独立于您的应用程序。
例如类似这样的SRV
查找示例:
Resolve-DnsName -Type SRV _sip._tcp.example.com
旁注:等
行为(通常是此类别中的首选工具)对于调查 DNS 行为很有用,具体是因为本地环境不会影响结果,但同时它使这些工具不适合调查本地操作系统环境的行为。nslookup
dig