Wyskakujące okienka portalu: ostateczny przewodnik [zamknięty]

13

Ręcznie wdrażam portal dla niewoli WiFi. Mam prawie wszystko działające, ALE za jednym razem: chcę, aby wszyscy widzieli wyskakujące okienko portalu mobilnego systemu operacyjnego (lub komputerowego), aby zapewnić bezproblemowe wrażenia.

Ponieważ każdy z nich ma swój własny zakręcony sposób, wydaje się, że nie jestem w stanie uzyskać spójnego doświadczenia na różnych platformach.

Aby tak się stało, czy mogę pomóc w opisaniu (1), jakie żądania URL od klientów Wi-Fi muszą zostać przekierowane na stronę logowania i / lub (2) jakiej konfiguracji serwera WWW nginx lub apache można użyć do przekierowania Wi-Fi klienci do strony logowania?

Moja strona logowania do portalu typu captive w tym przykładzie to http: //captiveportal.lan . Oto niektóre systemy operacyjne, dla których próbuję rozwiązać ten problem.


Android 4/5/6

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

Poprzednie wersje Androida

  • Apache:?
  • nginx:?

iOS 8

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

  • nginx:?

Poprzednie wersje iOS

  • Apache:?
  • nginx:?


Telefon Windows

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


Windows 7 \ 8 \ 10

  • Apache: patrz Windows Phone (działa na Win7).
  • nginx:?

System operacyjny Mac

  • Apache:?
  • nginx:?

Amazon Kindle - czy ma wyskakujące okienko?

  • Apache:?
  • nginx:?
ppparadox
źródło
5
Nie, nie jest zbyt szeroki, to po prostu kwestia wielu platform. NAJBARDZIEJ MOŻLIWA może być kwestia wielu platform. Osiągnął również status „godnego uwagi pytania” (ponad 2500 wyświetleń), więc ludzie są nim naprawdę zainteresowani, a ty czynisz OGROMNĄ szkodę dla wszystkich, zapobiegając napływaniu wkładów. Szkoda!
ppparadox
Dziękuję bardzo za post; pozwoliło mi to zrobić unix.stackexchange.com/questions/386242/…
Rui F Ribeiro

Odpowiedzi:

6

Wszystkie mobilne systemy operacyjne po prostu sprawdzają stronę internetową, aby zdecydować, czy stoją za portalem dla niewolników, czy nie.

Mechanizm jest następujący:

  1. GET / POST http://foo.com/bar.html
  2. Jeśli bar.html == [oczekiwana treść]> Otwórz Internet
  3. Jeśli bar.html! = [Oczekiwana treść]> Captive Portal
  4. Jeśli bar.html [status]! = SUKCES> Brak sieci

Ponadto w przypadku systemu iOS musisz mieć domenę dla swojej sieci Wi-Fi, ponieważ zakłada ona, że ​​sieć bezdomenowa bez dostępu jest siecią domową i oznacza ją jako Brak sieci zamiast Captive Portal.

Pamiętaj tylko o wyraźnym przekierowaniu następujących adresów URL do portalu dostępowego za pomocą HTTP Success:

Android / Chromebook:

  • klienci3.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

Wielu dostawców zaczęło również używać agenta użytkownika „CaptiveNetworkSupport”, choć nie jest to tak powszechne jak powyższa metoda adresu URL. Po prostu sprawdź ten UA i zawsze daj mu swoją stronę portalu ... nie działa jednak w 100%.

Używam metody URL i działa dobrze.

Hdezela
źródło
Czy chcesz udostępnić działające conf serwera sieciowego \ reguły zapory ogniowej \ fragmenty php, których używasz do uzyskiwania wyskakującego okienka?
ppparadox,
Wygląda na to, że Android v6 używa innego adresu URL. connectivitycheck.gstatic.com, o którym tu wspomniano
DavidT
Dlaczego musisz jawnie przekierowywać testowe adresy URL? Czy nie wyświetlałbyś strony logowania dla każdego adresu URL, dopóki użytkownik się nie zaloguje?
AShelly,
3

Amazon Kindle (Fire)

Amazon Kindle (Fire) wysyła następujące żądanie, a jeśli nie można go odzyskać „... zakłada, że ​​użytkownik musi się zalogować i wyświetla ekran logowania.”:

iOS 8.4

W przypadku najnowszego iOS musiałem dopasować wszystkie identyfikatory URI dla żądań do http://captive.apple.com - nie tylko „/hotspot-detect.html”.

Klienci systemu iOS 8.4 przesyłają żądania z losowo generowanymi identyfikatorami URI (np. „/xmqPyZUv/3r8jTjv8.html” i „/7exN0TV7q0COX0/eKlBU8baU2tape/fjXUzDHBdE6W0O/BGbw7iYU2DVBht_tv).

Russell E. Glaue
źródło
1
Czy iOS 8.4 ustawia UserAgent na „CaptiveNetworkSupport”? Czy chcesz udostępnić działające conf serwera sieciowego \ reguły zapory ogniowej \ fragmenty php, których używasz do uzyskiwania wyskakującego okienka? Ponadto, dlaczego ktoś cię przegłosował bez zadawania sobie trudu wyjaśnienia, dlaczego? Głupi ludzie ...
ppparadox
Dokładny ciąg agenta to „CaptiveNetworkSupport-277.10.5 wispr”. Kiedy przekierowuję te żądania (wymienione w tym pytaniu) na stronę logowania, Apple iOS wyświetli stronę logowania, a Android wyświetli pasek nagłówka logowania. Po pomyślnym zalogowaniu się na stronie logowania system portalu typu captive musi pozwolić na pomyślne zakończenie tych żądań HTTP, aby okno podręczne i pasek logowania zniknęły. Z powodzeniem przetestowałem to w niestandardowym portalu typu captive, który utworzyłem przy użyciu tylko serwera Linux, dnsmasq i serwera HTTP Apache.
Russell E. Glaue,
Zapomniałem zapytać, czy Kindle ustawia również tego agenta użytkownika.
ppparadox,
1
Dla kindle widzę „Dalvik / 2.1.0 (Linux; U; Android 5.0.1; VS985 4G Build / LRX21Y)” (może jest to aplikacja kindle?). W tym wątku mobileread.com/forums/showthread.php?t=188439 mówi „Mozilla / 5.0 (Linux; jak iPhone; U; en-US) AppleWebKit / 528.5 + (KHTML, jak Gecko, Safari / 528.5 +) Wersja / 4.0 „
Russell E. Glaue,
1
@ppparadox Nie wiem, dlaczego dostałem głos w dół kilka sekund po opublikowaniu. Jeśli podoba Ci się mój wkład, proszę dać mi głos. Dzięki.
Russell E. Glaue,