如何强制 Dns.GetHostAddresses.NET 方法仅查询 DNS 或 DNS 缓存



当我使用 .NET GetHostAddresses 方法在服务器上的 PowerShell 中运行以下 DNS 查询时,我得到以下结果:

([System.Net.Dns]::GetHostAddresses("hostname")).ipaddresstostring
10.10.10.55

我正在远程运行此查询。

但是,当我在实际服务器本身本地运行相同的确切查询时,我得到以下结果:

([System.Net.Dns]::GetHostAddresses("hostname")).ipaddresstostring
10.10.10.55
10.10.34.101
10.10.138.154

显然,它为我提供了未在 DNS 中注册的其他接口的 IP 地址,因为我在本地运行该方法。

所以,我的问题是,我怎样才能强制该方法仅查询DNS或DNS缓存,而不是先查询本地主机信息?否则,我如何在服务器上本地运行此方法以获得远程运行它会给我的输出?

我只需要与 DNS 关联的 IP 地址,无论我是远程还是本地运行它。

谢谢。

另一种"钩子"方式:

function dnsLookup($hostname){
    $r = (nslookup $hostname | Out-String).split("`n")
    for($i = 4; $i -lt ($r.count - 2); $i++){
    $r[$i] -replace "Address:  |Addresses:  | |`t",""
    }   
}

因此,运行dnsLookup YourHost将产生所需的结果,但这是一种肮脏的解决方法。

如果需要查询 DNS 缓存,可能需要使用 Win32 API 中的 DnsQuery() 方法,并使用 .NET P/Invoke 从 PowerShell 调用它。请参阅此堆栈溢出问题:检索 DNS 缓存中的内容

最新更新