Captive-Portal-Popups: die endgültige Anleitung [geschlossen]

12

Ich implementiere manuell ein WLAN-Captive-Portal. Ich habe alles so ziemlich am Laufen, ABER ein einziges Problem: Ich möchte, dass jeder das Popup-Fenster seines mobilen Betriebssystems (oder Computer-Betriebssystems) für ein einwandfreies Erlebnis sieht.

Da jeder von ihnen seine eigene Art zu arbeiten hat, bin ich anscheinend nicht in der Lage, eine konsistente plattformübergreifende Erfahrung zu erzielen.

Kann ich Ihnen dabei behilflich sein, zu beschreiben, (1) welche URL-Anforderungen von WLAN-Clients an eine Anmeldeseite umgeleitet werden müssen und / oder (2) welche Nginx- oder Apache-Webserverkonfiguration zum Umleiten von WLAN verwendet werden kann? Kunden zu einer Login-Seite?

Meine Anmeldeseite für das Captive-Portal in diesem Beispiel lautet http: //captiveportal.lan . Hier sind einige der Betriebssysteme, für die ich versuche, das Problem zu beheben.


Android 4/5/6

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

Frühere Android-Versionen

  • Apache:?
  • Nginx:?

iOS 8

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

  • Nginx:?

Frühere iOS-Versionen

  • Apache:?
  • Nginx:?


Windows Phone

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


Windows 7 \ 8 \ 10

  • Apache: siehe Windows Phone (funktioniert auf Win7).
  • Nginx:?

Mac OS

  • Apache:?
  • Nginx:?

Amazon Kindle - hat es ein Popup?

  • Apache:?
  • Nginx:?
ppparadox
quelle
5
Nein, es ist nicht zu weit gefasst, es ist einfach ein plattformübergreifendes Problem. Vielleicht ist es DAS MEISTE plattformübergreifende Problem. Es hat auch den Status "Bemerkenswerte Frage" erreicht (mehr als 2500 Aufrufe), so dass die Leute wirklich daran interessiert sind und Sie einen RIESIGEN Nachteil für alle erbringen, indem Sie verhindern, dass Beiträge eingehen.
ppparadox
Vielen Dank für die Post; es mir erlaubt , dies zu tun unix.stackexchange.com/questions/386242/...
Rui F Ribeiro

Antworten:

5

Alle mobilen Betriebssysteme überprüfen nur eine Webseite, um zu entscheiden, ob sie sich hinter einem Captive-Portal befinden oder nicht.

Der Mechanismus ist folgender:

  1. GET / POST http://foo.com/bar.html
  2. If bar.html == [erwarteter Inhalt]> Open Internet
  3. If bar.html! = [Erwarteter Inhalt]> Captive Portal
  4. If bar.html [status]! = SUCCESS> No Network

Außerdem benötigen Sie für iOS eine Domain für Ihr WiFi-Netzwerk, da davon ausgegangen wird, dass es sich bei einem domainslosen Netzwerk ohne Zugriff um ein Heimnetzwerk handelt, und es statt als Captive Portal nur als Kein Netzwerk markiert wird.

Stellen Sie einfach sicher, dass Sie die folgenden URLs mit HTTP Success explizit an Ihr Captive-Portal weiterleiten:

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

Viele Anbieter haben auch damit begonnen, den Benutzeragenten "CaptiveNetworkSupport" zu verwenden, obwohl dieser nicht so häufig ist wie die oben beschriebene URL-Methode. Suchen Sie einfach nach dieser UA und geben Sie ihr immer Ihre Portalseite ... funktioniert jedoch nicht zu 100%.

Ich benutze die URL-Methode und es hat gut funktioniert.

hdezela
quelle
Möchten Sie einige funktionierende Conf \ Firewall Rules \ PHP-Snippets des Webservers freigeben, die Sie zum Abrufen des Popups verwenden?
ppparadox
Es sieht so aus, als ob Android v6 eine andere URL verwendet. connectivitycheck.gstatic.com, die hier erwähnt wird
DavidT
Warum müssten Sie die Test-URLs explizit umleiten? Würden Sie nicht einfach die Anmeldeseite für jede URL bereitstellen, bis sich der Benutzer angemeldet hat?
AShelly
2

Amazon Kindle (Fire)

Der Amazon Kindle (Fire) fordert Folgendes an, und wenn es nicht abgerufen werden kann, wird davon ausgegangen, dass sich der Benutzer anmelden und einen Anmeldebildschirm öffnen muss.

iOS 8.4

Für das neueste iOS musste ich alle URIs für Anfragen an http://captive.apple.com abgleichen - nicht nur "/hotspot-detect.html".

iOS 8.4-Clients stellen Anforderungen mit zufällig generierten URIs (z. B. "/xmqPyZUv/3r8jTjv8.html" und "/7exN0TV7q0COX0/eKlBU8baU2tape/fjXUzDHBdE6W0O/BjUzW7iYU2DVBh1th1t1t1t1"), um um um um in um um um um um um um um um um um um

Russell E. Glaue
quelle
1
Stellt iOS 8.4 den UserAgent auf "CaptiveNetworkSupport" ein? Möchten Sie einige funktionierende Conf \ Firewall Rules \ PHP-Snippets des Webservers freigeben, die Sie zum Abrufen des Popups verwenden? Warum hat Sie jemand herabgestimmt, ohne zu erklären, warum? Dumme Leute ...
ppparadox
Die genaue Agentenzeichenfolge lautet "CaptiveNetworkSupport-277.10.5 wispr". Wenn ich diese Anfragen (in dieser Frage aufgelistet) auf eine Anmeldeseite umleitung, öffnet Apple iOS eine Anmeldeseite und Android zeigt eine Anmeldeheaderleiste an. Nach der erfolgreichen Anmeldung auf der Anmeldeseite muss das Captive-Portal-System zulassen, dass diese HTTP-Anforderungen erfolgreich sind, damit das Popup-Fenster und die Anmeldeleiste ausgeblendet werden. Ich habe dies erfolgreich in einem benutzerdefinierten Captive-Portal getestet, das ich nur mit Linux-, DNSMASQ- und Apache-HTTPD-Servern erstellt habe.
Russell E Glaue
Ich habe vergessen zu fragen, ob der Kindle diesen Benutzeragenten auch aktiviert.
ppparadox
1
Für kindle sehe ich "Dalvik / 2.1.0 (Linux; U; Android 5.0.1; VS985 4G Build / LRX21Y)" (vielleicht ist es eine kindle-App?). In diesem Thread heißt es unter mobileread.com/forums/showthread.php?t=188439 "Mozilla /5.0 (Linux; wie iPhone; U; en-US) AppleWebKit / 528.5 + (KHTML, wie Gecko, Safari / 528.5 +) Version / 4.0 "
Russell E Glaue,
1
@ppparadox Ich weiß nicht, warum ich Sekunden nachdem ich gepostet habe die Down Vote bekommen habe. Wenn Ihnen mein Beitrag gefällt, geben Sie mir bitte eine positive Bewertung. Vielen Dank.
Russell E Glaue