如果连续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中的-wPING开关告诉它只跳一次并在1秒钟后没有得到响应超时。如果您正在ping您的localhost,这是完全正常的。第二个FOR声明是有一个停止点。将1400更改为您希望脚本停止的时间(当然是军事时间)。

另一答案

我一直在寻找同样的事情来调查为什么VPN一直在有线连接上丢失,使用上面的一个批处理文件建议很棒。还找到了一个很好的小Java应用程序,它在这里为你打包Internet Connectivity Monitor

简单易用并完成工作:-)

以上是关于如果连续ping失败则启动traceroute的脚本,输出到日志的主要内容,如果未能解决你的问题,请参考以下文章

为什么ping不通,而traceroute却可以通

Netty实现长连接的原理

traceroute ping 开放(icmp|udp)

ping -R 和 traceroute的区别

计算机网络 网络层 ICMP协议 ping和traceroute介绍

计算机网络 网络层 ICMP协议 ping和traceroute介绍