用时间戳Ping

在Windows命令提示符cmd ,我使用ping -t to 10.21.11.81

 Reply from 10.21.11.81: bytes=32 time=3889ms TTL=238 Reply from 10.21.11.81: bytes=32 time=3738ms TTL=238 Reply from 10.21.11.81: bytes=32 time=3379ms TTL=238 

有没有可能得到这样的输出?

 10:13:29.421875 Reply from 10.21.11.81: bytes=32 time=3889ms TTL=238 10:13:29.468750 Reply from 10.21.11.81: bytes=32 time=3738ms TTL=238 10:13:29.468751 Reply from 10.21.11.81: bytes=32 time=3379ms TTL=238 

请注意,我只想用CMD提供的命令来实现这个function

 @echo off ping -t localhost|find /v ""|cmd /q /v:on /c "for /l %%a in (0) do (set "data="&set /p "data="&if defined data echo(!time! !data!)" 

注意 :要在batch file中使用的代码。 从命令行使用%%areplace%a

开始ping,强制一个正确的线路缓冲输出( find /v ),然后启动一个延迟扩展的cmd进程,这个进程将执行一个无限循环读取pipe道数据,这个数据将被回显到以当前时间为前缀的控制台。

2015-01-08 编辑 :在更快/更新的机器/操作系统版本中,在以前的代码中存在同步问题,使得set /pping命令仍在写入的同时读取一行,结果是行削减。

 @echo off ping -t localhost|cmd /q /v /c "(pause&pause)>nul & for /l %%a in () do (set /p "data=" && echo(!time! !data!)&ping -n 2 localhost>nul" 

两个附加pause命令包含在子shell的开始处(只能使用一个,但由于pause消耗了一个input字符,CRLF对被破坏,并且有一个带有LF的行被触发)等待input数据,并且一个ping -n 2 localhost被包括在内部循环中等待每一次读取。 结果是更稳定的行为和更less的CPU使用率。

注意:内部的ping可以用一个pause来代替,但是每个连接线的第一个字符被pause而不是由set /p

批处理脚本:

 @echo off set /p host=host Address: set logfile=Log_%host%.log echo Target Host = %host% >%logfile% for /f "tokens=*" %%A in ('ping %host% -n 1 ') do (echo %%A>>%logfile% && GOTO Ping) :Ping for /f "tokens=* skip=2" %%A in ('ping %host% -n 1 ') do ( echo %date% %time:~0,2%:%time:~3,2%:%time:~6,2% %%A>>%logfile% echo %date% %time:~0,2%:%time:~3,2%:%time:~6,2% %%A timeout 1 >NUL GOTO Ping) 

这个脚本将要求哪个主机ping。 Ping输出被输出到屏幕和日志文件。 示例日志文件输出:

 Target Host = www.nu.nl Pinging nu-nl.gslb.sanomaservices.nl [62.69.166.210] with 32 bytes of data: 24-Aug-2015 13:17:42 Reply from 62.69.166.210: bytes=32 time=1ms TTL=250 24-Aug-2015 13:17:43 Reply from 62.69.166.210: bytes=32 time=1ms TTL=250 24-Aug-2015 13:17:44 Reply from 62.69.166.210: bytes=32 time=1ms TTL=250 

日志文件被命名为LOG_ [主机名] .log并被写入与脚本相同的文件夹。

亲切的问候,Joost Kuin – Quanza Engineering

我的LinkedIn

WindowsPowershell:

选项1

 ping.exe -t COMPUTERNAME|Foreach{"{0} - {1}" -f (Get-Date),$_} 

选项2

 Test-Connection -Count 9999 -ComputerName COMPUTERNAME | Format-Table @{Name='TimeStamp';Expression={Get-Date}},Address,ProtocolAddress,ResponseTime 

你可以这样做:

 ping 10.0.0.1 | while read line; do echo `date` - $line; done 

虽然它没有提供你通常在最后打到^ C时得到的统计数据。

在Windows上

您可以使用其他答案之一。

在Unix / Linux上

 while :;do ping -n -w1 -W1 -c1 10.21.11.81| grep -E "rtt|100%"| sed -e "s/^/`date` /g"; sleep 1; done 

或者作为你的〜/ .bashrc的函数pingt

 pingt() { while :;do ping -n -w1 -W1 -c1 $1| grep -E "rtt|100%"| sed -e "s/^/`date` /g"; sleep 1; done } 

来源: https : //stackoverflow.com/a/26666549/1069083

尝试这个:

使用以下命令创build一个batch file:

 echo off cd\ :start echo %time% >> c:\somedirectory\pinghostname.txt ping pinghostname >> c:\somedirectory\pinghostname.txt goto start 

您可以根据您的要求将您自己的选项添加到ping命令中。 这不会将时间戳放在与ping相同的行上,但仍然可以获取所需的信息。

更好的方法是使用fping,去这里http://www.kwakkelflap.com/fping.html下载它。;

试试这个insted:

ping -c2 -s16 sntdn | awk'{print NR“|”strftime(“%Y-%m-%d_%H:%M:%S”)“|”$ 0}'VER QUE TE PARECE,OJALA Y TE SIRVA

另一个PowerShell的方法(我只想失败)

 $ping = new-object System.Net.NetworkInformation.Ping $target="192.168.0.1" Write-Host "$(Get-Date -format 's') Start ping to $target" while($true){ $reply = $ping.send($target) if ($reply.status -eq "Success"){ # ignore success Start-Sleep -Seconds 1 } else{ Write-Host "$(Get-Date -format 's') Destination unreachable" $target } } 

我也需要这个监视networking问题,我的数据库镜像超时问题。 我使用如下的命令代码:

 ping -t Google.com|cmd /q /v /c "(pause&pause)>nul & for /l %a in () do (set /p "data=" && echo(!date! !time! !data!)&ping -n 2 Google.com>nul" >C:\pingtest.txt 

您只需要将Google.com修改为您的服务器名称。 这对我来说是完美的。 并记得当你完成时停止这个。 pingtest.txt文件将每分钟增加4.5 KB(左右)。

感谢raymond.cc。 https://www.raymond.cc/blog/timestamp-ping-with-hrping/