创建 bash/shell 脚本以捕获 Traceroute 命令的输出

创建 bash/shell 脚本以捕获 Traceroute 命令的输出

我一直在准备一个脚本,它可以帮助使用traceroute 命令监控WAN 链接。

  • 用于从跟踪路由中 grep 主 WAN IP 的脚本,如果找到则回显主节点已启动。
  • 如果未找到主 IP,则在跟踪路由中 grep 辅助 IP 并 echo Primary down, secondary UP。
  • 如果两个 IP 均未找到,则 echo PRimary 和 secondary 均已关闭

我准备了类似的东西,但无法使其发挥作用。

 echo "`traceroute  4.4.4.4>/tmp/trace.txt`"
 grep  “1.1.1.1” /tmp/trace.txt &> /dev/null
 if [ $? -eq 0 ] ; then
     echo  “Primary Is UP“
 else
 grep  “2.2.2.2” /tmp/trace.txt &> /dev/null
 if [ $? -eq 0 ] ; then
     echo “ Primary failed, Secondary Running”
else
     echo "Primary & Secondary both failed"
 fi
 fi

答案1

为了快速测试,如果不需要,请不要使用traceroute。请尝试使用记录路由 (-R) 选项进行 ping 操作。使用 -c 选项仅发出一个请求,使用 -n 选项不解析路由主机名,使用 -W 选项不等待太长时间失败。也许是这样的:

if ping -R -n -c1 -W2 4.4.4.4 >/tmp/trace.txt
then
    #echo something is up
    if grep -q '\<1\.1\.1\.1\>' /tmp/trace.txt
    then
        echo  Primary Is UP
    elif grep -q '\<2\.2\.2\.2\>' /tmp/trace.txt
    then
        echo  Primary failed, Secondary Running
    else
        echo "Primary & Secondary both failed, but something else Running"
    fi
else
    echo "Primary & Secondary both failed"
fi

您可能需要说服一台或多台路由器遵守记录路由。

答案2

删除echo脚本第一行中的引号,只需保留命令traceroute。你的脚本应该写成:

traceroute .... 
grep .....
...

相关内容