インターネットにアクセスできるかどうかテストしたいです。マイコンピュータが住宅用インターネット接続に接続されています。私はping
これを次のように使用したいと思います:
ping -q -w 1 -c 1 `ip r | grep default | cut -d ' ' -f 3` > /dev/null && echo ok || echo error
しかし、これはうまくいきません!
私が言ったように、接続は寮で提供されています(実際には大学接続を渡すだけです)。インターネットにアクセスするには〜しなければならないインターネットアクセスを許可する前にユーザー名とパスワードを入力する必要があるWebブラウザを開きます。 (私はネットワーク構成などについてよく知らず、とにかくどのように設定されたのかを知る権限がないため、これに関する詳細情報を提供できません。)
上記のコードは、実際にインターネットにアクセスできない場合でも「ok」を印刷します。テストが失敗してもwww.google.com
。私はこれがログインページにリダイレクトされ、パケットを正しく再受信していると思うからだと思います。
インターネットにアクセスできることをどのように確実に確認できますか?
いくつかの背景
ssh
週末に家に帰り、私の部屋のコンピュータに接続したいです。時々接続が失敗するので、時々接続をチェックし、最終的にWebブラウザを実行し、xdotool
ログインに使用されるキーストロークを送信するスクリプトを作成したいと思います。リモートアクセスを許可するために接続を再開するより良い方法がわかっている場合は、ssh
その方法も書き留めてください。
修正する:
いくつかの出力例nslookup
:
$ nslookup unix.stackexchange.com
Server: 127.0.1.1
Address: 127.0.1.1#53
Non-authoritative answer:
Name: unix.stackexchange.com
Address: 69.59.197.21
結果は、インターネットにアクセスするかどうかにかかわらず同じです。 (私は何度もログアウトしてから再度ログインして接続し、切断しようとしました。)
ssh
また、これは接続終了ではないことを付け加えたいと思います。しばらくして、接続を作成し、タスクを実行し、ログアウトできました。数時間試した後、タイムアウトエラーが発生しましたssh the-IP
(実際にはIPが動的であるため、IPなしのアカウントに参加しましたssh mydomain.no-ip.org
)。
答え1
あなたは命令に致命的な間違いを犯しました。
ping -q -w 1 -c 1 `ip r | grep default | cut -d ' ' -f 3` > /dev/null && echo ok || echo error
このコマンドはip r | grep default | cut -d ' ' -f 3
デフォルトゲートウェイを返します。したがって、ping
Googleを確認するのではなく、接続されているルーターを確認してください。ルータはコマンド全体を真にするパケットを送り返します。これが常に「ok」を返す理由です。インターネット接続をまったく確認しません。しかし、明るい面を見てください。 LANに接続されていることを確認してください。
とにかくおそらくping -q -w 1 -c 1 google.com > /dev/null && echo ok || echo error
。ip r | grep default | cut -d ' ' -f 3
答え2
このようなプログラムが必要だと思います。自動無線ネットワーク。
答え3
もしそうなら?
if [[ $(ping -c1 -w1 google.com) ]]
then
echo "All good in the hood"
else
echo "Where are my interwebs?"
fi
またはラインで
if [[ $(ping -c1 -w1 google.com) ]]; then echo "All good in the hood"; else; echo "Where are my interwebs?"; fi
答え4
私が要求したアクションを実行する唯一の方法は、ランダムなWebページをダウンロードして、コンテンツがログインページと一致することを確認することです。
たとえば、次のようになります。
$ wget www.google.com
インターネットにアクセスできる場合は、GoogleページのHTMLコンテンツがダウンロードされ、次のコンテンツのみが含まれます。
<!--
**
** ZEROSHELL Captive Portal Login Page
**
** (Native Interface)
**
-->
<html>
<head>
<title>Web Login</title>
...
</html>
ログインページにリダイレクトされている場合は、よりエレガントなソリューションを探したいのですが、これは私が望むものをよく検出するようです。