如何在控制台中检查互联网连接?

如何在控制台中检查互联网连接?

有没有一种简单的方法可以从控制台检查 Internet 连接?我正在尝试使用 shell 脚本。我似乎有一个想法是检查 HTTP 响应代码以解释 Internet 连接是否正常工作。但我认为一定有一种简单的方法,而不需要检查一个从不崩溃的网站 ;)wget --spider http://www.google.co.in/

编辑:似乎有很多因素可以单独检查,这是好事。我目前的目的是检查我的博客是否已关闭。我已经设置了 cron 来每分钟检查一次。为此,我正在检查 wget --spider 对我的博客的 HTTP 响应代码。如果不是 200,它会通知我(我相信这比直接 ping 它要好,因为该网站可能负载过重,可能会超时或响应很晚)。昨天,我的互联网出现了一些问题。LAN 连接正常,但我无法访问任何网站。因此,我不断收到通知,因为脚本在 wget 响应中找不到 200。现在我想确保当我有互联网连接时它会向我显示通知。

因此,检查 DNS 和 LAN 连接对我来说有点过头了,因为我没有那么多具体的需求来找出问题所在。那么你建议我怎么做呢?

以下是我用来持续检查博客停机时间的脚本:

#!/bin/bash

# Sending the output of the wget in a variable and not what wget fetches
RESULT=`wget --spider http://blog.ashfame.com 2>&1`
FLAG=0

# Traverse the string considering it as an array of words
for x in $RESULT; do
    if [ "$x" = '200' ]; then
        FLAG=1 # This means all good
    fi
done

if [ $FLAG -eq '0' ]; then
    # A good point is to check if the internet is working or not
        # Check if we have internet connectivity by some other site
        RESULT=`wget --spider http://www.facebook.com 2>&1`
        for x in $RESULT; do
            if [ "$x" = '200' ]; then
                FLAG=1 # This means we do have internet connectivity and the blog is actually down
            fi
        done

    if [ $FLAG -eq '1' ]; then
        DISPLAY=:0 notify-send -t 2000 -i /home/ashfame/Dropbox/Ubuntu/icons/network-idle.png "Downtime Alert!" "http://blog.ashfame.com/ is down."         
    fi  
fi

exit

这样,我只需要在我的博客响应代码出现问题时检查互联网连接。这有点繁重(因为我没有使用 ping),但应该不会产生任何误报。对吗?此外,我如何才能每次随机 ping 到不同的网站,如 facebook、google、yahoo 等。此外(我试图避免任何 I/O)我可以写入日志文件,通过它我可以检查停机检查的次数,然后跳过进一步的检查,直到网站停机或进行更长时间的检查(10 分钟而不是每分钟)。你怎么看?

答案1

检查特定网站是否正常运行

首先,有多种良好的在线监控服务可供选择。Pingdom 提供免费帐户,用于监控一个目标。(免责声明:我是不是与 Pingdom 有任何关联)。

其次,使用wget --spider您自己的脚本是个好主意。当您的计算机关闭或 DNS 服务器不工作时,您会得到一些误报。检查返回代码是实现此目的的直接方法:

wget --spider --quiet http://example.com
if [ "$?" != 0 ]; then
  echo "Website failed!" | mail -s "Website down" [email protected]
fi

然而,这种方法也有缺点。如果您的提供商缓存了您的 DNS 记录,但 DNS 服务器已关闭,其他人将无法访问您的网站,即使监控显示一切正常。您可以使用 编写简短的解决方法host,例如host example.com <your dns server IP>。如果 DNS 服务器没有响应,即使 OpenDNS 或您自己的提供商的 DNS 服务器工作正常,它也会返回错误。

检查互联网是否正常工作

在每种情况下,并没有简单的方法来处理这个问题。

例如,您可以ping -c1在多个知名网站(例如 www.google.com、facebook.com 和 ping.funet.fi)上运行并检查返回代码以确定是否可以到达任何目的地。您可以使用变量自动检查返回代码$?。参数-c1将 ping 数据包的数量限制为一个。

当登录网关重定向所有 ping 和 HTTP 请求时,您可能会遇到一些公共 wifi 问题。如果是这样,即使您无法访问任何其他网站,您也可能会收到 ping 响应和非错误 HTTP 状态代码。

如果你想检查电缆状态,你可以使用

sudo ethtool eth0

从输出(摘录):

Speed: 1000Mb/s
Duplex: Full
Port: Twisted Pair
Link detected: yes

但是,这并不能说明您是否真的有连接,只是电缆是否已连接,某物在另一端。

答案2

我刚刚用

nm-online

它会暂停,直到网络管理器显示网络连接。效果很好。你也可以用它做其他事情。

答案3

我正在使用这个方法...

如果 [[ "$(ping -c 1 8.8.8.8 | grep '100% 数据包丢失' )" != "" ]]; 然后
    echo“互联网不存在”
    出口 1
别的
    echo“互联网存在”
    wget www.site.com

答案4

这是我用来测试互联网连接的 shell 脚本:

报警器

#! /bin/bash

if curl --silent --head http://www.google.com/ |
    egrep "20[0-9] Found|30[0-9] Found" >/dev/null
then
    echo Internet status: OK
else
    echo Internet status: ERROR
    mpg321 alarm.mp3 &> /dev/null
fi
sleep 60
clear

./alarm.sh

您需要安装 curl 和 mpg321

sudo apt-get install curl mpg321

如果您想要声音警报功能,则需要在同一文件夹中将 .mp3 声音文件重命名为 alarm.mp3。最后根据您的需要配置网站 URL 和 egrep。

相关内容