Skip to content

Instantly share code, notes, and snippets.

@LuckyKoala
Created March 31, 2018 09:16
Show Gist options
  • Save LuckyKoala/fa83b6b23fd306b7db4d80affc6cd753 to your computer and use it in GitHub Desktop.
Save LuckyKoala/fa83b6b23fd306b7db4d80affc6cd753 to your computer and use it in GitHub Desktop.
简单的网络检查脚本,来源[GitHub](https://github.com/funet8/shell/blob/master/check_internet.sh)
#!/bin/bash
# 来源 [GitHub](https://github.com/funet8/shell/blob/master/check_internet.sh)
#网络检查的脚本,当你不能上公网时,则直接执行这个脚本
# 部分注释由iwar添加
#输入网卡和局域网路由器IP
read -p "请输入您公网网卡名称:(如:eth0)" ethx
read -p "请输入您的局域网路由器IP:(如:192.168.1.1)" netip
ping -c 4 www.baidu.com > /dev/null 2>&1
# 检查ping的返回值,为0则说明ping通,可以认为与公网是连通的
if [ $? -eq 0 ];then
echo "可以上公网"
exit 0
else
echo "Ping不通www.baidu.com,开始检查网络配置"
fi
# mii-tool 命令查看制定网卡的信息
# cut 则分割字符串,这里通过-d " "指定了分隔符为空格 -f2表示选中分割后第二项内容
linkstatus=`mii-tool $ethx |cut -d" " -f2`
if [ $linkstatus = negotiated ];then
echo "您的网卡插好。"
else
echo "请检查网线是否插好"
exit 1
fi
# ping 之前设置的局域网路由器ip来检查当前主机的ip是否有问题
ping -c 3 $netip > /dev/null 2>&1
if [ $? -eq 0 ];then
echo "ipOK"
else
echo "IP有问题"
exit 2
fi
# 分割字符串,得到Bcast后的ip地址
ip=`ifconfig $ethx |grep Bcast |cut -d":" -f2 |cut -d" " -f1`
ipduan=`echo $netip |cut -d"." -f1,2`
# Bcast即是广播地址,可由ip|~Mask计算得来,这里只是简单的比较两地址的前16位
# grep工具可以匹配特定模式
echo $ip |grep $ipduan &> /dev/null
if [ $? -eq 0 ];then
echo "IP配置正常,路由器在一个网段!"
else
echo "IP配置不在局域网内的网段中"
fi
# route命令查看路由信息,-n选项表示不使用符号,而直接显示数字
# ^0.0.0.0 这个模式即是匹配以0.0.0.0开头的字符串
# 这里0.0.0.0作为目的地,含义是默认,所以是查看路由表中是否有默认的网管
route -n |grep ^0.0.0.0 &>/dev/null
if [ $? -eq 0 ];then
echo "有网关"
else
echo "无网关"
exit 3
fi
# tail命令输出末尾的内容,-1则表示只输出最后一行的内容
# 依旧,这里通过处理route命令的输出得到网关地址
gateway=`route -n |tail -1 |cut -d" " -f2`
echo 您的网关为:$gateway
ping -c 4 $gateway > /dev/null 2>&1
if [ $? -eq 0 ];then
echo "能ping通网关地址"
exit 0
else
echo "不能能ping通网关地址,请检查网关配置"
fi
#下面的DNS也可以写其它的外网DNS服务器的IP,这里因为太多,不好判断,所以只判断了114.114.114.114和8.8.8.8或者路由器IP
dns=`cat /etc/resolv.conf |grep ^nameserver |cut -d" " -f2`
echo $dns
if [ $dns = "114.114.114.114" -o $dns = "8.8.8.8" -o $dns = $netip ];then
echo "DNS配置正确"
else
echo "DNS有问题"
exit 5
fi
echo "上面都OK,请找相关网络管理员"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment