如果连续ping失败则启动traceroute的脚本,输出到日志
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果连续ping失败则启动traceroute的脚本,输出到日志相关的知识,希望对你有一定的参考价值。
我想连续ping我的家庭公共IP地址,如果ping失败,则自动执行traceroute以查看它的失败位置。
我一直在努力遵循这里的评论:
http://social.technet.microsoft.com/Forums/en-US/ITCG/thread/efc97c66-60a6-4fd7-8be4-4b454d040ce5
Windows兼容性更好,蝙蝠或vbs最好。
从互联网上的任何地方,我将失去与家庭网络的连接。从工作开始我已经开始ping了,当它掉线时我已经完成了一个traceroute,它在它到达我的IP之前就失败了。
我需要一个日志文件来证明它不是我的调制解调器,路由器或计算机。
@echo off
set Address=google.com
:Loop
PING -n 5 127.0.0.1>nul
echo Pinging %Address%
%SystemRoot%system32ping.exe -n 1 %Address% | %SystemRoot%system32find.exe "TTL=" > NUL >> C:pingtestlogfile.log
if %ERRORLEVEL% EQU 0 goto :Loop
echo Trace route %Address% at %date% %time% >> C:pingtestlogfile.log
tracert %Address% >> C:pingtestlogfile.log
goto Loop
这就是我最终的目标,如果有其他人需要这个。基本上,“Ping -n 127.0.0.1> Nul”是添加一个5秒钟的计数器,这样它每5秒钟只能ping目的地,5可以改为任何需要的值。
Windows 7有这样的问题,ping可能导致类似“从192.168.1.5回复:目标主机无法访问”。因此,不是错误输出而是从自身获得回复而不是错误级别1.我没有查找错误级别1而是选择查找没有结果的TTL“%SystemRoot% system32 ping.exe -n 1%Address %|%SystemRoot% system32 find.exe“TTL =”> NUL“
无论如何,我确信这里的其他答案非常相似并且可能有效,所以我对它们进行排名,但将其标记为答案。
谢谢大家!
@echo off
set Address=www.google.com
set LogDir=C:pingtest
md %LogDir%
%SystemRoot%explorer.exe "%LogDir%"
echo PingTest script to monitor network connection. Control-C to exit.
echo Tests connection by pinging %Address%. Logs to %LogDir%logfile.log.
echo %date% %time% Initial tracert (trace route) to %Address% >> %LogDir%logfile.log
tracert %Address% >> %LogDir%logfile.log
:Loop
REM 5 second delay
PING -n 5 -w 1 127.0.0.1>nul
echo %date% %time% Pinging %Address%
echo %date% %time% Pinging %Address% >> %LogDir%logfile.log
%SystemRoot%system32ping.exe -n 1 %Address% | %SystemRoot%system32find.exe "TTL=" > NUL
if %ERRORLEVEL% EQU 0 goto :Loop
echo %date% %time% PING ERROR - Tracing route to %Address%
echo %date% %time% PING ERROR - Tracing route to %Address% >> %LogDir%logfile.log
tracert %Address% >> %LogDir%logfile.log
goto Loop
您可以创建一个尝试ping的简单批处理文件,如果失败则执行tracert,例如:
setlocal
set host=www.bigpond.com
set logfile=nettest.log
echo %date% %time%>>%logfile%
ping %host%>>%logfile%
if ERRORLEVEL 1 tracert %host%>>%logfile
endlocal
这里有很多优化的空间。
然后创建一个计划任务,每五分钟运行一次或任何适合你的任务。
或者,您可以在其中包含一个带有“睡眠”的循环。在Sleeping in a batch file有一个穷人的睡眠使用:
choice /d y /t 5 > nul
:LOOP
FOR /F "usebackq tokens=1" %%F IN (`ping localhost -n 1 -w 1 ^| find "Request"`) DO (
IF "%%F"=="Request" (
tracert localhost
)
)>>log.txt
FOR /F "usebackq tokens=1-4 delims=:." %%G IN (`echo %time%`) DO IF %G%H GTR 1400 GOTO:EOF
GOTO LOOP
基本上,这个状态执行ping
,如果它找到一个具有单词Request
实例的行(只有在你不能ping地址时才出现)执行tracert。在-n
中的-w
和PING
开关告诉它只跳一次并在1秒钟后没有得到响应超时。如果您正在ping您的localhost,这是完全正常的。第二个FOR
声明是有一个停止点。将1400
更改为您希望脚本停止的时间(当然是军事时间)。
我一直在寻找同样的事情来调查为什么VPN一直在有线连接上丢失,使用上面的一个批处理文件建议很棒。还找到了一个很好的小Java应用程序,它在这里为你打包Internet Connectivity Monitor
简单易用并完成工作:-)
以上是关于如果连续ping失败则启动traceroute的脚本,输出到日志的主要内容,如果未能解决你的问题,请参考以下文章