Pop-ups do portal cativo: o guia definitivo [fechado]

12

Estou implementando manualmente um portal cativo de WiFi. Eu tenho tudo praticamente funcionando, exceto um único problema: quero que todos vejam o pop-up cativo do portal de seus SOs móveis (ou SOs de computador) para uma experiência impecável.

Como cada um deles tem sua própria maneira distorcida de fazer isso, eu aparentemente não consigo obter uma experiência consistente entre plataformas.

Para que isso aconteça, posso ter ajuda para descrever (1) quais solicitações de URL de clientes WiFi precisam ser redirecionadas para uma página de login e / ou (2) qual configuração de servidor da web nginx ou apache pode ser usada para redirecionar a rede WiFi clientes para uma página de login?

Minha página de login do portal cativo neste exemplo é http: //captiveportal.lan . Aqui estão alguns dos sistemas operacionais para os quais estou tentando resolver isso.


Android 4/5/6

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

Versões anteriores do Android

  • Apache:?
  • nginx:?

iOS 8

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

  • nginx:?

Versões anteriores do iOS

  • Apache:?
  • nginx:?


Telefone do Windows

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


Windows 7 \ 8 \ 10

  • Apache: veja windows phone (funciona em win7).
  • nginx:?

Mac OS

  • Apache:?
  • nginx:?

Amazon Kindle - ele tem um pop-up?

  • Apache:?
  • nginx:?
ppparadox
fonte
5
Não, não é muito amplo, é simplesmente uma questão multiplataforma. A questão mais multiplataforma que possa existir, talvez. Ele também atingiu o status de "questão notável" (mais de 2500 visualizações), para que as pessoas realmente se interessem e você esteja prestando um enorme desserviço a todos, impedindo que contribuições apareçam. Que vergonha!
Ppparadox
Muito obrigado pelo post; que me permitiu fazer isso unix.stackexchange.com/questions/386242/...
Rui F Ribeiro

Respostas:

5

Todo sistema operacional móvel apenas verifica uma página da web para decidir se está ou não atrás de um portal cativo.

O mecanismo é este:

  1. GET / POST http://foo.com/bar.html
  2. Se bar.html == [conteúdo esperado]> Internet aberta
  3. If bar.html! = [Conteúdo esperado]> Portal Cativo
  4. Se bar.html [status]! = SUCESSO> Sem rede

Além disso, para iOS, você precisa ter um domínio para sua rede Wi-Fi, pois assume que uma rede sem domínio sem acesso é uma rede doméstica e apenas a marca como Sem Rede em vez de Portal Cativo.

Apenas certifique-se de redirecionar explicitamente os seguintes URLs para o seu portal cativo com o HTTP Success:

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:

janelas

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

Muitos fornecedores também começaram a usar o Agente do usuário "CaptiveNetworkSupport", embora não seja tão comum quanto o método de URL acima. Basta verificar esse UA e sempre fornecer sua página de portal ... embora não funcione 100%.

Eu uso o método URL e ele está funcionando bem.

hdezela
fonte
Gostaria de compartilhar alguns snippets de servidor de conf / regras de firewall \ php que você usa para obter o pop-up?
ppparadox
Parece que o Android v6 está usando um URL diferente. connectivitycheck.gstatic.com, que é mencionado aqui
DavidT 28/01
Por que você precisaria redirecionar explicitamente os URLs de teste? Você não serviria apenas a página de login para todos os URLs até o usuário fazer login?
ASHelly #
2

Amazon Kindle (Fire)

O Amazon Kindle (Fire) faz a seguinte solicitação e, se não puder ser recuperado "... assume que o usuário precisa fazer login e exibe uma tela de Logon".

iOS 8.4

Para o iOS mais recente, eu tive que corresponder a todos os URIs para solicitações de http://captive.apple.com - não apenas "/hotspot-detect.html".

Os clientes do iOS 8.4 estão fazendo solicitações com URIs gerados aleatoriamente (por exemplo, "/xmqPyZUv/3r8jTjv8.html" e "/7exN0TV7q0COX0/eKlBU8baU2tape/fjXUzDHBdE6W0O/BGbw7iYU2DVTml", no seguinte portal:

Russell E Glaue
fonte
1
O iOS 8.4 define o UserAgent como "CaptiveNetworkSupport"? Gostaria de compartilhar alguns trechos de servidor de web conf \ firewall rules \ php que você usa para obter o pop-up? Além disso, por que alguém votou contra você sem se preocupar em explicar o porquê? Pessoas estúpidas ...
ppparadox
A cadeia exata do agente é "CaptiveNetworkSupport-277.10.5 wispr". Quando redireciono essas solicitações (listadas nesta pergunta) para uma página de login, o Apple iOS abrirá uma página de login e o Android mostrará uma barra de cabeçalho de login. Após o login bem-sucedido na página Login, o sistema do portal cativo deve permitir que essas solicitações HTTP sejam bem-sucedidas para que a janela pop-up e a barra de login desapareçam. Testei isso com sucesso em um portal cativo personalizado que criei usando apenas o servidor Linux, dnsmasq e Apache httpd.
Russell E Glaue 23/09
Esqueceu de perguntar se o Kindle também define esse agente de usuário.
ppparadox
1
Para kindle, estou vendo "Dalvik / 2.1.0 (Linux; U; Android 5.0.1; VS985 4G Build / LRX21Y)" (talvez seja um aplicativo de kindle?). Este tópico mobileread.com/forums/showthread.php?t=188439 diz "Mozilla /5.0 (Linux; como iPhone; U; en-US) AppleWebKit / 528.5 + (KHTML, como Gecko, Safari / 528.5 +) Versão / 4.0 "
Russell E Glaue
1
@ppparadox Não sei por que recebi o voto inativo segundos depois de postado. Se você gosta da minha contribuição, por favor me dê um voto positivo. Obrigado.
Russell E Glaue 23/09