我的网络连接出现问题,希望能够定期(例如 1-5 秒)ping 远程服务器并将那些花费超过定义时间段(例如 500 毫秒)的请求记录到日志文件中, 时间戳。有没有办法通过脚本或批处理文件或可以在我的客户端机器上连续运行的东西来做到这一点?
问问题
4339 次
2 回答
1
如果您使用ping
命令,您将有时间回答:
C:\Users\Private\TEST>ping google.com 用 32 字节的数据 ping google.com [173.194.70.138]: 来自 173.194.70.138 的回复:字节=32 时间=25ms TTL=50 来自 173.194.70.138 的回复:字节=32 时间=25ms TTL=50 来自 173.194.70.138 的回复:字节=32 时间=24ms TTL=50 来自 173.194.70.138 的回复:字节=32 时间=24ms TTL=50 173.194.70.138 的 Ping 统计信息: 数据包:发送 = 4,接收 = 4,丢失 = 0(丢失 0%), 大约以毫秒为单位的往返时间: 最小值 = 24 毫秒,最大值 = 25 毫秒,平均值 = 24 毫秒
只需通过 for /f
循环获取时间,将其与 500 ( if %PingTime% gtr 500
) 进行比较,然后将获取的时间与时间戳(例如%date%-%time%
)写入您的日志文件。在循环中设置命令goto
以重复它。
于 2013-09-13T17:43:22.667 回答
1
这是我能够创建以解决问题的最后一批。此批次不考虑对 ping 的“请求超时”响应的情况。由于缓慢的响应时间总是在很长一段时间内发生,因此只需捕获缓慢的 ping 响应时间就足够了。
您可以根据您的情况简单地修改“serverName”和“maxPingTime”变量。
@echo OFF
setlocal enabledelayedexpansion
set serverName=myServerName
set maxPingTime=120
:loop
REM // execute a ping command, iterate over each line returned, & note the 5th string (space-delimited)
for /f "tokens=5" %%a in ('ping -n 1 %myServerName%') do (
REM // store the 5th string in a variable
set pingToken=%%a
REM // we only want the line for which the first 4 characters of the 5th string equals "time" (i.e. "time=120ms")
if "!pingToken:~0,4!" equ "time" (
REM // strip off the last 2 letters of the string (i.e. "ms")
set tokenWithoutUnits=!pingToken:~0,-2!
REM // strip off the first 5 letters of the string (i.e. "time=")
set pingTime=!tokenWithoutUnits:~5,3!
REM // Compare the ping time to some maximum value of millisseconds
if !pingTime! gtr !maxPingTime! (
REM // Write the date, time, and ping time (in ms) to a text file
echo %DATE%-%TIME% !pingTime! >> slowpings.txt
)
REM // Wait for 4 seconds before issuing another ping
ping 1.1.1.1 -n 5 > nul
)
)
REM // jump back to the beginning of the loop
GOTO :loop
于 2013-09-18T16:09:07.037 回答