如何在linux中使用bash脚本检查Internet访问?

Lib*_*Wen 17 linux bash ping wifi

在我的学校,互联网不可用(每天晚上23:0学校将杀死互联网,让我们躺在床上.. ..),然后ping将永远不会停止,虽然我已经使用了参数ping -w1 ....

也就是说,当我使用:ping -q -w1 -c1 8.8.8.8检查互联网是否上/下时,它将在那里没有任何输出并且不会退出,就像我使用单个cat.

你能理解我的问题吗?我不知道为什么会这样,但我认为问题与学校互联网服务有关.有什么建议吗?(我认为wget可能是一个很好的选择,但如何使用?)

Atr*_*opo 37

使用wget:

#!/bin/bash

wget -q --tries=10 --timeout=20 --spider http://google.com
if [[ $? -eq 0 ]]; then
        echo "Online"
else
        echo "Offline"
fi
Run Code Online (Sandbox Code Playgroud)

  • 就个人而言,我通过使这个`wget -q --tries = 10 --timeout = 20 -O - http://google.com>/dev/null`来增强这种模式.抛弃了输出,这意味着文件不会留下来,并且写入权限没有任何问题. (10认同)
  • 你真的应该使用`--spider`选项,因为它会发送一个http`HEAD`请求而不是一个http`GET`请求.现在,在这种情况下,你正在检查google.com,这是一个非常轻量级的页面,所以它可能是好的.但作为一般规则,你应该使用`HEAD`请求,如果你只是想检查某些东西是否可用而没有实际*下载*它.我已经相应地添加了答案. (5认同)

小智 15

如果学校实际上关闭了他们的路由器,而不是将所有流量重定向到"为什么你不在床上"页面,那么就没有必要下载整个网页或发送HTTP标头.您所要做的就是建立联系并检查是否有人正在倾听.

nc -z 8.8.8.8 53
Run Code Online (Sandbox Code Playgroud)

这将输出"连接到8.8.8.8端口53 [tcp/domain]成功!" 如果有人在听,则返回值0.

如果要在shell脚本中使用它:

nc -z 8.8.8.8 53  >/dev/null 2>&1
online=$?
if [ $online -eq 0 ]; then
    echo "Online"
else
    echo "Offline"
fi
Run Code Online (Sandbox Code Playgroud)

  • 在这里使用超时可能会很好 nc -z -w 5 8.8.8.8 53 >/dev/null 2>&1 (2认同)

小智 6

使用:

#!/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;
Run Code Online (Sandbox Code Playgroud)

输出将产生类似以下内容:

./internet_check.sh

UP   2016-05-10T23:23:06BST 4
DOWN 2016-05-10T23:23:25BST 19
UP   2016-05-10T23:23:32BST 7
Run Code Online (Sandbox Code Playgroud)

行尾的数字显示前一个状态的持续时间,即向上 19 秒,向下 7 秒。