接続の決定に使用しないことを強くお勧めしping
ます。ネットワークから発信されるpingフラッド攻撃の心配のために、ICMP(使用するプロトコル)を無効にするネットワーク管理者が多すぎます。
代わりに、開いていると予想されるポートで信頼できるサーバーのクイックテストを使用します。
if nc -zw1 google.com 443; then
echo "we have connectivity"
fi
この用途のnetcatを(nc
その中に)ポートスキャンモードでは、迅速なポークは(-z
ある[スキャニングに使用】ゼロI / Oモードクイックタイムアウト(と)-w 1
を待つ最大で1秒)。ポート443(HTTPS)でGoogleをチェックします。
任意のホストのポート80(HTTP)で応答できるキャプティブポータルと透過プロキシから保護するために、HTTPではなくHTTPSを使用しました。証明書の不一致があるため、これはポート443を使用する場合はあまりありませんが、それでも発生します。
それに対して自分自身を証明したい場合は、接続のセキュリティを検証する必要があります。
test=google.com
if nc -zw1 $test 443 && echo |openssl s_client -connect $test:443 2>&1 |awk '
handshake && $1 == "Verification" { if ($2=="OK") exit; exit 1 }
$1 $2 == "SSLhandshake" { handshake = 1 }'
then
echo "we have connectivity"
fi
これは(opensslがタイムアウトするのを待つのではなく)接続をチェックし、SSLハンドシェイクを行い、検証フェーズにキーイングします。検証が「OK」であるか、エラー(「false」)で終了した場合は、サイレントに終了(「true」)し、検出結果を報告します。
$ ethtool <dev> | awk '$0 ~ /link detected/{print $3}'