我正在尝试获取我的 DNS 服务器的解析时间,但我不确定我是否做得很好。
首先,我尝试对我的 DNS 服务器 IP 执行 ping 操作,并获取时间值,但我不确定它是否是正确的值,因为我认为该值是发出请求并获取的时间对此 IP 的响应。
然后我尝试发出 2 个不同的 ping,一个像这样:"ping www.google.es"
,第二个像这样:"ping googleIP"
并进行比较时间,但时间完全一样。
最后,我尝试搜索一个可以提供此信息的命令,但找不到。我尝试了 nslookup
,但这不是我需要的答案。是否存在任何命令或任何方式来获取此信息?
谢谢。 :)
最佳答案
更新: C.J. Jackson正确地注意到,在测量 DNS 解析时间时,您必须考虑缓存。我认为这在回答并专注于测量命令运行时方面时是给定的。但可以肯定的是,您需要执行 ipconfig/flushdns
以在运行之间清除本地 DNS 缓存,以真正衡量您的 DNS 服务器性能。
nslookup
对 DNS 服务器执行名称解析 - 所以这是正确的命令。但是正如您已经指出的那样,它不显示名称解析所花费的时间。使用 Windows 自己的 powershell
可以做到这一点:
powershell "Measure-Command { nslookup www.google.es }"
现在,这个输出在我的系统上......
Non-authoritative answer:
Days : 0
Hours : 0
Minutes : 0
Seconds : 0
Milliseconds : 31
Ticks : 317898
TotalDays : 3,679375E-07
TotalHours : 8,8305E-06
TotalMinutes : 0,00052983
TotalSeconds : 0,0317898
TotalMilliseconds : 31,7898
如果您想以编程方式使用此值,您可以使用 FINDSTR
进行过滤:
powershell "Measure-Command { nslookup www.google.es }" | FINDSTR "^Milliseconds"
不幸的是,这仍然输出 Non-authoritative answer:
由 nslookup
打印到 STDERR
。与批处理不同,您不能在 powershell
中重定向到 NUL
- 您需要重定向到 $null
:
powershell "Measure-Command { nslookup www.google.es 2> $null }" | FINDSTR "^Milliseconds"
输出:
Milliseconds : 31
或者,正如 Stephan 所指出的那样,您还可以将重定向移到 powershell
调用之外,从而移出时间测量(我这边相差约 2 毫秒)。这是有效的,因为 powershell
输出到 STDOUT
而不是 STDERR
:
powershell "Measure-Command { nslookup www.google.es }" 2>NUL | FINDSTR "^Milliseconds"
关于windows - 使用 BATCH (cmd) 获取 DNS 解析时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34743804/