インターネットへの接続判定
Testing the Internet connectivity
目的
インターネットに接続している時だけ通信をしたい。
インターネットへの接続状態を表示したい。
問題
そもそもインターネットとは、小規模ネットワークの相互接続でできた世界規模ネットワークであり、特定の実態を持っていない。
ネットワークが部分的にしか接続できていなくても、ネットワーク外のホストに接続する以外でそれを判定する手段はない。
インターネットに接続できているかどうかを判定するための公的な接続先はない。
DNSのルートサーバーは公的な接続先だが、接続確認のために高頻度でアクセスすることは想定されていない。
Public NTP は公的な接続先だが、接続確認のために高頻度でアクセスすることは想定されていない。
DNS から偽装されている場合には、正しい接続先に接続されている保証がない。
ただし、TLS 証明書は信頼チェーンがあるため、DNS が偽装されていても安全。(ルート証明書は偽装不可能)
確認すべきものがいくつかある
いわゆるダイヤルアップ接続が接続されているかどうか
いわゆるネットワークインターフェイスが有効になっているかどうか
デフォルトゲートウェイに通じるインターフェースが有効になっているか
目的のホストに対する DNS が引けるかどうか
目的のホストに到達できるか
Google Chrome のネットワークの認識方法
Windows のネットワークの認識方法
ネットワークロケーション認識 (NLA) サービス
Network Location Awareness
ネットワーク接続状態インジケーター (NCSI)
Network Connectivity Status Indicator
HTTPの接続性の確認
Windows Vista 以降、Windows 10 1607 以前
www.msftncsi.com (IPv6の場合は ipv6.msftncsi.com) の HTTP GET ncsi.txt で、"Microsoft NCSI" という文字列が返されること。
Windows 10 1607 以後
以下の URL に対する HTTP GET で "Microsoft Connect Test" という文字列が返されること。
DNS の接続性の確認
dns.msftncsi.com の DNS 問い合わせ結果が 131.107.255.255 であること
Apple
Firefox
参考
.NET Framework (Windows)
Android