Popups du portail captif: le guide définitif [fermé]

12

J'implémente manuellement un portail captif WiFi. J'ai tout fonctionne à peu près MAIS un seul problème: je veux que tout le monde voit le portail captif de leur système d'exploitation mobile (ou système d'exploitation d'ordinateur) pour une expérience sans faille.

Étant donné que chacun d'eux a sa propre façon de le faire, je suis apparemment incapable d'obtenir une expérience multiplateforme cohérente.

Pour ce faire, puis-je avoir de l'aide pour décrire (1) quelles demandes d'URL des clients WiFi doivent être redirigées vers une page de connexion, et / ou (2) quelle configuration de serveur Web nginx ou apache peut être utilisée pour rediriger le WiFi clients à une page de connexion?

Ma page de connexion au portail captif dans cet exemple est http: //captiveportal.lan . Voici certains des systèmes d'exploitation pour lesquels j'essaie de résoudre ce problème.


Android 4/5/6

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

Versions Android précédentes

  • Apache:?
  • nginx:?

iOS 8

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

  • nginx:?

Versions iOS précédentes

  • Apache:?
  • nginx:?


Téléphone Windows

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


Windows 7 \ 8 \ 10

  • Apache: voir windows phone (fonctionne sur win7).
  • nginx:?

Mac OS

  • Apache:?
  • nginx:?

Amazon Kindle - a-t-il une fenêtre contextuelle?

  • Apache:?
  • nginx:?
ppparadox
la source
5
Non, ce n'est pas trop large, c'est simplement un problème multi-plateforme. Le problème le plus multiplateforme qu'il puisse y avoir, peut-être. Il a également atteint le statut de "question notable" (plus de 2500 vues), donc les gens s'y intéressent vraiment et vous rendez un service ÉNORME à tous en empêchant les contributions d'affluer. Dommage!
ppparadox
Merci beaucoup pour le post; cela m'a permis de le faire unix.stackexchange.com/questions/386242/…
Rui F Ribeiro

Réponses:

5

Tous les OS mobiles vérifient simplement une page Web pour décider s'ils se trouvent derrière un portail captif ou non.

Le mécanisme est le suivant:

  1. GET / POST http://foo.com/bar.html
  2. Si bar.html == [contenu attendu]> Ouvrir Internet
  3. Si bar.html! = [Contenu attendu]> Portail captif
  4. Si bar.html [status]! = SUCCÈS> Aucun réseau

De plus, pour iOS, vous devez avoir un domaine pour votre réseau WiFi car il suppose qu'un réseau sans domeless sans accès est un réseau domestique et le marque simplement comme No Network au lieu de Captive Portal.

Assurez-vous simplement de rediriger explicitement les URL suivantes vers votre portail captif avec 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:

les fenêtres

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

De nombreux fournisseurs ont également commencé à utiliser l'agent utilisateur "CaptiveNetworkSupport", bien qu'il ne soit pas aussi courant que la méthode URL ci-dessus. Vérifiez simplement cet UA et donnez-lui toujours votre page de portail ... ne fonctionne pas à 100% cependant.

J'utilise la méthode URL et ça fonctionne bien.

hdezela
la source
Voulez-vous partager certains serveurs Web conf \ règles de pare-feu \ extraits PHP que vous utilisez pour obtenir la fenêtre contextuelle?
ppparadox
On dirait qu'Android v6 utilise une URL différente.
connectorcheck.gstatic.com
Pourquoi devriez-vous rediriger explicitement les URL de test? Ne serviriez-vous pas simplement la page de connexion pour chaque URL jusqu'à ce que l'utilisateur se connecte?
AShelly
2

Amazon Kindle (Fire)

Le Kindle d'Amazon (Fire) fait la demande suivante, et s'il ne peut pas être récupéré "... il suppose que l'utilisateur doit se connecter et ouvre un écran de connexion.":

iOS 8.4

Pour le dernier iOS, je devais faire correspondre tous les URI pour les demandes à http://captive.apple.com - pas seulement "/hotspot-detect.html".

Les clients iOS 8.4 effectuent des requêtes avec des URI générés de manière aléatoire (par exemple, "/xmqPyZUv/3r8jTjv8.html" et "/7exN0TV7q0COX0/eKlBU8baU2tape/fjXUzDHBdE6W0O/BGbw7iYU2DVBhic/YVtml") pour les requêtes URL à envoyer:

Russell E Glaue
la source
1
IOS 8.4 définit-il UserAgent sur "CaptiveNetworkSupport"? Voulez-vous partager des serveurs conf. Aussi, pourquoi quelqu'un vous a-t-il voté sans prendre la peine d'expliquer pourquoi? Des gens stupides ...
ppparadox
La chaîne d'agent exacte est "CaptiveNetworkSupport-277.10.5 wispr". Lorsque je redirige ces demandes (répertoriées dans cette question) vers une page de connexion, Apple iOS affichera une page de connexion et Android affichera une barre d'en-tête de connexion. Après s'être connecté avec succès sur la page de connexion, le système de portail captif doit permettre à ces requêtes HTTP de réussir pour que la fenêtre contextuelle et la barre de connexion disparaissent. J'ai testé cela avec succès dans un portail captif personnalisé que j'ai créé en utilisant uniquement Linux, dnsmasq et Apache httpd server.
Russell E Glaue du
J'ai oublié de demander si le Kindle définit également cet agent utilisateur.
ppparadox
1
Pour Kindle, je vois "Dalvik / 2.1.0 (Linux; U; Android 5.0.1; VS985 4G Build / LRX21Y)" (c'est peut-être une application Kindle?). Ce fil mobileread.com/forums/showthread.php?t=188439 dit "Mozilla /5.0 (Linux; comme iPhone; U; en-US) AppleWebKit / 528.5 + (KHTML, comme Gecko, Safari / 528.5 +) Version / 4.0 "
Russell E Glaue
1
@ppparadox Je ne sais pas pourquoi j'ai obtenu le vote négatif quelques secondes après avoir posté. Si vous aimez ma contribution, donnez-moi un vote positif. Merci.
Russell E Glaue