Munculan portal popup: panduan definitif [ditutup]

12

Saya secara manual mengimplementasikan portal captive WiFi. Saya memiliki semuanya, tetapi TETAPI satu halangan: saya ingin semua orang melihat OS mobile mereka (atau OS komputer) captive portal popup untuk pengalaman sempurna.

Karena masing-masing dari mereka memiliki cara memutar sendiri untuk melakukannya, saya tampaknya tidak bisa mendapatkan pengalaman lintas platform yang konsisten.

Untuk mewujudkannya, dapatkah saya membantu menjelaskan (1) permintaan URL apa dari klien WiFi yang perlu diarahkan ke halaman login, dan / atau (2) konfigurasi server web nginx atau apache yang dapat digunakan untuk mengarahkan ulang WiFi klien ke halaman login?

Halaman login portal captive saya dalam contoh ini adalah http: //captiveportal.lan . Berikut adalah beberapa Sistem Operasi yang saya coba selesaikan untuk ini.


Android 4/5/6

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

Versi Android sebelumnya

  • Apache:?
  • nginx:?

iOS 8

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

  • nginx:?

Versi iOS sebelumnya

  • Apache:?
  • nginx:?


Windows Phone

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


Windows 7 \ 8 \ 10

  • Apache: lihat windows phone (berfungsi pada win7).
  • nginx:?

OS Mac

  • Apache:?
  • nginx:?

Amazon Kindle - apakah ada popup?

  • Apache:?
  • nginx:?
ppparadox
sumber
5
Tidak itu tidak terlalu luas, itu hanya masalah multi-platform. Mungkin ada masalah multi-platform PALING, mungkin. Ini juga telah mencapai status "pertanyaan penting" (lebih dari 2500 tampilan) sehingga orang-orang benar-benar tertarik padanya dan Anda membuat kerugian besar bagi semua orang dengan mencegah kontribusi mengalir masuk. Sayang!
ppparadox
Terima kasih banyak untuk posting ini; itu memungkinkan saya untuk melakukan ini unix.stackexchange.com/questions/386242/...
Rui F Ribeiro

Jawaban:

5

Semua OS seluler cukup periksa halaman web untuk memutuskan apakah mereka berada di balik captive portal atau tidak.

Mekanismenya adalah ini:

  1. DAPATKAN / POST http://foo.com/bar.html
  2. Jika bar.html == [konten yang diharapkan]> Buka Internet
  3. If bar.html! = [Konten yang diharapkan]> Captive Portal
  4. If bar.html [status]! = SUKSES> Tidak Ada Jaringan

Juga, untuk iOS, Anda harus memiliki domain untuk jaringan WiFi Anda karena mengasumsikan jaringan tanpa domain tanpa akses adalah jaringan rumah dan hanya menandainya sebagai Tidak Ada Jaringan alih-alih Captive Portal.

Pastikan untuk secara eksplisit mengarahkan url berikut ke portal captive Anda dengan 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:

Windows

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

Banyak vendor juga sudah mulai menggunakan Agen Pengguna "CaptiveNetworkSupport", meskipun itu tidak biasa seperti metode URL di atas. Cukup periksa UA itu dan selalu berikan halaman portal Anda ... tidak bekerja 100% sekalipun.

Saya menggunakan metode URL dan sudah berfungsi dengan baik.

Hdezela
sumber
Ingin berbagi beberapa webserver conf \ firewall rules \ php snippets yang Anda gunakan untuk mendapatkan munculan?
ppparadox
Sepertinya Android v6 menggunakan url yang berbeda. konektivitascheck.gstatic.com yang disebutkan di sini
DavidT
Mengapa Anda harus secara eksplisit mengarahkan ulang URL pengujian? Tidakkah Anda hanya melayani halaman login untuk setiap URL sampai pengguna masuk?
AShelly
2

Amazon Kindle (Fire)

Amazon Kindle (Fire) membuat permintaan berikut, dan jika itu tidak dapat diambil "... diasumsikan bahwa pengguna harus masuk dan memunculkan layar Masuk.":

iOS 8.4

Untuk iOS terbaru saya harus mencocokkan semua URI dengan permintaan ke http://captive.apple.com - bukan hanya "/hotspot-detect.html".

iOS 8.4 klien membuat permintaan dengan URI yang dihasilkan secara acak (mis. "/xmqPyZUv/3r8jTjv8.html" dan "/7exN0TV7q0COX0/eKlBU8baU2tape/fjXUzDHBdE6W0O/BGbw7iXUdl URL saya ke URL URL).

Russell E Glaue
sumber
1
Apakah iOS 8.4 mengatur UserAgent menjadi "CaptiveNetworkSupport"? Ingin berbagi beberapa webserver conf \ firewall rules \ php snippets yang Anda gunakan untuk mendapatkan munculan? Juga, mengapa seseorang menurunkan Anda tanpa repot-repot menjelaskan mengapa? Orang bodoh ...
ppparadox
String agen yang tepat adalah "CaptiveNetworkSupport-277.10.5 wispr". Ketika saya mengarahkan permintaan ini (tercantum dalam pertanyaan ini) ke halaman login, Apple iOS akan memunculkan halaman login, dan Android akan menampilkan bilah header login. Setelah berhasil masuk pada halaman Login, sistem portal captive harus memungkinkan permintaan HTTP ini berhasil agar jendela sembulan dan bilah masuk menghilang. Saya telah berhasil menguji ini di portal captive khusus yang saya buat hanya menggunakan server Linux, dnsmasq, dan Apache httpd.
Russell E Glaue
Lupa bertanya apakah Kindle menyetel agen pengguna itu juga.
ppparadox
1
Untuk kindle saya melihat "Dalvik / 2.1.0 (Linux; U; Android 5.0.1; VS985 4G Build / LRX21Y)" (mungkin itu adalah aplikasi kindle?). Utas ini mobileread.com/forums/showthread.php?t=188439 mengatakan "Mozilla /5.0 (Linux; seperti iPhone; U; en-US) AppleWebKit / 528.5 + (KHTML, seperti Gecko, Safari / 528.5 +) Versi / 4.0 Versi / 4.0 "
Russell E Glaue
1
@ ppparadox Saya tidak tahu mengapa saya mendapatkan suara turun beberapa detik setelah saya diposting. Jika Anda menyukai kontribusi saya, tolong beri saya suara positif. Terima kasih.
Russell E Glaue