Заметки о Windows и других программных продуктах Microsoft...

Как Windows определяет подключение к Интернету

Как 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 — содержимое файла.

настройки реестра для службы сведений о подключенных сетях

 

Используя эти настройки, можно изменить дефолтные адреса на свои, и подняв веб-сервер, по его логам  отслеживать подключения нужных компьютеров. Впрочем, смысла особого в этом лично я не вижу.

 
 
Комментарии

Я вижу,что скриншоны показаны от Windows 8. А для Windows 7 тоже так должно быть в реестре?Меня беспокоят дубликаты с V6.

Да, для семерки все так же.

Спасибо ! У меня WinServer 2008 R2 настроен как шлюз (через общий доступ к Инету).
Инет есть и с сервера и у клиентов. А вот в свойствах сетевого подключения стоит желтый треугольник — Без подключения к Инету. Не знаете ли, как это исправить ?

Можно попробовать изменить настройки NCSI в реестре, например. Только зачем, если все работает 🙂

а вот я всегда меняю дефолт на рукамипрописанные, в этом есть свой плюс, пусть долбится, а вот уведомление не нужно!

therealman™

Если есть два сетевых интерфейса, можно выключить проверку только на одном?

Настройки применяются ко всем интерфейсам, изменить для одного нельзя.

какое событие и с каким кодом в виндовом журнале указывает на успешное подключение к интернету?

Не нашел такого. Есть событие 7036, которое уведомляет о том, что служба стартовала.

Мне нужно было сделать, чтобы при наличии интернета, автоматически подключалось vpn-соединение. в винде есть журнал, куда пишется куча всякой хрени, есть коды событий и т.д. и есть планировщик заданий. самым логичным было бы при событии подключения к инету — запускать задание на запуск vpn-соединения. я нашел в журнале приложений: Microsoft\Windows\NetworkProfile — куда пишутся события при подключениях и отключениях к различным сетям. и есть код события 10000. но этому коду соответствует несколько событий. по этому создать в планировщике простое событие не получится. Нужно создать настраиваемый триггер с фильтром по событию. и уже там в формате XML ручками написать код… у меня получился такой:

*[System[EventID=10000]]
and
*[EventData[
Data[@Name=’Name’]=’Сеть’
and
Data[@Name=’State’]=9
]]

</QueryList

воооот. как-то так.
если кто придумает лучший вариант, было бы не плохо. но прибегать к сторонним прогам не хочцца.

блин, html-теги режутся…
тогда так:
<QueryList>
<Query Id="0" Path="Microsoft-Windows-NetworkProfile/Operational">
<Select Path="Microsoft-Windows-NetworkProfile/Operational">
*[System[EventID=10000]]
and
*[EventData[
Data[@Name='Name']='Сеть'
and
Data[@Name='State']=9
]]
</Select>
</Query>
</QueryList>

Как то сложно чересчур 🙂 Я бы добавил в планировщик скрипт, который запускается при старте (или при входе в систему) и проверяет доступность какого либо внешнего ресурса. При его доступности считаем, что подключение состоялось, выполняем нужную нам команду и завершаем работу.

проверка ресурса — это еще один лишний ping. но ведь винда и так сама проверяет (пингует) свой ресурс. зачем же плодить лишние процессы, когда можно воспользоваться результатом уже существующего? вопрос состоит в том: куда пишется информация о доступности интернета? дело осложняется еще и тем, что в винде по какой-то непонятной причине отсутствует общий поиск по журналам…

фсё! победил!
вообщем порядок действий:
— в планировщике создаем новую задачу
— в задаче создаем новый триггер.
— в параметрах триггера задаем «при событии», тип события — настраиваемое
— создаем фильтр события, переключаемся на вкладку XML, ставим галку «изменить запрос вручную»
— вставляем запрос:
<QueryList>
<Query Id="0" Path="Microsoft-Windows-NCSI/Operational">
<Select Path="Microsoft-Windows-NCSI/Operational">
*[System[Provider[@Name='Microsoft-Windows-NCSI']
and
(EventID=4042)]
and
EventData[
Data[@Name='Capability']=2
and
Data[@Name='CapabilityChangeReason']=8
]]
</Select>
</Query>
</QueryList>

— теперь все это дело сохраняем, сохраняем сам триггер
— на закладке «действия» создаем новое действие. и в нем вставляем нужный скрипт подключения VPN. а можно и сразу написать:
в качестве программы указать: C:\Windows\system32\rasdial.exe
аргументы: «названиеVPNподключения» login password
— сохраняем задачу.

результат:
как только комп определил подключение к интернету, сразу запускается наше VPN-соединение.

Тимур

поидее копнуть нужно в сторону NCSI, она с микрософтовскими серваками вроде связывается, но лог этой функции не всегда ведется

bestkarlson

Я столкнулся с проблемой коннекта с YOTA после перезагрузки системы компа (через чёрный ви-фи))… TTL прописан по реестру, но блин каждый раз в первое подключение к сети получаю «бан на полчаса»… не выключая комп подключаюсь после без проблем… возможно отключение автопроверки винды на подключение трабла исчезнет… они точно знают, что подключилась винда, но после «слепнут»… (будем надеятся поможет…))

Закрытая корпоративная сеть без выхода в интернет. Ни одно из условий проверки доступности инета не проходит и в реестре дефолтные значения. Но сетевой адаптер показвает доступность инета. К чему бы это?

Андрей

Подскажите пожалуйста конфигурацию правила для брандмауэра windows для исходящих соединений, чтобы windows могла без проблем проверять наличие подключения.

Да вроде как ничего специально настраивать для этого не надо. Оно по умолчанию работает.

В Windows 10 сборка 19042.685 несколько дней боролся, — светится «Без доступа к Интернету» и хоть тресни…
В итоге, MS поменяла в реестре значения на другие, с которыми проверка наличия Инета не проходит!
Поменял на те, что здесь упомянуты (на скриншоте), — все Ок.

Вячеслав

Присвоил параметру PassivePollPeriod значение 5 и через 3 часа статус Интернет изменился на доступен.
Без этого статуса не работала Online-справка и Интернет-содержимое Office 2013-2019.
Домен, корпоративная сеть, проверено на 2 компах.

Петя из скама

в гта онлайн челики посылают какието пакеты на св хост винды и выключают монитор, приходится перезагружать систему закрывая все по альт ф ч в слепую, а блокирую хттп и хттпс в фаерволе, они уже не не смогут такие штуки проделывать, а конект интирент всетаки важно знать что тебя не дудосят, по этому статья выручает

Андрей

Встречал много раз эти настройки в инете, но на самом деле- это неправда, винда берет данные не отсюда и в этом легко убедиться. Поднимаем в локальной сети веб-сервер, делаем ему такую же страницу, в ветке реестра прописываем свой веб-сервер. Убираем компу доступ в инет(при этом, есс-но, наш веб-сервер он видит). И винда пишет, что доступа в инет у компа нет!
А вот как все-таки винда определяет- есть доступ в инет или нет- никто не знает, все просто переписывают друг у друга эту статью как школьники на контрольной работе.

Статье почти 10 лет. Начиная с Windows 10 адрес проверки http://www.msftconnecttest.com/connecttest.txt

Хрень все это. Какая проверка, вы чего? Есть два подключения — проводное и мобильное. Если проводное пропадает, то винда на мобильное сама не может переключиться. Пишет, что нет доступа. Пока проводное сам не отключишь. Винда 11. Современная ОС, ха-ха

Leave a Reply to yohi