一个记录linux下mtr结果的脚本MTR-Recorder
附带IP归属地查询功能
该脚本可从另一个文件(默认是/root/ip.txt)调用IP。
ip文件的制作,每行一个ip,或每行一个“ip[空格]节点”去写(例:127.0.0.1 北京),这样输出结果会同时输出你的节点名。
也可以在ip前加上[链路名]的方式制作ip文件,这种方式会以链路名生成log文件。
也可以在ip前加上[链路名]的方式制作ip文件,这种方式会以链路名生成log文件。
当一个节点数据包发送完并记录之后,自动重复执行。各测试节点互相独立,循环执行。
*有多少个IP就有多少个进程,你可以用[pstree | grep “mr”]查看实时进程数,不会消耗太多机器资源。
如果你想,你甚至可以把整个网段做成IP文件,用他去扫描对端主机是否在线,最好自己做个筛选脚本,不然信息太多会晕的。
如果不喜欢MTR输出的信息,脚本在下面,自己改吧(貌似fping蛮强大的)
如果不喜欢MTR输出的信息,脚本在下面,自己改吧(貌似fping蛮强大的)
加入了IP查询功能,借助ip138.com网站实现。(目前有些问题,可能需自己修改才能使用)
输入:mr [IP],可查询地址
例:mr -i -f 【文件】
第一次写上百行代码的脚本,有问题和建议,请指正。谢谢 ^_^
- #!/bin/bash
- #2011/11/16 First release
- #2012/11/28 Second release
- # 修改输出格式,增加查询ip归属地功能。
- #LANG=zh_CN.gb2312
- #export LANG
- function script ()
- {
- for (( i=1;i<=${line};i=i+1 ))
- do
- dir="/var/MR_log/$(date +"%Y")年/$(date +"%m")月/$(date +"%d")日/"
- ip=$(sed -n ${i}p ${ipfile} | awk '{print $1}')
- nolink=$(sed -n 1p ${ipfile} | awk '{print $1}')
- site=$(sed -n ${i}p ${ipfile})
- if [[ ${ip} = "[中国电信]" ]];then
- filename="时_[中国电信]"
- echo ${yj} >> ${dir}$(date +%H)${filename}
- elif [[ ${ip} = "[中国网通]" ]];then
- filename="时_[中国网通]"
- echo ${yj} >> ${dir}$(date +%H)${filename}
- elif [[ ${ip} = "[中国教育网]" ]];then
- filename="时_[中国教育网]"
- echo ${yj} >> ${dir}$(date +%H)${filename}
- elif [[ ${ip} = "[中国铁通]" ]];then
- filename="时_[中国铁通]"
- echo ${yj} >> ${dir}$(date +%H)${filename}
- elif [[ ${ip} = "[MTR-RECORDER]" ]];then
- filename="时_[MTR-RECORDER]"
- echo ${yj} >> ${dir}$(date +%H)${filename}
- else
- echo "null" >> /dev/null
- {
- while [ "$?" = "0" ]
- do
- dir="/var/MR_log/$(date +"%Y")年/$(date +"%m")月/$(date +"%d")日/"
- mkdir -p ${dir}
- date="$(date +%H)"
- echo -e "${site} \n 开始时间: $(date) \n $(mtr -r -n ${count} ${ip}) \n 结束时间: $(date) \n" >> ${dir}${date}${filename}
- done
- }&
- fi
- done
- }
- function ip138 ()
- {
- ip1=$(echo $1 | cut -d '.' -f 1)
- ip2=$(echo $1 | cut -d '.' -f 2)
- ip3=$(echo $1 | cut -d '.' -f 3)
- ip4=$(echo $1 | cut -d '.' -f 4)
- if [ ${ip1} -le 255 -a ${ip1} -gt 0 ] && [ ${ip2} -le 255 -a ${ip2} -ge 0 ] && [ ${ip3} -le 255 -a ${ip3} -ge 0 ] && [ ${ip4} -le 255 -a ${ip4} -ge 0 ];then
- site=$(curl http://ip138.com/ips.asp?ip=$1 |grep 主数据| cut -d ':' -f 2 | cut -d '<' -f 1)
- echo ${site}
- else
- echo "Error IP!"
- fi
- }
- function insertsite ()
- {
- line=$(wc -l ${filepath} | awk '{print $1}')
- for (( i;i<=${line};i=i+1 ))
- do
- ip=$(sed -n ${i}p ${filepath} |cut -d '.' -f 2,3,4,5 )
- if [[ $(ip138 ${ip}) = "Error IP!" ]]; then
- continue
- else
- nobackspace=$(ip138 ${ip} | sed 's/ //g')
- # site=$(./ip138 ${ip})
- sed -i ''${i}'a \ '${nobackspace}'' ${filepath}
- line=$(wc -l ${filepath} | awk '{print $1}')
- fi
- done
- }
- yj="Tis is YJ's MTR Recorder. Thank you for use!"
- ipfile="/root/ip.txt"
- dir="/var/MR_log/$(date +"%Y")年/$(date +"%m")月/$(date +"%d")日/"
- ip1=$(echo $1 | cut -d '.' -f 1)
- ip2=$(echo $1 | cut -d '.' -f 2)
- ip3=$(echo $1 | cut -d '.' -f 3)
- ip4=$(echo $1 | cut -d '.' -f 4)
- if [ "$1" = "-h" ] || [ "$1" = "--help" ];then
- echo -e "Welcome to use YJ's MTR Recoder(MR).\n 欢迎使用MTR记录器!\n 你可以设置的参数如下: \n -c 数值 设置mtr每个进程的发包数量,默认为10. \n -f 文件 设置程序调用的ip文档,默认为/root/ip.txt \n 例:mr -c 1000 -f ip.txt \n start 开始程序 输入start或直接运行脚本都是使用默认设置启动 \n stop 终止程序 终止所有MR进程,结束程序 \n 当出现刷屏情况时输入:mr stop 可解决。\n 该脚本会使用到mtr、sed、awk、printf、pkill等,如出现报错信息,试试检查这些程序是否可用。\n 如果出现刷屏现象,请使用file检查ip文件是否为UNIX文件,如果是从Windows上传的文件,若无法调用(我测试可直接使用),试着使用dos2unix程序转换格式。 \n 测试记录文件放在/var/MR_log下\n 如出现未知无法解决的问题,请联系作者。\n 联系我:wyyj12@163.com"
- elif [ "$1" = "-c" ] && [ "$2" -gt 0 ] && [ "$3" = "-f" ];then
- count="-c $2"
- ipfile="$4"
- line=$(wc -l ${ipfile} | awk '{print $1}')
- mkdir -p ${dir}
- printf "Starting MR \n"
- script
- elif [ "$1" = "-f" ] && [ "$3" = "-c" ] && [ "$4" -gt 0 ];then
- count="-c $4"
- ipfile="$2"
- line=$(wc -l ${ipfile} | awk '{print $1}')
- mkdir -p ${dir}
- printf "Starting MR \n"
- script
- elif [ "$1" = "-c" ] && [ "$2" -gt 0 ];then
- count="-c $2"
- line=$(wc -l ${ipfile} | awk '{print $1}')
- mkdir -p ${dir}
- printf "Starting MR \n"
- script
- elif [ "$1" = "-f" ];then
- ipfile="$2"
- line=$(wc -l ${ipfile} | awk '{print $1}')
- mkdir -p ${dir}
- printf "Starting MR \n"
- script
- elif [ "$1" = "stop" ];then
- printf "Stop MR \n"
- pkill mr
- elif [ "$1" = "start" ];then
- printf "Starting MR for default settings! \n You can input [-h] or [--help] for more settings!\n"
- line=$(wc -l ${ipfile} | awk '{print $1}')
- mkdir -p ${dir}
- script
- elif [ "$1" = "-i" ] && [ "$2" = "-f" ];then
- # printf "Starting MR for default settings! \n You can input [-h] or [--help] for more settings!\n"
- filepath="$3"
- insertsite 2> /dev/null
- elif [ ${ip1} -le 255 -a ${ip1} -gt 0 ] && [ ${ip2} -le 255 -a ${ip2} -ge 0 ] && [ ${ip3} -le 255 -a ${ip3} -ge 0 ] && [ ${ip4} -le 255 -a ${ip4} -ge 0 ];then
- ip138 $1
- elif [ "$1" = "" ];then
- printf "Starting MR for default settings! \n You can input [-h] or [--help] for more settings!\n"
- line=$(wc -l ${ipfile} | awk '{print $1}')
- mkdir -p ${dir}
- script
- else
- echo -e "Please check input! \n You can input [-h] or [--help] for help!\nSubmit BUG for YJ: wyyj12@163.com"
- fi
转载于:https://blog.51cto.com/ianblog/824076