比较 "nslookup host" 与 "nslookup ip"

Compare "nslookup host" to "nslookup ip"

我需要使用标准 windows 工具(CMD、VBS、POWERSHELL)确定主机的 DNS 查找是否与 Windows 平台上 IP 的 DNS 查找输出匹配。

这是一个例子 -

  1. 使用 NSLOOKUP 查询主机名 (haw1)

    C:>nslookup haw1
    Server:  myserver.blah.org
    Address:  172.22.14.10
    
    Name:    haw1.blah.org
    Address:  172.40.82.70
    
  2. 然后从#1的结果中查询IP地址

    C:>nslookup 172.40.82.70
    Server:  myserver.blah.org
    Address:  172.22.14.10
    
    Name:    ghi1.blah.org
    Address:  172.40.82.70
    
  3. 比较结果看是否匹配。在这个例子中 haw1.blah.org <> ghi.blah.org

  4. 输出类似 "haw1.blah.org does not match" 或 "haw1.blah.org matches" 视结果而定。

知道如何完成这个吗?

添加我目前所拥有的...

这给我留下了项目的 FQDN 和来自 DNS 的 IP 名称 returns。我不知道如何继续进行反向 DNS 查找和比较。

我所拥有的只是部分解决方案。

if exist name.txt del name.txt
if exist address.txt del address.txt
nslookup %1 > out.txt
type out.txt | find /v /i "server" >out1.txt
del out.txt
type out1.txt | find /v /i "172.22.14.10" >out.txt
del out1.txt
type out.txt | find /i "name" > name.txt
type out.txt | find /i "address:" > address.txt
del out.txt
for /f "tokens=2" %%i in (name.txt) do echo %%i >name1.txt
del name.txt
for /f "tokens=2" %%i in (address.txt) do echo %%i >address1.txt
del address.txt

正如 TessellingHeckler 所指出的,这种方法在很多情况下都会失败。话虽如此,这是一个使用 .Net 中的 Net.DNS 的 PowerShell 方法,应该可以在 Windows 7:

上使用
$ComputerName = "haw1"
$NameLookup = [Net.DNS]::GetHostEntry($ComputerName)
$IPAddress = @($NameLookup.AddressList)[0].IPAddressToString
$IPLookup = [Net.DNS]::GetHostEntry($IPAddress)
$NameLookup.HostName -eq $IPLookup.HostName

虽然不是代码编写服务,但也许一个简单的例子可以提供服务。此示例将要求您键入或粘贴远程计算机名称并报告是否存在 IP 不匹配。

Clear-Host 
$ComputerName = Read-Host -Prompt "IP Mismatch? Type or Paste a computer name here to detect >"

$NameLookup = [Net.DNS]::GetHostEntry($ComputerName)
$IPAddress = @($NameLookup.AddressList)[0].IPAddressToString
$IPLookup = [Net.DNS]::GetHostEntry($IPAddress)

$_N = $NameLookup.HostName.ToString()
$_NIP = $NameLookup.AddressList.IPAddressToString
$_R = $IPLookup.HostName.ToString()
$_RIP = $IPLookup.AddressList.IPAddressToString
If ($_N -eq $_R ) {

    Write-Host "NO MISMATCH!`n$_N,$_NIP`n$_R,$_RIP"

}
Else {

    Write-Host "WARNING MISMATCH!`n$_N,$_NIP`n$_R,$_RIP"

}

#Original Source from
#
#Modified by John Delise 2022-01-01 Happy New Year