web-dev-qa-db-ja.com

コンソールでインターネット接続を確認するにはどうすればよいですか?

コンソールからインターネット接続を確認する簡単な方法はありますか?シェルスクリプトで遊んでいます。インターネット接続が正常に機能しているかどうかを解釈するには、wget --spider http://www.google.co.in/とHTTP応答コードを確認することです。しかし、クラッシュしないサイトをチェックする必要がない簡単な方法があるはずだと思います;)

編集:個別に調査できる多くの要因があるように思えますが、良いことです。現時点での私の意図は、ブログがダウンしているかどうかを確認することです。毎分チェックするために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を使用していないので)少し重いですが、誤検出はありません。右?また、facebook、google、yahooなどのように、毎回異なるサイトへのpingをランダム化する方法もあります。その後、サイトが停止するか、より長いチェックが発生するまで(毎分ではなく10分)、さらにチェックをスキップします。どう思いますか?

30
Ashfame

特定のWebサイトが稼働しているかどうかを確認する

まず、複数の優れたオンライン監視サービスが利用可能です。 1つを選択するために、Pingdomには1つのターゲットを監視するための無料アカウントが含まれています。 (免責事項:私はnot 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サーバーが正常に機能していても、エラーが返されます。

インターネットが機能しているかどうかを確認する

あらゆる場合にこれを処理する簡単な方法はありません。

たとえば、よく知られている複数のサイト(www.google.com、facebook.com、ping.funet.fiなど)でping -c1を実行し、リターンコードをチェックして、到達可能な宛先があるかどうかを判断できます。変数$?を使用して、戻りコードを自動的に確認できます。パラメーター-c1は、pingパケットの数を1つに制限しています。

すべてのpingおよびHTTP要求をリダイレクトするログインゲートウェイがある場合、一部のパブリックwifiで問題が発生する可能性があります。その場合、他のサイトにアクセスできない場合でも、ping応答とエラー以外のHTTPステータスコードを受け取ることがあります。

ケーブルの状態を確認する場合は、次を使用できます。

Sudo ethtool eth0

出力から(抜粋):

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

ただし、これは実際に接続があるかどうかではなく、ケーブルが接続されており、somethingがもう一方の端にあるかどうかだけを示しています。

29
Olli

使ったばかり

nm-online

ネットワーク管理者がネットワーク接続を確立するまで一時停止します。うまくいった。他のこともできます。

7
ntsecrets

私はこの方法を使用しています...

 if [["$(ping -c 1 8.8.8.8 | grep '100%packet loss')"!= ""]]; then 
 echo "インターネットが存在しません" 
 exit 1 
 else 
 echo "インターネットが存在します" 
 wget www.site.com 
 fi 
7
bais bais

通常、サイトが稼働しているかどうかの確認は、nagiosなどの監視ツールを使用して行われます。これにより、サイトが継続的に監視され、停止が通知されます。

コマンドラインからインターネットが起動しているかどうかを確認するとき、いくつかの手順を実行します。

  • インターネットが稼働していることを確認しますping google.com(DNSと既知の到達可能なサイトを確認します)。
  • Webサイトが稼働していることを確認するには、wgetまたはw3mを使用してページを取得します。

インターネットが稼働していない場合は、外側を診断します。

  • ゲートウェイがping可能であることを確認してください。 (ゲートウェイアドレスのifconfigを確認します。)
  • DNSサーバーがping可能であることを確認してください。 (アドレスについては/etc/resolv.confを確認してください。)
  • ファイアウォールがブロックしているかどうかを確認します。 (ブロックを記録するときに/ var/log/syslogを確認してください。)

インターネットが稼働しているがサイトがダウンしている場合は、w3m http://isup.me/example.comexample.comをダウンしているサイトに置き換えて確認してください。 wget、lynx、またはw3mブラウザーがインストールされていない場合に使用可能なコマンドラインブラウザーを使用します。

5
BillThor

これは、インターネット接続のテストに使用しているシェルsrcriptです。

alarm.sh

#! /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

可聴アラーム機能が必要な場合は、同じフォルダ内でalarm.mp3に名前を変更した.mp3サウンドファイルが必要です。最後に、必要に応じてWebサイトのURLとegrepを構成します。

4
01BTC10

インターネットが機能しているかどうかを確認する

Sudo nm-tool | grep "State: connected" | wc -l

出力から(抜粋):

1 #System is connected to internet

ただし、他の人が述べたように、これは本当に接続性があるかどうかを伝えるものではありません。例えば。ルーターに接続でき、ルーターは必ずしもインターネットに接続されているとは限りません。

2
Venkat Kotra

私はこの方法を使用しています:

if curl -s --head  --request GET www.google.com | grep "200 OK" > /dev/null ; then
    echo "Internet is present"
else
    echo "Internet isn't present"
fi

有名なWebサイトに接続しようとします。接続できる場合は、インターネットがあると想定します。

1

私は、インターネット接続を継続的にテストするスクリプトを探していました。これは、サーバーが起動するたびに開始され、これを作成しました。

  1. まず、fpingをインストールします

    apt-get install fping
    
  2. /etc/init.dフォルダーに次の内容のinitスクリプトを作成します(testconと呼びます)。

    #!/bin/bash
    
    PIDFILE=/var/run/testcon.pid
    
    . /lib/lsb/init-functions
    
    case "$1" in
      start)
            log_daemon_msg "Starting internet connection tester"
            /etc/init.d/testcond &
            echo $! > $PIDFILE
            log_end_msg $?
        ;;
      stop)
            log_daemon_msg "Stopping internet connection tester"
            PID=$(cat $PIDFILE)
            kill -9 "$PID"
            log_end_msg $?
        ;;
      *)
        echo "Usage: /etc/init.d/testcon {start|stop}"
        exit 1
        ;;
    esac
    
    exit 0
    
  3. /etc/init.dフォルダーに次の内容のスクリプトを作成します(testcondと呼びます)。

    #echo Computer starting or testing daemon init
    while [ "$itest" == "" ] 
    do
        #wait 5 seconds 
        sleep 5
        itest=$(fping 8.8.8.8 | grep alive)
    done
    date | mail -s "Server is up and Internet is online" [email protected]
    
    #loop forever
    while [ "1" == "1" ] 
    do
        itest=$(fping 8.8.8.8 | grep alive)
        #if internet is down
        if [ "$itest" == "" ] 
        then
            #echo Internet is down
            #log time it was found down
            current_time=$(date)
            echo "Internet was found down @ $current_time" >> /mnt/data/Server/internet_log.txt
            #loop until it is back
            while [ "$itest" == "" ] 
            do
                #wait 60 seconds 
                sleep 60
                itest=$(fping 8.8.8.8 | grep alive) # test the internet
            done
            #when it is back
            current_time=$(date)
            echo "Internet is back        @ $current_time" >> /mnt/data/Server/internet_log.txt
            body=$(tail -2 /mnt/data/Server/internet_log.txt)
            echo "$body" | mail -s "Internet is back online" [email protected]
        fi
        #echo Internet is online
        #wait 60 seconds
        sleep 60
            done
    
  4. 次に、以下のコマンドを実行して、スタートアップに追加します。

    Sudo update-rc.d testcon defaults
    Sudo update-rc.d testcon enable
    
  5. リブート

0
Rafael

私は同じ質問で助けが必要でした、そして、私はこの方法で私の答えを得ました:

echo $(nm-online) $? connection problems
0
octius4u

インターネットが機能しているかどうかを確認することはそれほど簡単ではありません。 pingはICMPであるため、Webプロキシがダウンしていても機能する場合があります。 IPでテストすると、DNSでも同様のことが起こります。

私のインターネット接続は不安定なので、私はこのスクリプトを作成しました( これに基づいて )優しいコード音で私を呼び出し、またインターネット接続が戻ったときにUbuntu通知を使用します:

#!/bin/bash

hash play 2>&- || { echo >&2 "I require «play» but it's not installed. Try apt-get install sox. Aborting."; exit 1; }

WGET="`which wget`"
URL="http://www.google.com"
delay=3;
noConnectionMessage="No connection, trying again in $delay seconds...";
connectionMessage="WE HAVE INTERNET! :) Trying again in $delay seconds...";

echo "INTERNET TESTER: Type Ctrl+C to quit";
rm --force /tmp/index.site

function playSound {
    time=1;    # Time played
    if [ `sox --version| grep -oP "v[0-9.]+" | sed "s/[v.]//g"` -lt 1431 ]; then    #analize sox version, if greater than v14.3.1 can use pluck
        play -q -n synth $time sine;
    else
        play -q -n synth $time pluck $1;
        #for i in G4 G4 G4 E4;do play -n synth 0.1 pluck $i repeat 2;done    # You can play with something like this also :) (first three notes from Beethoven 5th symphony)
    fi
}

while [ 1 -eq 1 ]; do
    $WGET -q --tries=10 --timeout=2 $URL -O /tmp/index.site &> /dev/null
    if [ ! -s /tmp/index.site ];then
        echo $noConnectionMessage;
        #playSound E2
        sleep 1;
    else
        #~ zenity --warning --text "ADDRESS is back"
        notify-send -i "notification-network-wireless-full" "Connection state:" "$connectionMessage";
        echo $connectionMessage;
        playSound E3
    fi
    sleep $delay;
done

exit 0;
0
pabloab

Broadcom BCM94331CDチップによるWi-Fi接続のランダムなドロップに直面しました。インターネットWi-Fi接続が稼働中であるかどうかを毎秒チェックする次のbashスクリプト(無限ループ)を考案しました。ここで提案されている他のコマンドラインは、少なくとも5〜10秒待ってから、ステータス[ping]で閉じます。それまでの間、私は最終的な解決策も探しています。

Askubuntuの結果から、bcmwl-kernel-sourceおよびfirmware-b43-installerを使用するときに、b43-fwcutterパッケージを削除する必要があります。

提案をありがとう(上記)。

このスクリプトは、スタートアッププログラムに追加する必要があり、super user特権も実行する必要はありません。

#!/bin/bash
#

# Check if Wi-Fi is disabled e.g. 'out of range'
# If so quickly re-enable Wi-Fi
# Due to a problem with Broadcom proprietary driver in package firmware-b43-installer

# Script is part of Start-Up programs
# Stored in /usr/local/bin/
# Infinite loop checking every second if Wi-Fi is up and running

while true; do
  # https://askubuntu.com/questions/27954/how-can-i-check-internet-connectivity-in-a-console
  if [[ $(nmcli -f STATE -t g) != 'connected' ]]; then
    # Disable and Re-Enable Wi-Fi as the Wi-Fi is now 'out of range' (disconnected)
    nmcli radio wifi off
    nmcli radio wifi on
  fi
  sleep 1
done
0
Antonio