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


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.