WiFiを利用しているときにタスクトレイのアイコン表示がかわり、インターネット接続なしと表示されることがある。
この状態になるとローカルエリアネットワークにある、例えばプリンターなどにはアクセスできる。しかしインターネット上のブラウザなどができなくなる。
直し方としてはgoogleで調べてみると、WiFiへ接続しなおすなどいろいろ記述されているがそもそもWindowsはどうやってインターネット接続なしと判断しているのだろうか。デフォルトゲートウェイへのアクセスはpingコマンドを裏側で実行すれば判断できる。しかしデフォルトゲートウェイへのアクセス=インターネットへのアクセスではない。
いろいろ調べてみてたところWindowsにおけるインターネット接続の確認はNCSIと呼ばれる機能であることが分かった。NCSIはNetwork Connection Status Indicatorである。
NCSI機能は今から13年前の2006年にWindows Vistaで初めて導入された機能である。13年間利用されている機能ということであればすでに枯れている技術であり、エラーは少ないと考えられる。インターネットアクセスなしと表示される際に不都合がある場合には、NCSIの機能というよりもその他の要素の問題があると考えらえる。
さてNCSIによるインターネット接続性の確認は2通りの動作がある。Windowsのバージョンにより動作が異なるので、まずは自分のOSがどのバージョンであるかを確認する必要がある。
Windows7/Windows8/Window10 1607以前
- http://www.msftncsi.com (ipv6の場合は、ipv6.msfncsi.com)にアクセスして、ncsi.txtを取得する
- dns.msftncsi.comのDNS解決で131.107.255.255が戻ってくる
Window10 1607以降 (1607含む)
- http://www.msftconnecttest.com (ipv6の場合は、ipv6.msftconnecttest.com)にアクセスして、connectest.txtファイルを取得する
- dns.msftncsi.comのDNS解決で131.107.255.255が戻ってくる
さて実際にhttp://www.msftconnecttest.com/connecttest.txtを取得すると以下のような文字列が返ってくる。
ここで問題になるのがタイミングである。インターネット接続なしと表示された段階でhttp://www.msftconnecttest.com/connecttest.txtにアクセスするとテキストが戻ってくる。しかしインターネット接続なしという表示が解消される気配はない。
つまりNCSIサービスはある一定周期で対象のURLにアクセスしてインターネット接続を確認すると考えられる。
一定周期で動いているならばNCSIはサービスとして動いていると考えられるので、コントロールパネルのサービスからNCSIを探してみた。しかしそれらしいサービスはない。
さらに調査をしてみると、NCSIはサービスは次のレジストリを設定することで無効にすることが分かった。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet\EnableActiveProbing
しかし残念ながらこのレジストリをいじることでプロセスに出る影響は記述されていない。
参照
インターネット接続性チェックが失敗する環境で Outlook 2013/2016 による先進認証が失敗する
コンピューターが企業ネットワークまたはパブリック ネットワークに接続すると、Internet Explorer または Edge ウィンドウが開く