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


12

Я вручную внедряю портал 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:?


Windows Phone

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


Windows 7 \ 8 \ 10

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

Mac OS

  • Апач:
  • nginx:?

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

  • Апач:
  • nginx:?

5
Нет, это не слишком широко, это просто мультиплатформенная проблема. НАИБОЛЕЕ мультиплатформенный вопрос, может быть. Он также достиг статуса «заметного вопроса» (более 2500 просмотров), так что люди действительно заинтересованы в нем, и вы оказываете ОГРОМНУЮ медвежью услугу всем, предотвращая прилив взносов. Позор!
— ppparadox

Большое спасибо за пост; это позволило мне сделать это unix.stackexchange.com/questions/386242/…
— Руи Ф. Рибейро

Ответы:


5

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

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

  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, и он работает нормально.


Хотите поделиться некоторыми рабочими фрагментами conf \ firewall rules веб-сервера, которые вы используете для получения всплывающего окна?
— ppparadox,

Похоже, Android v6 использует другой URL. Connectivitycheck.gstatic.com, который упоминается здесь
— DavidT

Зачем вам явно перенаправлять тестовые URL? Разве вы не просто обслуживаете страницу входа для каждого URL, пока пользователь не войдет в систему?
— AShelly

2

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/BGbw7iYU2DVBTXTht) для запросов к доменам:


1
IOS 8.4 устанавливает UserAgent на «CaptiveNetworkSupport»? Хотите поделиться некоторыми рабочими фрагментами conf \ firewall rules веб-сервера, которые вы используете для получения всплывающего окна? Кроме того, почему кто-то отверг тебя, не удосужившись объяснить, почему? Глупые люди ...
— ppparadox,

Точная строка агента - «CaptiveNetworkSupport-277.10.5 wispr». Когда я перенаправлю эти запросы (перечисленные в этом вопросе) на страницу входа, Apple iOS откроет страницу входа, а Android покажет строку заголовка входа. После успешного входа в систему на странице входа в систему портальная система должна разрешить успешное выполнение этих HTTP-запросов, чтобы всплывающее окно и панель входа исчезли. Я успешно проверил это на специальном портале, который я создал, используя только Linux, dnsmasq и сервер Apache httpd.
— Рассел E Glaue

Забыл спросить, устанавливает ли Kindle этот пользовательский агент тоже.
— ppparadox,

1
Для kindle я вижу «Dalvik / 2.1.0 (Linux; U; Android 5.0.1; VS985 4G Build / LRX21Y)» (может быть, это приложение kindle?). В этой теме mobileread.com/forums/showthread.php?t=188439 написано: «Mozilla /5.0 (Linux; как iPhone; U; en-US) AppleWebKit / 528.5 + (KHTML, как Gecko, Safari / 528.5 +) версия / 4.0 "
— Рассел E Glaue

1
@ppparadox Я не знаю, почему я получил отрицательный голос через несколько секунд после публикации. Если вам нравится мой вклад, пожалуйста, сообщите мне. Благодарю.
— Рассел E Glaue
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.