如何强制Dns.GetHostAddresses .NET方法只查询DNS或DNS缓存?(How d

2019-10-19 18:44发布

当我使用.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地址。

谢谢。

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



Answer 2:

如果您需要查询的DNS缓存,您可能需要使用DnsQuery() Win32 API中的方法,并使用.NET的P / Invoke从PowerShell中调用它。 看到这个StackOverflow的问题: 检索什么是DNS缓存中



文章来源: How do I force the Dns.GetHostAddresses .NET method to only query DNS or the DNS cache?