问题
我不是Windows专家,所以我会尽量保持准确,以免引起更多混乱。我在加入域的计算机上。也就是说,如果我转到Control Panel -> System and Security -> System
,则会在Computer name, domain, and workgroups settings
下看到以下信息:
Computer name: mycomputer
Full computer name: mycomputer.my.domain.tld
Computer description: ...
Domain: my.domain.tld
现在,我打开Powershell终端并使用ipconfig
命令获取计算机的IPv4地址(例如1.2.3.4),然后执行以下命令
PS> [System.Net.Dns]::GetHostEntry("1.2.3.4")
我得到的答案是我的计算机是mycomputer.my.domain.tld
。然后执行以下命令
nslookup "1.2.3.4"
我得到的答案是我的计算机是mycomputer.otherdomain.tld
。这是我计算机的正确反向DNS查找条目。
我尝试过的事情
所以我认为也许dns条目已被缓存。我以管理员身份打开Powershell终端并执行ipconfig /flushdns
。之后,GetHostEntry
命令仍然显示我的计算机为mycomputer.my.domain.tld
。
然后我登录到位于同一子网中的另一台Windows计算机并再次执行命令
PS> [System.Net.Dns]::GetHostEntry("1.2.3.4")
返回了mycomputer.otherdomain.tld
。从该计算机上,命令nslookup "1.2.3.4"
还返回正确的结果mycomputer.otherdomain.tld
。
摘要
我不明白这里发生了什么。给定另一台计算机的IP地址时,GetHostEntry
命令返回正确的答案,但是如果给定本地计算机的IP地址,它将返回错误的反向DNS查找结果。有人可以向我解释这种行为吗?
更新
使用Wireshark解决问题后,出现以下行为(每次尝试之前,我总是使用ipconfig /flushdns
清除DNS缓存):
nslookup
总是按预期执行反向DNS请求GetHostEntry
如果我查询同一子网中另一台计算机的IP,例如1.2.3.5,则执行反向DNS请求,并返回正确的PTR条目,例如:othercomputer.otherdomain.tld
GetHostEntry
不执行任何反向DNS请求