我正在尝试获取我的DNS服务器的解析时间,但是我不确定自己是否做得很好。
首先,我尝试对DNS服务器IP进行ping操作,并捕获时间值,但是我不确定该值是否正确,因为我认为该值是发出请求并获得响应的时间该IP。
然后,我尝试进行两次不同的ping操作,一次像这样:"ping www.google.es"
和第二次像:"ping googleIP"
比较时间,但时间完全相同。
最终,我尝试搜索一个提供该信息的命令,但找不到。我尝试了, nslookup
但这不是我需要的答案。是否存在任何命令或任何方式来获取此信息?
谢谢。:)
更新: CJ 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
。与分批,你不能重定向到NUL
的powershell
-而不是你需要重定向到$null
:
powershell "Measure-Command { nslookup www.google.es 2> $null }" | FINDSTR "^Milliseconds"
输出:
Milliseconds : 31
另外,正如Stephan指出的那样,您还可以将重定向移到powershell
调用之外,从而移出时间度量(这相当于我的时间差〜2ms)。由于powershell
输出到STDOUT
而不是STDERR
:
powershell "Measure-Command { nslookup www.google.es }" 2>NUL | FINDSTR "^Milliseconds"