手機鏈接wifi自動彈窗的原理及其實現方案

 

1、手機連上wifi後會自動彈窗的原理html

生活中,有不少須要認證的路由器,手機鏈接wifi熱點後會自動彈出一個網頁,讓用戶輸入帳號和密碼,好比星巴克,肯地基,麥當勞,甚至是火車站和機場的候車室。其實這是一種叫強制門戶認證的技術--Captive Network。就是說,單用戶連上一個wifi後,能夠不須要輸入wifi的密碼,可是須要進行認證纔可以訪問到互聯網。這種路由器有不少開源的軟件,好比wifidog、openwrt等。可是他們的原理都是同樣的,經過iptable跳轉,DNS攔截,和HTTP重定向,甚至有的會採用網頁重構,最後不管用戶輸入任何域名,任何URL,任何IP地址,都會被強制指定到某一個網頁上去。
補充解釋(DNS攔截簡單的說,就是對IP地址的綁架,讓DNS解析成WEB開發者想要讓用戶訪問的IP地址,這樣就實現了對IP的綁架。而HTTP重定向是把當前請求的網頁轉移到另外一個不一樣的網頁,雖然用戶不知道本身訪問的網頁已經發生了重定向,可是HTTP頭會記錄下這一切,重定向後的網頁返回的HTTP狀態是30X。網頁重構是經過JS進行網頁的重定向,可是不會改變HTTP頭的狀態。)
因此,手機只要在連上wifi後,就去向互聯網發起一次請求(不一樣的手機有不一樣的請求地址,好比蘋果手機請求的是www.apple.com,而原版的安卓手機請求的是client3.google.com,可是這些請求的網址,不一樣的手機廠商本身能夠經過修改Android的內核進行修改的,不是絕對的,有的手機甚至直接閹割了這個原版安卓的功能,有的則對這個功能進行了限制使用)。若是返回的網頁是被重定向過的,也就是HTTP頭的狀態是30X的,手機就會認爲這個wifi須要強制認證,所以會彈出瀏覽器,從新發起一次請求。這就是手機連上wifi後會自動彈窗的原理。web


2、實現方案apache

若是要作一個可讓手機連上wifi後會自動彈窗網頁的wifiAP熱點,那麼就要按照上面原理說的,要讓手機第一次發起的請求返回的HTTP頭狀態變爲30X。
這裏由於RTK沒可以鏈接到外網,因此須要本身移植一個DNS服務器到RTK上,進行域名的解析,並對IP地址進行綁架,這個原理跟iptable是同樣的。我這裏移植了一個最新的開源DNS服務器,bind.9.10.tar.gz 域名解析服務器。移植過程都是同樣的,官網下載源碼,而後解壓縮,進行交叉編譯,最後安裝,而後拷貝到RTK開發板上。須要說的是DNS的配置問題,怎麼把全部的域名都解析爲一個固定的IP呢,其實很簡單,DNS的配置規則書寫也是比較簡單的。只須要在配置文件的named.conf中加入這樣一條規則:
「@ IN SOA ns.domain.com.
hostmaster.domain.com.
( 1 3h 1h 1w 1d )
IN NS 172.16.31.1
* IN A 172.16.31.1」
表示讓全部的域名都指向172.16.31.1這個IP地址,* 號表示全部域名。就是這麼簡單。
PS:其實若是RTK可以連上外網,外網有好多專業的DNS域名解析服務器,等解析回來的IP地址後,利用iptable對IP地址進行跳轉,也是同樣可以綁架IP的,可是這裏RTK不可以上網,因此以前移植的iptable的做用不大。可是加上iptable的跳轉也是能夠的,若是遇到不安分的用戶,隨意輸入IP地址,這時候iptable就能夠進行IP跳轉了。瀏覽器

接着,DNS把域名都強制解析爲RTK的本機地址,172.16.31.1。這個時候,RTK上的web服務器就要發揮威力。web服務器都有一個模塊功能,叫rewrite,就是重寫網頁的意思,專業名字叫HTTP的重定向,就是這個模塊起的做用。因此,在web服務器的配置腳本中,把rewrite模塊的註釋去掉,由於web服務器,不管是apache,lighttpd都是默認不開啓這個功能的,由於這個功能是在服務器進行維修的狀況下,讓請求都轉移到備份服務器去才用得上,因此普通的web是沒有開啓的。可是咱們偏偏要利用他的這個功能,就是要他發生重定向。因此這個功能必須啓動。而後在配置文件的最後添加這樣一段語句:
「#$HTTP["host"] ="^(!=a.html)" {
# url.redirect = (
# "^/(.*)" => "/index.html"
# )
#}」
告訴服務器,若是請求不是訪問的a.html這個網頁,就讓他跳到index.html這個網頁上,而index.html就是RTK的網頁。這樣,就實現了網頁的跳轉了。服務器


3、存在的問題

經過上面的原理的介紹,不難發現,若是手機連上wifi後不主動請求,那麼web服務器就不會提供服務,那手機就不會彈出網頁。或者有些手機的軟件作一些限制,好比在手機上經過還有一個智能識別軟件,若是這個熱點不可以訪問外面,那就不彈出,甚至有的手機還直接作成,不能鏈接外網的熱點,就不顯示出來,直接屏蔽掉了。因此,最終能不能彈出網頁,很大程度上得看手機廠商的臉色。若是他們把這個功能閹割了,那就永遠都沒法彈窗,由於手機都沒有去請求服務器。因此這種狀況就得用戶在連上wifi後,自動手動在點擊一下手機上的瀏覽器,發起請求,而後被RTK上的DNS攔截,進而發生HTTP重定向。app

相關文章
相關標籤/搜索