首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Linux上使用Bash脚本检查Internet访问?

如何在Linux上使用Bash脚本检查Internet访问?
EN

Stack Overflow用户
提问于 2013-06-25 15:10:20
回答 8查看 72.2K关注 0票数 19

在我的学校,互联网是不可用的(每天晚上23点以后,学校会切断互联网连接,让我们上床睡觉>..<),然后ping永远不会停止,尽管我使用了参数ping -w1 ...

也就是说,当我使用:ping -q -w1 -c1 8.8.8.8检查互联网连接是否打开/关闭时,它将在那里,没有任何输出,也不退出,就像我使用单个cat一样。

我不知道为什么会这样,但我认为问题与学校的互联网服务有关。有什么建议吗?(我认为wget可能是一个很好的替代方案,但是我如何使用它呢?)

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2013-06-25 16:35:06

使用wget:

代码语言:javascript
运行
复制
#!/bin/bash

wget -q --tries=10 --timeout=20 --spider http://google.com
if [[ $? -eq 0 ]]; then
        echo "Online"
else
        echo "Offline"
fi
票数 40
EN

Stack Overflow用户

发布于 2015-07-21 14:51:52

如果学校真的关闭了路由器,而不是将所有流量重定向到“你为什么不在床上”的页面,那么就不需要下载整个网页或发送HTTP报头。你所要做的就是建立一个连接并检查是否有人在监听。

代码语言:javascript
运行
复制
nc -z 8.8.8.8 53

这将输出“连接到8.8.8.8端口53 tcp/域成功!”如果有人在监听,则返回值0。

如果您想在shell脚本中使用它:

代码语言:javascript
运行
复制
nc -z 8.8.8.8 53  >/dev/null 2>&1
online=$?
if [ $online -eq 0 ]; then
    echo "Online"
else
    echo "Offline"
fi
票数 20
EN

Stack Overflow用户

发布于 2016-05-11 05:43:05

使用:

代码语言:javascript
运行
复制
#!/bin/bash

INTERNET_STATUS="UNKNOWN"
TIMESTAMP=`date +%s`
while [ 1 ]
 do
    ping -c 1 -W 0.7 8.8.4.4 > /dev/null 2>&1
    if [ $? -eq 0 ] ; then
        if [ "$INTERNET_STATUS" != "UP" ]; then
            echo "UP   `date +%Y-%m-%dT%H:%M:%S%Z` $((`date +%s`-$TIMESTAMP))";
            INTERNET_STATUS="UP"
        fi
    else
        if [ "$INTERNET_STATUS" = "UP" ]; then
            echo "DOWN `date +%Y-%m-%dT%H:%M:%S%Z` $((`date +%s`-$TIMESTAMP))";
            INTERNET_STATUS="DOWN"
        fi
    fi
    sleep 1
 done;

输出将产生类似如下的结果:

代码语言:javascript
运行
复制
./internet_check.sh

UP   2016-05-10T23:23:06BST 4
DOWN 2016-05-10T23:23:25BST 19
UP   2016-05-10T23:23:32BST 7

行尾的数字表示前一状态的持续时间,即19次上升,7秒下降。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17291233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档