Как Windows определяет подключение к Интернету
В данной статье рассказывается о том, как операционная система Windows определяет подключение к Интернету.
Каждый пользователь операционных систем Windows сталкивался с ситуацией, когда значок сетевой активности в панели задач отображается с желтым треугольником, что означает отсутствие подключения к Интернету.
То же самое можно увидеть и в свойствах сетевого подключения. Каким же образом операционная система определяет, есть ли на данном сетевом интерфейсе соединение с Интернетом, или только доступ к локальной сети?.
Дело в том, что в операционных системах Microsoft начиная с Windows Vista имеется такая функция, как индикатор статуса сетевого подключения (Network Connectivity Status Indicator, NCSI). Эта функция вызывается службой сведений о подключенных сетях ( Network Awareness ) при подключении к любой сети.
Для определения возможностей сети в NCSI есть множество различных методов, одним из которых является определение возможности выхода в Интернет. Проверка проводится в два этапа:
- При подключении к сети система посылает HTTP-запрос по адресу www.msftncsi.com/ncsi.txt. Это обычный текстовый файл, в котором содержится всего одна строка Microsoft NCSI . В случае успешного запроса от сервера должен прийти ответ с заголовком 200 ОК , содержащий эту строку
- На втором этапе проверяется работоспособность службы DNS, для чего NCSI пытается разрешить в IP-адрес имя dns.msftncsi.com. Ожидаемое значение 131.107.255.255
По завершении проверки, если оба этапа были успешно пройдены, система считает что доступ в Интернет имеется. Если файл ncsi.txt недоступен, а dns.msftncsi.com не разрешается или разрешается с другим IP-адресом, то система сообщает о невозможности подключения к Интернет. В том случае, если ncsi.txt недоступен, но dns.msftncsi.com разрешается в правильный IP — система выдает сообщение о необходимости аутентификации через браузер.
Настройки NCSI находятся в системном реестре, в разделе.
При желании их можно отредактировать. Наиболее важные параметры для IPv4 представленны ниже (для IPv6 просто добавляем префикс V6):
- EnableActiveProbing — наличие автоматической проверки подключения к интернет (1 — проверка включена, 0 — отключена)
- ActiveDNSProbeContent — IP-адрес для проверки DNS
- ActiveDNSProbeHost — имя хоста для проверки DNS
- ActiveWebProbeHost — адрес веб-сайта для проверки
- ActiveWebProbePath — путь к файлу проверки
- ActiveWebProbeContent — содержимое файла
Windows network connectivity status indicator
Если вы работаете с системой Windows, то наверняка сталкивались с тем, что на значке сетевого или беспроводного подключения появляется желтый восклицательный знак. Это означает отсутствие подключения к Интернету. Как же Windows определяет, что интернет недоступен? Об этом я вам сегодня расскажу.
Во всех современных системах Windows, начиная с Vista, при подключении к любой сети в обязательном порядке активируется индикатор статуса сетевого подключения (Network Connectivity Status Indicator, сокращенно NCSI). Одним из параметров, который отслеживает NCSI, является определение возможности доступа в Интернет. Эта проверка выполняется в два этапа.
Сперва отправляется HTTP-запрос по адресу www.msftncsi.com на загрузку файла ncsi.txt. Это самый обычный текстовый файл, в нем содержится всего одна строка Microsoft NCSI. В случае доступности интернета сервер должен вернуть код состояния 200 ОК и файл с указанной строкой.
Затем проверяется работоспособность службы DNS, для чего NCSI пытается отрезолвить доменное имя dns.msftncsi.com. Если все работает корректно, то этому домену должен соответствовать IP-адрес 131.107.255.255.
Если обе проверки пройдены успешно, то считается, что текущее подключение имеет доступ к Интернету. Если файл скачать не удалось, или его содержимое не соответствует эталонной строке, а также если хост dns.msftncsi.com невозможно отрезолвить или он ссылается на другой IP-адрес, то система сообщает о невозможности подключения к Интернет. Если не пройдена только первая проверка, значит подключение к Интернету есть, но оно требует дополнительной авторизации через браузер. Так бывает, например, при использовании прокси-сервера.
Все настройки NCSI, связанные с проверкой подключения, находятся в ветке реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\NlaSvc\Parameters\Internet и при желании их можно отредактировать, хотя лично я бы не советовал этого делать. Параметр EnableActiveProbing отвечает за автоматическую проверку подключения (1 — включено, 0 — выключено). Значения других ключей понятны из их названия, это адреса серверов и имен файлов для проверки, ожидаемые значения содержимого файла и IP-адресов. Для протокола IPv6 к именам параметров просто добавлен суффикс «V6».
Windows network connectivity status indicator
В Windows 7 есть функция Network Connectivity Status Indicator NCSI означающая в переводе Индикатор Статуса Сетевого Подключения. За ее работу отвечает служба «Служба сведений о подключенных сетях» Network Awareness. Одной из задач данной функции является определение определение возможности выхода компьютера в Интернет.
Порядок определения подключения следующий:
1 Windows пытается открыть текстовый файл Http://www. msftncsi. com/ncsi. txt
Указанный файл содержит строку Microsoft NCSI. Ожидаемый ответ от сервера – заголовок 200 ОК и данная строка.
2 Windows проверяет работоспособоность DNS-сервера.
Для этого NCSI пытается определить IP-адрес хоста Dns. msftncsi. com. Ожидаемое значение – 131.107.255.255.
Если оба шага успешно завершены – система рапортует о наличии соединения с Интернет.
Если файл ncsi. txt недоступен, а dns. msftncsi. com определяется с другим адресом, либо его IP невозможно установить – система сообщает о недоступности подключения к Интернет.
Если файл ncsi. txt недоступен, но dns. msftncsi. com определяется корректно – система уведомляет пользователя о возможной необходимости аутентификации посредством браузера.
Веб сервер, установленный на сайте www. msftncsi. com хранит в логах все IP-адреса, c которых был запрошен файл ncsi. txt. Согласно заявлению Microsoft эти данные не используются для установления личности пользователя, с компьютера которого пришел запрос.
Изменение настроек NCSI.
Для изменения адреса веб-сервера, имени и содержимого файла, запрашиваемого NCSI, а также имени и IP-адреса хоста, используемого для проверки DNS выполните следующие действия:
1 Запустите редактор реестра Win+R -> Regedit -> OK
2 Откройте раздел: HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesNlaSvcParametersInternet
3 Измените значения указанных ниже параметров данного раздела на необходимые Вам.
ActiveDnsProbeContent – IP-адрес хоста для проверки DNS
ActiveDnsProbeHost – имя хоста для проверки DNS
ActiveWebProbeHost – адрес веб-сайта, на котором размещен файл для проверки наличия подключения к Internet
ActiveWebProbePath – путь к файлу проверки
ActiveWebProbeContent – содержимое файла проверки
Например, Вы размещаете на Www. yoursite. com файл Test. txt с содержимым Internet Check и изменяете значения на следующие:
ActiveWebProbeHost на Www. yoursite. com
ActiveWebProbePath на Test. txt
ActiveWebProbeContent на Internet Check
Отключение функции NCSI.
1 Запустите редактор реестра Win+R -> Regedit -> OK
2 Откройте раздел: HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesNlaSvcParametersInternet
3 Измените значение параметра EnableActiveProbing на 0
4 Откройте раздел: HKEY_LOCAL_MACHINESOFTWAREPoliciesMicrosoftWindowsNetworkConnectivityStatusIndicator
3 Создайте параметр DWORD, переименуйте его в NoActiveProbe и измените значение на 1
Также Вы можете создать и применить reg-файл, указанного ниже содержания:
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservicesNlaSvcParametersInternet] «EnableActiveProbing»=dword:00000000 [HKEY_LOCAL_MACHINESOFTWAREPoliciesMicrosoftWindowsNetworkConnectivityStatusIndicator] «NoActiveProbe»=dword:00000001
Отправить сообщение об ошибке
Если нашли ошибку в тексте выделите ее мышкой и нажмите сочетание клавиш Ctrl+ENTER, укажите правильный текст без ошибки.
Как Windows определяет подключение к Интернету
Наверняка каждый пользователь операционных систем Windows сталкивался с ситуацией, когда значок сетевого подключения в панели задач отображался с желтым треугольником, что означает отсутствие подключения к Интернету.
То же самое можно увидеть и в свойствах сетевого подключения. Каким же образом операционная система определяет, есть ли на данном сетевом интерфейсе соединение с Интернетом, или только доступ к локальной сети?
А дело в том, что в операционных системах Microsoft начиная с Windows Vista есть такая функция, как индикатор статуса сетевого подключения (Network Connectivity Status Indicator, NCSI). Эта функция вызывается службой сведений о подключенных сетях (Network Awareness) при подключении к любой сети.
Для определения возможностей сети в NCSI есть множество различных методов, одним из которых является определение возможности выхода в Интернет. Проверка проводится в два этапа:
• При подключении к сети система посылает HTTP-запрос по адресу http://www.msftncsi.com/ncsi.txt. Это обычный текстовый файл, в котором содержится всего одна строка Microsoft NCSI. В случае успешного запроса от сервера должен прийти ответ с заголовком 200 ОК, содержащий эту строку;
• На втором этапе проверяется работоспособность службы DNS, для чего NCSI пытается разрешить в IP-адрес имя dns.msftncsi.com. Ожидаемое значение 131.107.255.255
По завершении проверки, если оба этапа были успешно пройдены, система считает что доступ в Интернет имеется. Если файл ncsi.txt недоступен, а dns.msftncsi.com не разрешается или разрешается с другим IP-адресом, то система сообщает о невозможности подключения к Интернет. В том случае, если ncsi.txt недоступен, но dns.msftncsi.com разрешается в правильный IP — система выдает сообщение о необходимости аутентификации через браузер.
Настройки NCSI находятся в системном реестре, в разделе HKLM\System\CurrentControlSet\Services\NlaSvc\Parameters\Internet, при желании их можно отредактировать. Вот наиболее важные параметры для IPv4 (для IPv6 просто добавляем префикс V6):
EnableActiveProbing — наличие автоматической проверки подключения к интернет (1 — проверка включена, 0 — отключена);
ActiveDNSProbeContent — IP-адрес для проверки DNS;
ActiveDNSProbeHost — имя хоста для проверки DNS;
ActiveWebProbeHost — адрес веб-сайта для проверки;
ActiveWebProbePath — путь к файлу проверки;
ActiveWebProbeContent — содержимое файла.
Используя эти настройки, можно изменить дефолтные адреса на свои, и подняв веб-сервер, по его логам отслеживать подключения нужных компьютеров. Впрочем, смысла особого в этом лично я не вижу.
Microsoft NCSI на службе или как мы искали забытый нетбук
Что за Microsoft NCSI?
Microsoft NCSI или Network Connectivity Status Indicator — функция проверки работоспособности соединения с интернетом в Windows Vista/7/8. Это она показывает желтый восклицательный знак на значке сетевых подключений при отсутствии подключения к интернету, или же выдает предупреждение о возможной необходимости аутентификации в сети через браузер.
Подробнее можно почитать на Technet, я же опишу кратко суть работы:
При подключении к сети Windows пытается (для IPv4):
1) Зайти по адресу www.msftncsi.com/ncsi.txt и ожидает ответа 200 OK с телом «Microsoft NCSI»
2) Определить IP dns.msftncsi.com и ожидает ответа 131.107.255.255
Если оба пункта выдают ожидаемый результат — считается что сеть имеет доступ в интернет
Если файл недоступен, а IP определяется правильно — отображается уведомление о возможной необходимости аутентификации в сети через браузер.
Если оба шага не выдают ожидаемые результаты — считается что сеть не имеет доступа в интернет.
Адреса, ожидаемые ответы и собственно работу этой функции настроить в реестре по адресу
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet
Предыстория
Когда я узнал о принципе работы NCSI, у меня появилась идея изменить параметры на свой сервер (как из-за параноидального настроения, так и из интереса).
Подумав, я решил использовать существующую логику для удобства проверки при проблемах с интернетом дома. Традиционными состояниями были «все работает нормально», «нет связи вообще (даже до серверов провайдера)» и «доступ только до локальной сети провайдера». В итоге я настроил проверку DNS на один из ресурсов провайдера (доступного в том числе снаружи), а проверку получения файла — на свою VPS. Таким образом, если при проблемах с интернетом мне отображалось сообщение что нужно авторизоваться — значит скорее всего проблема у провайдера на выходе, и смысла звонить разбираться нет, т.к. интернет отсутствует как минимум у микрорайона.
Такая система конечно изредка давала сбои — при ковырянии VPSки или проблемах у домашнего провайдера при подключении извне выдавался ложный статус, но такие проблемы были редкими.
Узнав о моей идее, друг, сидящий на этом же провайдере, сделал себе аналогичные настройки на своих домашних устройствах, настроив проверку доступности файла на мою VPS.
Думаю многие уже догадались о принципе поиска…
День X
Вечером дня X при разговоре знакомый пишет, что судя по всему забыл нетбук в университете. Ехать практически через весь город, да и насколько помнит, забыл в кабинете скорее всего, т.е. не критично. Только не помнит в каком именно из тех, где были пары — доставал ли он его после первой пары или нет.
Статьи бы не было, если бы в этот день я не экспериментировал после разговора с веб-сервером на той самой VPS. Ища нужный лог-файл в списке по названиям доменов, глаз зацепился на лог поддомена NCSI и вспомнил о том, что у знакомого ведь настроен NCSI на мой сервер! Таким образом, можно было догадаться приблизительно о последнем месте включения нетбука по последнему IP и времени, т.к. в университете несколько точек WiFi с разными внешними IP и все были сохранены для автоподключения. Посмотрев лог и задав пару наводящих вопросов знакомому, я сказал ему где скорее всего он забыл нетбук. На следующий день знакомый сразу нашел нетбук в предполагаемой аудитории.
Вывод
В итоге получилась интересная идея — настроить у каждого устройства запрос файла со своего сервера, указав разные имена файлов для каждого устройства и настроив хранение отдельного лога на сервере. При подключении к сети IP появится в логах, что может помочь в поиске, если подобное вдруг случится. Конечно по IP не во всех ситуациях можно что-либо сказать, но в некоторых ситуациях можно быть уверенным, что забыли вы его все-таки скажем на работе или в университете, а не где-то еще. Правда под вопросом остается случай «Кто-то включил ноутбук, но на пользователя стоит пароль» — подключится ли при этом ноутбук к сохраненной сети без входа в систему или же нет?
Идея дает и негативные варианты использования — можно ведь следить за подключениями компьютера и с другими целями, но думаю что их не стоит здесь обсуждать.