【问题标题】:Compare "nslookup host" to "nslookup ip"将“nslookup 主机”与“nslookup ip”进行比较
【发布时间】:2017-07-28 01:27:19
【问题描述】:

我需要确定在 Windows 平台上使用标准 Windows 工具(CMD、VBS、POWERSHELL)进行的 DNS 查找是否与 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 不匹配”或 “haw1.blah.org 匹配”取决于结果。

知道如何做到这一点吗?

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

这给我留下了项目的 FQDN 和名称从 DNS 返回的 IP。我不知道如何进行反向 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

【问题讨论】:

  • 您尝试过什么,您尝试过什么失败了? SO 不是代码编写服务;最好的问题是那些提供有用信息的问题,以便回答的人可以指导您设计自己的正确答案。见How to Ask a Good Question
  • 然后查询IP地址 - 是什么让你认为只有一个IP地址?或者不会有任何 CNAME?还是只有一个 PTR 条目?使用Resolve-DnsName,但出于“这个问题没有显示任何研究工作”的原因而投反对票
  • 通常情况下,DNS 中显示的设备已不存在,而新设备分配了相同的 IP。我正在尝试确定是否发生这种情况: NSLOOKUP comp1 返回 172.10.10.10 反向查找 NSLOOKUP 172.10.10.10 返回 comp2。已验证 NSLOOKUP comp2 -> 172.10.10.10(抱歉,我无法弄清楚如何在评论中编写代码)我不是 DNS 专家,但我必须整天手动执行此操作并尝试使其自动化。
  • Resolve-DnsName 对 Windows 7 无效,因此这不是适用于任何受支持的 Windows 版本的答案
  • 这个问题由DNS aging and scavenging自动解决

标签: powershell batch-file vbscript dns nslookup


【解决方案1】:

正如 TessselHeckler 指出的那样,这种方法在很多情况下都会失败。话虽如此,这里是一个使用 .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

【讨论】:

    【解决方案2】:

    虽然不是代码编写服务,但也许一个简单的例子可以提供服务。此示例将要求您键入或粘贴远程计算机名称并报告是否存在 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
    #https://stackoverflow.com/questions/42655065/compare-nslookup-host-to-nslookup-ip
    #Modified by John Delise 2022-01-01 Happy New Year
    

    【讨论】:

      猜你喜欢
      • 2016-01-06
      • 1970-01-01
      • 2011-07-25
      • 2016-02-16
      • 1970-01-01
      • 2015-08-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多