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

时间:2014-04-03 15:22:12

标签: .net windows powershell networking 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缓存,而不是先查询localhost信息?换句话说,如何在服务器上本地运行此方法以获得远程运行时它会给我的输出?

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

感谢。

2 个答案:

答案 0 :(得分:1)

另一种“勾结”的方式:

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将产生所需的结果,但这是一个肮脏的解决方法。

答案 1 :(得分:0)

如果需要查询DNS缓存,可能需要在Win32 API中使用DnsQuery()方法,并使用.NET P / Invoke从PowerShell中调用它。请参阅此StackOverflow问题:Retrieving what's in the DNS cache