如何在控制台中检查 Internet 连接?

Ash*_*ame 40 command-line networking internet

是否有一种简单的方法可以从控制台检查 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
Run Code Online (Sandbox Code Playgroud)

这样我只需要在我的博客响应代码有问题的地方检查互联网连接。它有点重(因为我没有使用 ping)但不应该给出任何误报。对?另外,我如何每次都随机 ping 到不同的站点,例如 facebook、google、yahoo 等。 另外(我试图避免任何 I/O)我可以写入一个日志文件,通过它我可以检查停机检查的计数和然后跳过进一步的检查,直到站点关闭或导致更长的检查(10 分钟而不是每分钟)。你怎么认为?

Oll*_*lli 36

检查特定网站是否已启动

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

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

wget --spider --quiet http://example.com
if [ "$?" != 0 ]; then
  echo "Website failed!" | mail -s "Website down" your_email@provider.tld
fi
Run Code Online (Sandbox Code Playgroud)

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

检查互联网是否正常工作

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

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

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

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

sudo ethtool eth0
Run Code Online (Sandbox Code Playgroud)

从输出(摘录):

Speed: 1000Mb/s
Duplex: Full
Port: Twisted Pair
Link detected: yes
Run Code Online (Sandbox Code Playgroud)

但是,这并不能说明您是否真的有连接,只是说明是否已连接电缆以及另一端是否有东西

  • ping 更快,更好,因为另一端不会为你生气。ping 是相当安全的,但即使如此也不能保证您可以打开网页。此外,*可能*防火墙阻止 ping 但允许 HTTP 请求。 (3认同)

小智 10

我刚用

nm-online
Run Code Online (Sandbox Code Playgroud)

暂停,直到网络管理器存在网络连接。工作得很好。你也可以用它做其他事情。


小智 9

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

if [[ "$(ping -c 1 8.8.8.8 | grep '100% 丢包')" != "" ]]; 然后
    echo "互联网不存在"
    出口 1
别的
    echo "Internet is present"
    wget www.site.com
菲

  • 请注意,这将在中国和其他阻止 Google 的国家/地区失败 (4认同)

Bil*_*hor 7

检查站点是否正常运行通常是使用nagios. 这将持续监控站点,并可以通知您中断。

从命令行检查 Internet 是否已启动时,我执行了以下几个步骤:

  • 检查 Internet 是否已启动ping google.com(检查 DNS 和已知的可访问站点)。
  • 检查网站是否正在使用wgetw3m获取页面。

如果上网不起来,向外诊断。

  • 检查网关是否可以 ping 通。(检查网关地址的 ifconfig。)
  • 检查 DNS 服务器是否可以 ping 通。(检查 /etc/resolv.conf 以获取地址。)
  • 检查防火墙是否阻止。(在我记录块时检查 /var/log/syslog。)

如果 Internet 已启动但站点已关闭,请检查w3m http://isup.me/example.com替换example.com为出现故障的站点。如果您没有安装 w3m 浏览器,请使用 wget、lynx 或任何可用的命令行浏览器。