
摘要
解釋Captive Portal是什么、為什么連上WiFi后會自動彈出認證頁面。同時,說明主流操作系統(tǒng)的支持情況。
Captive Portal
中文通常譯作“強制主頁”或“強制登錄門戶”。是一個登錄Web頁面,通常由網(wǎng)絡(luò)運營商或網(wǎng)關(guān)在用戶能夠正常訪問互聯(lián)網(wǎng)之前攔截用戶的請求并將一個強制登錄或認證主頁呈現(xiàn)(通常是通過瀏覽器)給用戶。該頁面可能要求用戶輸入認證信息、支付、接受某些條款或者其他用戶授權(quán)等,隨后用戶才能被授權(quán)訪問互聯(lián)網(wǎng)。該技術(shù)廣泛用于移動和個人寬帶服務(wù),包括有線電視、商業(yè)WiFi、家庭熱點等,也可用于訪問企業(yè)和住宅區(qū)有線網(wǎng)絡(luò)。
實現(xiàn)策略
實現(xiàn)Captive Portal的方法有很多,常見的幾種方式有:
- DNS攔截:攔截所有DNS請求且返回認證主機IP地址(設(shè)置了強制主頁),這樣用戶訪問任何網(wǎng)站都會看到同一個強制主頁。
- HTTP重定向:利用HTTP重定向功能將所有的HTTP請求重定向到認證主機,如此一來,用戶的發(fā)出的任何HTTP請求都會得到重定向后的強制主頁。當用戶通過認證后,便不再重定向用戶請求。
- IP跳轉(zhuǎn):把所有IP包里的目標地址改為認證主機地址,在認證主機上進行404跳轉(zhuǎn),當然是跳轉(zhuǎn)到強制主頁了。
- 內(nèi)核層劫持:當網(wǎng)關(guān)收到一個訪問外網(wǎng)地址(80端口)的TCP SYN請求包后,立即偽造一個來自外網(wǎng)地址的TCP ACK包??蛻舳耸盏酱藗卧斓捻憫?yīng)后會誤認為外網(wǎng)主機可以連接便再次發(fā)送ACK,此時TCP握手成功。客戶端發(fā)起請求,網(wǎng)關(guān)再次劫持后回應(yīng)ACK+PUSH包,其中就包含強制主頁。
連接WiFi后自動彈出認證頁面
單單網(wǎng)關(guān)實現(xiàn)了Captive Portal還不夠,還不能自動彈出認證頁面。需要操作系統(tǒng)支持才能實現(xiàn)在網(wǎng)絡(luò)連接后主動彈出認證頁面的功能。本人對iOS、Android、macOS以及Windows的測試結(jié)果如下:
- iOS從3.0開始支持,主動彈出窗口顯示認證頁面(非瀏覽器窗口)。
- Android從4.0以上開始支持,主動彈出窗口顯示認證頁面(非瀏覽器窗口)。
- macOS(OS X EI Capitan)支持,主動彈出窗口顯示認證頁面(非瀏覽器窗口)。
- Windows 7也支持。但并不是主動彈出認證頁面,而是在網(wǎng)絡(luò)圖標上顯示消息,提示打開瀏覽器。然后你需要隨便訪問一個頁面(例如:
http://www.163.com)即可在瀏覽器上顯示認證頁面。
一種簡單的基于HTTP重定向的Captive Portal實現(xiàn)
當網(wǎng)關(guān)收到來自客戶端的HTTP請求,例如:
GET http://www.example.com/
網(wǎng)關(guān)可以返回如下內(nèi)容給客戶端:
<meta HTTP-EQUIV='REFRESH' content='0; url=http://<your auth server ip>/login'>
瀏覽器或操作系統(tǒng)會重新加載url頁面內(nèi)容(就是認證頁面)。