Microsoft NCSI на службе или как мы искали забытый нетбук

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

    Что за 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 не во всех ситуациях можно что-либо сказать, но в некоторых ситуациях можно быть уверенным, что забыли вы его все-таки скажем на работе или в университете, а не где-то еще. Правда под вопросом остается случай «Кто-то включил ноутбук, но на пользователя стоит пароль» — подключится ли при этом ноутбук к сохраненной сети без входа в систему или же нет?
    Идея дает и негативные варианты использования — можно ведь следить за подключениями компьютера и с другими целями, но думаю что их не стоит здесь обсуждать.

    Не теряйте ваши гаджеты!

    Similar posts

    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 28

      0
      Отличная статья! Пожалуй настрою себе тоже такие параметры на всякий случай :)
        0
        Спасибо! Сделал у себя проверку каналов связи на машинах, не подключенных к интернету! Раскидал через предпочтения групповой политики :)
          0
          Правда под вопросом остается случай «Кто-то включил ноутбук, но на пользователя стоит пароль» — подключится ли при этом ноутбук к сохраненной сети без входа в систему или же нет?

          Конечно, подключится.
          А так статья интересная, жаль, нужно под это заводить отдельный сервер, для тех, у кого его нет.
            +2
            Конечно, подключится.

            Если только не включена возможность создавать «приватные» профили (Центр управления сетями и общим доступом — управление беспроводными сетями — типы профилей). Да, по умолчанию она отключена, и редко кто ее включает или даже знает о ней, но она существует.
              +1
              Я бы не был так уверн. У меня пол предприятия на wifi сидит. Я то знаю какой это геморой. Максимум что я смог добиться настроив wpa2-enterprise — это подключение к сети при вводе имени пользователя и пароля, но увы не отрабатывает политика установки софта, ибо нужна сеть еще до попытки залогиниться. Остальное требует танцев с бубном аля создание задачи в планировщике на запуск скрипта netsh wlan connect name=«SSID»
                0
                Очень странно. У меня wi-fi широко не используется, поэтому WPA2-PSK только, но на нем сеть поднимается до логина, это точно. В политики не лазал, ничего не менял, заработало сразу.
                  0
                  А вы уверены? Может просто лампочка моргает? Ибо чтоб подрубить сеть нужно создать профиль сети, а профиль создается для каждого пользователя, а не для компьютера. Единственный вариант который у меня заработал — это создание профиля сети для локального администратора, создание bat- скрипта: netsh wlan connect name=«SSID». И создание задания в планировщике: при включении компьютера запустить скрипт от имени локального администратора. Вот тогда только поднимается сеть и применяются политики установки софта. Но если у Вас все работает — то лучше не трогайте ничего: потом будете страдать как и я.
                    0
                    Да нет, у меня софт через GPO нормально ставится, так что подключение устанавливается. А так странно вообще. Надо будет поглубже покопать на досуге.
                  0
                  MS технология DirectAccess в этом плане очень хороша
                0
                А может туда и php скрипт можно подсунуть? Который бы проверял ip и если его нет в списке разрешенных слал бы варнинг на почту?
                  0
                  Я тоже подумывал о чем-то подобном, даже можно сохранять IP/диапазоны в БД и если скажем за последнюю неделю с этого места не подключались — слать оповещение, можно даже по SMS, скажем указывая IP и имя провайдера. Лично для меня скорее всего такое не особо практично, т.к. подключаюсь и через 3G и от публичных WiFi частенько, белый список толком не организовать и спама будет много.

                  А так подсунуть конечно можно — имя запрашиаемого файла ведь изменить можно, главное чтобы ответ совпадал, иначе будет рапортавать о необходимости авторизации
                  0
                  в университете несколько точек WiFi с разными внешними IP

                  интересно зачем у точек разные внешние ip
                    +1
                    Ожидал этот вопрос :) Просто точки стоят на разных кафедрах и у каждой кафедры вроде как свой внешний IP, или даже несколько (чтобы можно зайти на FTP кафедры извне и т.д.), там даже методы подключения разные — одни через прозрачный прокси (общеуниверситетский), другие напрямую…
                      0
                      Какой ужас :) создается впечатление, что такие «огороды» норма для вуза, не поделитесь почему так? Ведь казалось бы ВУЗ это одна организация в которой it составляющая должна быть сосредоточена и управляться централизованно.

                      Так поневоле задумаешься, а правильно ли у нас, то, что все управляется одним структурным подразделением.
                        0
                        Ну, я студент, всей правды не знаю, но пытался понять. Что-то узнавал от преподавателей, что-то логически додумывал после экспериментов. Поэтому возможно ситуация не точная, но приблизительно так.
                        На входе — канал с определенной скоростью и скольки-то IP-шниками. Кафедра, которая в том числе заведует сетью в университете, и в крыле которой собственно стоят серверы, имеет WiFi без прокси, с отдельным IP. Почти вся университетская сеть ходит в интернет через прокси (в университетской сети ручные настройки IP и прокси). Этих прокси вроде два или три, они поделены по какой-то своей логике, возможно «лаборатории — один, служебные кабинеты — другой, публичные места — третий» или по корпусам — не получилось понять. У каждого прокси вроде свой IP внешний.
                        Т.к. все настройки ручные, на другой кафедре стоит прокси с автоконфигурацией и DHCP-сервер для своих точек WiFi. В большинстве случаев выход идет через один общеуниверситетский прокси, но если он падает, то переходит на другой, т.е.для пользователя не видно, но внешний IP другой.
                        В библиотеке WiFi был поставлен Домолинком (Ростелеком) еще году в 2008 (или раньше), когда WiFi на кафедрах не было. Там без прокси и отдельный IP, кажется даже отличается от основного диапазона универа. Оборудование обновляли, но отдельный канал вроде так и остался.
                        Плюс еще некоторым кафедрам выделены IP с жестким ограничением скорости для доступности сайта/FTP этих кафедр извне.
                      +1
                      Был на какой-то конференции в офисе Яндекса — так там вообще каждому девайсу по белому IP выдавалось.
                      +3
                      NCSI — Network CSI :)

                      <тут должна быть картинка в стиле CSI Zoom>
                        0
                        На маках очень удобно, что слежение за местоположением ноутбука входит в состав ос.
                          0
                          Windows Phone, Android, IPhone тоже вроде как есть
                          –1
                          А я-то думал как оно определяет есть ли интернет… оно вона как…
                            0
                            Кстати, в 8.1 (может и в 8 тоже), EnableActiveProbing по дефолту был выставлен в 0, а не в 1, как написано в статье.
                              0
                              Хотя, может быть оно и в 1 было по дефолту. У меня оно почему-то в 0 сбрасывается :(
                                  +2
                                  Извиняюсь за флуд, сейчас расскажу с какими проблемами столкнулся при настройке сабжевой штуки.

                                  1. Все сделал, но в свойствах соединения почему-то висело Connection: Limited.
                                  Причина — текстовый файл создавал через vim на сервере. Контент тот же (Microsoft NCSI), но размер был 15 байт. Забрал файл с сайта MS — он размером 14 байт. Положил его вместо своего — все заработало.

                                  2. EnableActiveProbing сбрасывается в ноль при ребуте. Как это решить — пока не выяснил.
                                    0
                                    Про разный размер — уместное замечание. Сохраняйте исходный у себя вместо создания своего. Тоже сталкивался
                                      +2
                                      Там, проблема, скорее всего, была в юниксовом переносе строк.
                                      Вот примеры файлов с текстом «Microsoft NCSI».

                                      1. Созданный мною через vim путем копипасты текста (в одну строку, перенос явно указан не был):
                                      0000000 694d 7263 736f 666f 2074 434e 4953 000a 000000f

                                      2. Оригинальный с сайта MS:
                                      0000000 694d 7263 736f 666f 2074 434e 4953 000000e

                                      А если делаем вот так:
                                      echo -n "Microsoft NCSI" > test.txt

                                      то получаем:

                                      0000000 694d 7263 736f 666f 2074 434e 4953 000000e

                                      Т.о. можно забить туда любую фразу, но следить за непечатными символами.
                                        0
                                        Ну т.е. не перенос строки, а EOL. Думал об одном, написал другое :(
                              0
                              Да это во многом банальный DynDNS. Можно DynDNS клиент поставить и следить за IP потом, а можно Windows настроить так, чтобы клиентом DynDNS работала.

                              Only users with full accounts can post comments. Log in, please.