【问题标题】:How do I force the Dns.GetHostAddresses .NET method to only query DNS or the DNS cache?如何强制 Dns.GetHostAddresses .NET 方法仅查询 DNS 或 DNS 缓存?
【发布时间】:2014-04-03 15:22:11
【问题描述】:

当我使用 .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 地址,无论我是远程运行还是本地运行。

谢谢。

【问题讨论】:

  • 您是只使用主机名还是 FQDN?
  • 我都试过了,结果一样。
  • GetHostEntry() 在 AddressList 中返回相同的内容吗?
  • 实际上,是的。我必须调用 [System.Net.Dns]::GetHostEntry("hostname").addresslist,但这会得到相同的结果。

标签: .net windows powershell networking dns


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

【讨论】:

  • 刚刚试了一下,结果一样。我不关心是查询缓存还是实时 DNS,我想强制它不先查询本地主机。我在想方法尝试查询的顺序是 localhost > DNS cache > live DNS。我想删除本地主机查询。
  • 修改了一个不太漂亮(但有效)的解决方案的答案。
  • 我知道你想做什么,但这不起作用。
  • 另一个使用 nslookup 拍摄,应该可以,但它不使用 [System.Net.Dns] 类。
  • 我找到了另一个解决方案,但您的解决方案值得一票。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-04
    • 2016-12-16
    • 2010-12-22
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多