インターネットへの接続判定
Testing the Internet connectivity
目的
インターネットに接続している時だけ通信をしたい。
インターネットへの接続状態を表示したい。
問題
そもそもインターネットとは、小規模ネットワークの相互接続でできた世界規模ネットワークであり、特定の実態を持っていない。
ネットワークが部分的にしか接続できていなくても、ネットワーク外のホストに接続する以外でそれを判定する手段はない。
インターネットに接続できているかどうかを判定するための公的な接続先はない。
DNSのルートサーバーは公的な接続先だが、接続確認のために高頻度でアクセスすることは想定されていない。
Public NTP は公的な接続先だが、接続確認のために高頻度でアクセスすることは想定されていない。
DNS から偽装されている場合には、正しい接続先に接続されている保証がない。
ただし、TLS 証明書は信頼チェーンがあるため、DNS が偽装されていても安全。(ルート証明書は偽装不可能)
確認すべきものがいくつかある
いわゆるダイヤルアップ接続が接続されているかどうか
いわゆるネットワークインターフェイスが有効になっているかどうか
デフォルトゲートウェイに通じるインターフェースが有効になっているか
目的のホストに対する DNS が引けるかどうか
目的のホストに到達できるか
Google Chrome のネットワークの認識方法
http://gstatic.com/generate_204 が 204 No Content を返す
http://connectivitycheck.gstatic.com/generate_204
Windows のネットワークの認識方法
ネットワークロケーション認識 (NLA) サービス
Network Location Awareness
ネットワークロケーション認識サービス プロバイダー (NLA) https://learn.microsoft.com/ja-jp/windows/win32/winsock/network-location-awareness-service-provider-nla--2
ネットワーク接続状態インジケーター (NCSI)
Network Connectivity Status Indicator
NCSI の概要 https://learn.microsoft.com/ja-jp/windows-server/networking/ncsi/ncsi-overview
HTTPの接続性の確認
Windows Vista 以降、Windows 10 1607 以前
www.msftncsi.com (IPv6の場合は ipv6.msftncsi.com) の HTTP GET ncsi.txt で、"Microsoft NCSI" という文字列が返されること。
http://www.msftncsi.com/ncsi.txt
http://ipv6.msftncsi.com/ncsi.txt
Windows 10 1607 以後
以下の URL に対する HTTP GET で "Microsoft Connect Test" という文字列が返されること。
http://www.msftconnecttest.com/connecttest.txt
http://ipv6.msftconnecttest.com/connecttest.txt
DNS の接続性の確認
dns.msftncsi.com の DNS 問い合わせ結果が 131.107.255.255 であること
Apple
http://captive.apple.com/hotspot-detect.html
Firefox
http://detectportal.firefox.com/success.txt
参考
ネットワーク、インターネットに接続しているか調べる https://dobon.net/vb/dotnet/internet/detectinternetconnect.html
.NET Framework (Windows)
接続ステータスの特定と監視 https://developer.android.com/training/monitoring-device-state/connectivity-monitoring?hl=ja
Android
コンピューターが企業ネットワークまたはパブリック ネットワークに接続すると、Internet Explorer または Edge ウィンドウが開く https://support.microsoft.com/ja-jp/help/4494446/an-internet-explorer-or-edge-window-opens-when-your-computer-connects
インターネット接続性チェックが失敗する環境で Outlook 2013/2016 による先進認証が失敗するhttps://social.msdn.microsoft.com/Forums/ja-JP/5cef1013-aec1-492d-a129-15f47e863f0c/12452125311247912540124931248312488255093215424615124811245512?forum=exchangeteamjp
Windowsでネットワークの状況を識別するNetwork Location Awarenessとネットワークプロファイル https://ascii.jp/elem/000/001/734/1734489/
http://www.asnm4.com/2019/08/wifiの接続でインターネット接続なしと表示される/
NCSI の概要 https://learn.microsoft.com/ja-jp/windows-server/networking/ncsi/ncsi-overview
ドメインコントローラーを再起動するとネットワークの場所がドメインではなくプライベートとなってしまう事象の対策 https://www.kaesakura.com/2021/07/domaincontroller-nla-private/