Linux篇
ping检测
使用系统自带的ping命令,开启ping后同时输出时间戳保存到日志文件
ping 223.5.5.5 | awk '{ print strftime("%Y.%m.%d %H:%M:%S",systime())"\t" $0 }'>> ping.log
优点是不用安装额外的程序,不用写复杂的脚本,缺点是丢包的时候在日志中不会有失败提示,日志记录会从最后一次ping成功的时间戳跳到下一次ping成功的时间戳,检查的时候需要慢慢看时间才能发现掉包时间点。如果要统计发包数及丢包数及百分比,需要手动kill掉ping的进程
fping检测
需要安装fping程序,提供几个例子:
fping -Alesu 223.5.5.5 >> fping1.log 2>&1
| 缺点:没有时间戳,只能看到丢包率
fping -AlDuQ 1 223.5.5.5 >> fping3.log 2>&1
| 优点:可以看到时间戳及丢包率
fping参数详解:
-a show targets that are alive
-A show targets by address
-b n amount of ping data to send, in bytes (default 56)
-B f set exponential backoff factor to f
-c n count of pings to send to each target (default 1)
-C n same as -c, report results in verbose format
-D print timestamp before each output line
-e show elapsed time on return packets
-f file read list of targets from a file ( - means stdin) (only if no -g specified)
-g generate target list (only if no -f specified)
(specify the start and end IP in the target list, or supply a IP netmask)
(ex. fping -g 192.168.1.0 192.168.1.255 or fping -g 192.168.1.0/24)
-H n Set the IP TTL value (Time To Live hops)
-i n interval between sending ping packets (in millisec) (default 25)
-I if bind to a particular interface
-l loop sending pings forever
-m ping multiple interfaces on target host
-n show targets by name (-d is equivalent)
-O n set the type of service (tos) flag on the ICMP packets
-p n interval between ping packets to one target (in millisec)
(in looping and counting modes, default 1000)
-q quiet (don't show per-target/per-ping results)
-Q n same as -q, but show summary every n seconds
-r n number of retries (default 3)
-s print final stats
-S addr set source address
-t n individual target initial timeout (in millisec) (default 500)
-T n ignored (for compatibility with fping 2.4)
-u show targets that are unreachable
-v show version
targets list of targets to check (if no -f specified)
编写脚本记录(推荐)
通过定时任务配合自带的ping程序进行检测并记录到日志文件,分为定时任务脚本及ping脚本
定时任务脚本:
for i in $(seq 1 60)
do
echo "*/1 * * * * root sleep ${i} && sh /root/internetcheck.sh >> /tmp/wan.log 2>&1" >> /etc/crontab
done
ping脚本:
#!/bin/bash
time=`date +%m.%d-%H:%M:%S:`
ping -c 3 223.5.5.5 > /dev/null
if [ $? -eq 0 ];then
echo -e "$time \e[1;32m Network connection normal \e[0m"
else
echo -e "$time \e[1;31m No network connection \e[0m"
fi
将ping脚本保存为internetcheck.sh并添加执行权限,将定时任务脚本保存后,直接执行一边脚本即可。
Windows篇
本来不大想记录Windows的脚本的,毕竟很容易出现丢包不记录的情况,但是鉴于很多时候维护都用windows,还是记录一个
set host=223.5.5.5
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)
将上述脚本保存为bat文件直接运行即可
本文由 Ethan 创作,采用 知识共享署名4.0 国际许可协议进行许可。
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。