在学习ping命令的时候,突发奇想:为何不使用ping命令对网络连接故障进行排查?
具体思路:
1. ping 127.0.0.1 (虚拟网卡地址)以检查主机的TCP/IP协议栈是否正常。
2. ping [网络号] 以广播的形式向局域网发送数据包,检查主机网卡、modem、路由器(网关)是否正常。
3. nslookup www.baidu.com 检查DNS服务是否正常。
4. ping www.58.com 查看能否连网。
以下是shell代码内容(含解析):
1 #4 times,time out = 10 s; 2 ping -c 4 -w 10 127.0.0.1 #-c表示发送数据包次数(4次),-w表示超时时间(10s),127.0.0.1表示虚拟网卡地址(回环地址) 3 if [ "$?" != 0 ];then #如果回环测试不成功成功,变量 $s 为0表示上一个指令执行成功。这里注意[]内的三个组件之间要有空格,变量要用""。 4 echo "ping fail! TCP/IP Stack is not ready!\a\n" #回环测试失败,说明TCP/IP协议栈有问题 5 exit 0 #退出脚本执行 6 else 7 echo "TCP/IP is ok !\a\n" #回环测试成功,说明TCP/IP协议栈没问题 8 read -p "please input your network numbers: " addr #提示用户输入网络号(路由器的IP),用addr变量接收 9 ping -c 4 -w 10 -b $addr #ping 以广播形式(-b选项)向局域网广播 10 if [ "$?" != "0" ];then #广播失败,说明主机网卡、modem或者路由器出现问题 11 echo "ping fail! The Router is not ready!\a\n" #打印错误信息 12 exit 0 #退出脚本执行 13 else 14 echo "Router is ok !\a\n" #广播成功 15 nslookup www.baidu.com #使用nslookup命令测试DNS服务是否正常 16 if [ "$?" != "0" ];then 17 echo "nslookup fail !The DNS Server is not ready !\a\n" #打印DNS寻址失败,DNS服务异常信息 18 exit 0 #退出 19 else 20 echo "The DNS Server is ok !\a\n" #DNS服务正常 21 ping -c 4 -w 10 www.58.com #最后检查能否上网 22 if [ "$?" != "0" ];then 23 echo "Other questions ....\a\n" #如果这里失败,可能是www.58.com设置了防火墙,ping数据包不回复 24 exit 0 25 else 26 echo "the net is ok" #网络正常 27 exit 0 #退出 28 fi 29 fi 30 fi 31 fi
以下是脚本运行结果:
当我断开网络连接时,显示DNS服务异常:
使用ping网络工具编写Shell脚本程序实现网络连接故障初步排查
原文:https://www.cnblogs.com/xhgblog/p/11929722.html