使用BATCH(cmd)获取DNS解析时间

Mar*_*o93 2 windows dns time cmd batch-file

我正在尝试获取我的DNS服务器的解析时间,但是我不确定自己是否做得很好。

首先,我尝试对DNS服务器IP进行ping操作,并捕获时间值,但是我不确定该值是否正确,因为我认为该值是发出请求并获得响应的时间该IP。

然后,我尝试进行两次不同的ping操作,一次像这样:"ping www.google.es"和第二次像:"ping googleIP"比较时间,但时间完全相同。

最终,我尝试搜索一个提供该信息的命令,但找不到。我尝试了,  nslookup 但这不是我需要的答案。是否存在任何命令或任何方式来获取此信息?

谢谢。:)

zb2*_*226 5

更新: CJ Jackson正确地指出,在测量DNS解析时间时,必须考虑缓存。我认为这将是回答时的重点,并将重点放在测量命令运行时方面。但是可以肯定的是,您需要ipconfig /flushdns在两次运行之间清除本地DNS缓存,以真正衡量DNS服务器的性能。


nslookup对DNS服务器执行名称解析-因此这是使用的正确命令。但是,正如您已经提到的,它不会显示名称解析所花费的时间。可以使用Windows自己的方法做到这一点powershell

powershell "Measure-Command { nslookup www.google.es }"
Run Code Online (Sandbox Code Playgroud)

现在,这在我的系统上输出...

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
Run Code Online (Sandbox Code Playgroud)

如果要以编程方式使用此值,则可以使用FINDSTR

powershell "Measure-Command { nslookup www.google.es }" | FINDSTR "^Milliseconds"
Run Code Online (Sandbox Code Playgroud)

不幸的是,这仍然输出Non-authoritative answer:其通过印刷nslookupSTDERR。与分批,你不能重定向到NULpowershell-而不是你需要重定向到$null

powershell "Measure-Command { nslookup www.google.es 2> $null }" | FINDSTR "^Milliseconds"
Run Code Online (Sandbox Code Playgroud)

输出:

Milliseconds      : 31
Run Code Online (Sandbox Code Playgroud)

另外,正如Stephan指出的那样,您还可以将重定向移到powershell调用之外,从而移出时间度量(这相当于我的时间差〜2ms)。由于powershell输出到STDOUT而不是STDERR

powershell "Measure-Command { nslookup www.google.es }" 2>NUL | FINDSTR "^Milliseconds"
Run Code Online (Sandbox Code Playgroud)

  • 将重定向移动到`powershell`之外:`... google.es}“ 2> nul | findstr ...`,因此根本无法进行衡量。 (2认同)
  • 确实-这解释了截然不同的时代。改编了我以前的评论。 (2认同)