• NCSI ~ネットワーク接続捜査班

多くのオペレーティングシステムには、インターネット接続を検出するための機能がある。Windowsでも、コントロールパネルなどでインターネット接続があるかどうかを表示できる(写真01)。

  • 写真01: コントロールパネルのネットワークと共有センターでは、稼働しているネットワーク・インターフェースの状態を表示する。ここでNCSIが使われており、接続時にインターネット接続状態を調べ、「アクセスの種類」に表示する

Windowsのインターネット接続検出機能は、NCSI(Network Connection Status Indicator)と呼ばれる。タスクバーのネットワークアイコンで、インターネット接続がないことを「地球儀と禁止標識(丸に斜線)」のアイコン(写真02)で表示するのは、この機能を利用している。

  • 写真02: インターネット接続がないと、タスクバーのネットワークアイコンは地球儀アイコンと丸に斜線を合わせたアイコン表示になる

インターネット接続の有無を検出することは、意外に面倒だ。まず、ネットワークデバイスが正常に動作しており、適切なIPアドレスが割り当てられ、一番手前にあるゲートウェイ(ルーター)に接続できる必要がある。そのほか、DNSで名前解決ができるかどうか、インターネット内で確実に動作しているサーバーに接続できるかどうかを調べなければならない。

Windowsでは、何をもってインターネット接続があるのかを判断しているのかというと、Windows 11はHTTPで、特定のWebサイトからテキストファイルが正しく入手できるかを調べている。過去には、専用のDNSサーバーを使ってアドレス解決ができるかどうかを調べることもあったが、現在では、HTTPのみでインターネット接続の有無を判定している。

具体的には、http://www.msftconnecttest.com/connecttest.txt (IPv4の場合)をアクセスして、テキストファイルを取得する。その中身が“Microsoft Connect Test”であるかどうかをテストしている。NCSIでは、このHTTPによるインターネット接続の検出をアクティブ・プローブと呼ぶ。NCSIは、ネットワーク接続を管理する「ネットワークリストマネージャー(netlistmgr)」サービス内で動作している。

アクティブプローブが成功したあと、通過パケットを定期的に検査して、インターネット接続が継続しているかどうかをチェックする(これをパッシブ・プローブと呼ぶ)。また、ネットワークリストマネージャーは、API(たとえばINetworkListManager::GetConnectivity)でも、インターネット接続の状態を提供する。

こうしたインターネット接続のチェックは、ネットワーク・インターフェースやTCP/IPスタック、プロキシー、LANやルーター、ファイアウォール、インターネット接続プロバイダ、DNSといったネットワークの下回りや通信経路にすべて問題がない場合のみに成功する。それぞれのコンポーネントでも個別のチェックはある。このインターネット接続の検出はネットワークの総合試験でもある。

Androidや他のOSでもHTTPを使うところは同じ。ただし、何をもって正しくアクセスできたのか、という判定は異なるようだ。たとえば、AndroidやChromebookでは、http://connectivitycheck.gstatic.com/generate_204 を、アクセスしてレスポンスが204 No Contentとなるかどうかを判定している。これについては、Network Portal Detectionに記述がある。

HTTPによるインターネット接続の検出は、公衆無線LANサービスなどで使われる「キャプティブ・ポータル」の検出にも使われる。キャプティブ・ポータルとは、インターネット接続前にユーザー登録や利用許諾条件の確認などに使われるものだ。この場合、HTTPでインターネット接続チェックを行うと、正しくHTTPは動作するものの、期待していた結果が得られない。NCSIの場合では、HTTPは成功しても正しい文字列を得ることができない。

ただし、キャプティブポータルの実装にはいくつかの方式がある。HTTPの302 Redirectが返される場合もあれば、511 Network Authentication Requiredのときもある。あるいはICMP リダイレクト(レイヤー3、IPレベルでのリダイレクト)を使う、DNSサーバーへのリクエストを横取りして、キャプティブポータルのHTTPサーバーアドレスを返す、といった方式がある。

Windowsの場合、正しい文字列が得られない場合には、キャプティブ・ポータルが動作していると判断し、Webブラウザを起動する。

なお、NCSIのHTTPサーバーは、かつてはAzureでホストしていたが、現在ではAkami Technologies社のCDN(Content Delivery Network)に移行している。世界中でWindowsが起動するときにアクセスするので、コマンドでちょっとぐらいアクセスしても大丈夫だろう(そうでなければ、却って問題)。いちいち、ネットワーク接続フライアウトやコントロールパネルを開かなくても、コマンドラインからcurl.exeやInvoke-WebRequestなどを使って、簡単にインターネット接続をテストできる。


curl.exe http://www.msftconnecttest.com/connecttest.txt
Invoke-WebRequest "http://ipv6.msftconnecttest.com/connecttest.txt"

として、“Microsoft Connect Test”が返れば、インターネット接続は問題ない。

今回のタイトルネタは、NCSIからの連想で米国TVドラマ「NCIS ~ネイビー犯罪捜査班」である。2003年から続く軍隊物と犯罪捜査物を合わせたドラマ。1995年から続いた「犯罪捜査官ネイビーファイル(JAG)」のスピンオフとして始まったが、こちらの方が長寿番組となった。