Всплывающие окна портала: полное руководство

Я вручную внедряю портал Wi-Fi. У меня все работает довольно хорошо, НО единственная заминка: я хочу, чтобы все увидели всплывающий портал своих мобильных ОС (или компьютерных ОС) для безупречного опыта.

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

Чтобы это произошло, могу ли я получить некоторую помощь, чтобы описать (1) какие URL-запросы от WiFi-клиентов необходимо перенаправить на страницу входа в систему и / или (2) какую конфигурацию веб-сервера nginx или apache можно использовать для перенаправления WiFi клиенты на страницу входа?

В этом примере моей страницей входа в портал является http://captiveportal.lan/. Вот некоторые из операционных систем, для которых я пытаюсь решить эту проблему.


Android 4/5/6

  • Apache:
    RedirectMatch 302 /generate_204 http://captiveportal.lan
  • nginx:?

Предыдущие версии Android

  • Апач:
  • nginx:?

iOS 8

  • Apache.htaccess:
    RewriteEngine on
    RewriteCond %{HTTP_USER_AGENT} ^CaptiveNetworkSupport(.*)$ [NC]
    RewriteRule ^(.*)$ http://captiveportal.lan [L,R=302]

  • nginx:?

Предыдущие версии iOS

  • Апач:
  • nginx:?


Телефон с операционной системой Виндоус

  • Apache:
    RedirectMatch 302 /ncsi.txt http://captiveportal.lan
  • nginx:?


Windows 7 \ 8 \ 10

  • Apache: см. Windows Phone (работает на Win7).
  • nginx:?

Mac OS

  • Апач:
  • nginx:?

Amazon Kindle - есть ли у него всплывающее окно?

  • Апач:
  • nginx:?

2 ответа

Все мобильные ОС просто проверяют веб-страницу, чтобы решить, находятся ли они за захваченным порталом или нет.

Механизм такой:

  1. GET / POST http://foo.com/bar.html
  2. Если bar.html == [ожидаемое содержимое] > Открыть Интернет
  3. If bar.html!= [Ожидаемое содержимое] > Портал авторизации
  4. Если bar.html[status]!= SUCCESS > Нет сети

Кроме того, для iOS вам необходим домен для вашей сети WiFi, так как предполагается, что бездоменная сеть без доступа является домашней сетью и просто помечает ее как Нет сети вместо Captive Portal.

Просто убедитесь, что явно перенаправили следующие URL-адреса на ваш портал с успешным HTTP:

Android / Chromebook:

  • clients3.google.com

iOS 6:

  • gsp1.apple.com
  • *.akamaitechnologies.com

IOS 7:

  • www.appleiphonecell.com
  • www.airport.us
  • *.apple.com.edgekey.net
  • *.akamaiedge.net
  • *.akamaitechnologies.com

iOS 8/9:

Windows

  • ipv6.msftncsi.com
  • www.msftncsi.com

Многие поставщики также начали использовать пользовательский агент "CaptiveNetworkSupport", хотя это не так часто, как метод URL-адреса выше. Просто проверьте этот UA и всегда предоставьте ему свою страницу портала... но она не работает на 100%.

Я использую метод URL, и он работает нормально.

Amazon Kindle (Fire)

Amazon Kindle (Fire) делает следующий запрос, и если он не может быть извлечен, "... он предполагает, что пользователь должен войти в систему, и открывает экран входа в систему".

iOS 8.4

Для последней версии iOS мне приходилось сопоставлять все URI для запросов к http://captive.apple.com/ не просто "/hotspot-detect.html".

Клиенты iOS 8.4 отправляют запросы со случайно сгенерированными URI (например, "/xmqPyZUv/3r8jTjv8.html" и "/7exN0TV7q0COX0/eKlBU8baU2tape/fjXUzDHBdE6W0O/BGbw7iYU2DVBTXThTh1"):

Другие вопросы по тегам