Как Windows узнает, есть ли у нее доступ к Интернету или для подключения Wi-Fi требуется проверка подлинности в браузере?

132

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

Как Windows узнает, есть ли у нее успешное подключение к Интернету?
Предположительно, он проверяет какую-то онлайн-службу Microsoft, чтобы выяснить, имеет ли она успешное соединение, перенаправляется ли на какую-то другую страницу или не получает никакого ответа вообще, но я нигде не видел, чтобы этот процесс или используемые службы были задокументированы. , Кто-нибудь может объяснить, как это работает? Я предпочел бы ответы, которые относятся к фактам, а не просто догадываться, но если у вас есть действительно правильное предположение, то сделайте это.

Этот вопрос был Супер Вопросом Пользователя Недели .
Прочитайте запись в блоге 16 мая 2011 года для получения более подробной информации или отправьте свой собственный Вопрос недели.

nhinkle
источник
1
Если бы он проверил службу Microsoft, как бы он прошел этап активации в браузере? Или я вас неправильно понимаю? (+1 между прочим, интересный вопрос)
slhck
@slhck: в этом смысл его проверки: если он не может получить доступ к сервису должным образом, но его попытка получает некоторый ответ, он предполагает, что может быть шаг в браузере. Если нет ответа на все , это предполагает , что есть только локальный доступ. Я просто не уверен, как именно этот процесс работает. Я обновил свой вопрос, чтобы быть немного более ясным (надеюсь).
nhinkle
@nhinkle У меня нет ПК с Windows, но, возможно, кто-нибудь может запустить Wireshark, чтобы увидеть, что на самом деле делает машина в таком случае.
Slhck
Когда индикатор ошибки говорит об отсутствии доступа к Интернету, откройте средство устранения неполадок с сетью. Во время работы средства устранения неполадок вы можете увидеть шаг «Попытка подключения к Microsoft.com». Поэтому я предполагаю, что он использует сервис.
Mayank

Ответы:

91

После некоторых раскопок (огромное количество сетевых и интернет-сервисов в Windows поражает), я думаю, что нашел это. Windows Vista и 7 имеют множество функций Network Awareness, одной из которых является индикатор состояния сетевого подключения, который выполняет тесты подключения, которые, в свою очередь, используются значком системного сетевого экрана. Тест на интернет-соединение прост:

  1. NCSI пытается загрузить определенную страницу через HTTP (точнее: текстовый документ) и проверяет, можно ли ее получить.
  2. Если это не удается, Windows сообщает «Нет доступа в Интернет».

Механизм также проверяет, соответствует ли домен, в котором размещен документ, ожидаемому IP-адресу. Таким образом, он может также предполагать наличие надлежащего доступа в Интернет, если этот тест пройден успешно, но документ не может быть получен.

Причина, по которой он сообщает «Нет доступа к Интернету», когда вы еще не аутентифицировались в Hotspot, заключается в том, как работает Hotspot. Он блокирует все порты, кроме 80 и 443 (для HTTP и HTTPS соответственно), которые перенаправляются на сервер аутентификации Hotspot и могут так или иначе связываться с DNS-запросами. Таким образом, NCSI не может ни разрешить домен, в котором находится тестовый файл, и даже если бы он мог, он не достиг бы реального файла, потому что трафик HTTP перенаправляется на сервер аутентификации.

Источник: http://technet.microsoft.com/en-us/library/cc766017%28WS.10%29.aspx

Тобиас Плутат
источник
13
Горячая точка должна была бы разрешить DNS, иначе любая попытка получить доступ к серверу по имени хоста (а не по IP-адресу) потерпит неудачу с ошибкой типа «невозможно разрешить адрес». В зависимости от настройки горячей точки, он может разрешать все имена по адресу своего сервера аутентификации или может разрешать имена правильно и полагаться исключительно на перенаправление соединений http (s) на сервер аутентификации. DNS-часть проверок, описанных в понравившемся документе, заключается в проверке того, что dns.msftncsi.com разрешает правильный адрес, а не разрешает ли он вообще.
Дейв Шерохман,
1
Это действительно правильно. Я обновил ответ, чтобы отразить это.
Тобиас Плутат
Потрясающая находка и хорошее описание того, как это работает! Если лучшие ответы не появятся, скоро вас ждет награда.
nhinkle
Там также написано, No Internet accessчто вы за прокси;)
Оскар Медерос
1
Я не сомневаюсь, что это в основном правильно, но кажется неполным. Иногда у вас возникают проблемы с DNS, и на значке подключения отображается всплывающее окно, которое указывает, что у вас есть доступ в Интернет, но DNS не работает. Я думаю, что должен быть шаг до шага 1 (или, возможно, после шага 1), который заключается в том, что он пытается разрешить DNS. Если это удается (но страница не загружается), вместо этого вы получите сообщение об ошибке DNS.
krowe2
69

Вот подробности процесса определения статуса соединения :

В следующем списке описывается, как NCSI может взаимодействовать с веб-сайтом, чтобы определить, имеет ли сеть подключение к Интернету:

  1. Запрос разрешения имен DNS dns.msftncsi.com

  2. HTTP-запрос на http://www.msftncsi.com/ncsi.txtвозврат 200 ОК и текстаMicrosoft NCSI

Это можно отключить с помощью параметра реестра. Если вы установите

 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\
     NlaSvc\Parameters\Internet\EnableActiveProbing

чтобы 0, Windows больше не будет зондировать для подключения к Интернету.

Apple делает что-то очень похожее в iOS, чтобы обнаружить подключение к Интернету и возможные страницы входа в сеть отеля и т. Д.

Джефф Этвуд
источник
1
Более новые (я думаю, Gingerbread и более новые ...) версии Android также делают это ... они покажут значок wifi белым, если смогут подключиться к сети, и станут зелеными, если могут попасть в хостинг в Google. стр. Идея этого та же.
ТМ.
Kindle также делает это, так или иначе. Когда я подключился к Wi-Fi, он уведомил меня, что мне нужно открыть браузер и принять условия использования. Мне было интересно, как это произошло также.
Кортук
3
Так что, если msftncsi.com выйдет из строя , каждый компьютер с Windows 7 не сможет показать онлайн сигнал? Это гений!
Лиамзебеде
8

Как сказал Джефф, для обнаружения интернет-соединения Windows сделает:

  1. DNS-запрос к серверу
  2. HTTP-запрос для известного контента

В дополнение к ответу Джеффа я подозреваю:

3 Если HTTP-запрос перенаправлен во внешнюю Microsoft (или не возвращает ожидаемое содержимое), покажите сообщение на скриншоте.

Маке
источник
3

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

  • Если система распознает правильный адрес, соединение все ясно. (Подключение к интернету)
  • Если система разрешает запрос DNS, но не является правильным адресом, то происходит переадресация (возможно, необходимо добавить информацию в журнал)
  • Если система не разрешает запрос DNS, возникают проблемы с подключением к Интернету (подключение к сети / точке доступа установлено, но подключение к Интернету отсутствует)

Я предполагаю, что запрос на:

http://www.msftncsi.com/ncsi.txt

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

Джеймс Мерц
источник