項目需要最近需要做一個功能,就是將android平板作為熱點,連接到該臺平板的設(shè)備在連接后用瀏覽器打輸入地址后都會自動跳轉(zhuǎn)到我們指定的一個頁面。
最開始做的時候一點頭緒也沒有,后來冷靜下來就想什么事情都不可能一簇而就,咱們就一步一步的來吧。
首先既然要控制用戶在瀏覽器上輸入網(wǎng)址后跳轉(zhuǎn)到我們指定的地址,那么問題來了 :
輸入 URL 到頁面加載完的過程中都發(fā)生了什么事情,我們來看下下面這個圖

不難看出,加載url過程中經(jīng)歷了不少步驟,主要步驟可以總結(jié)為下面幾步:
1.瀏覽器查詢緩存,如果緩存存在跳到第9步
2.瀏覽器詢問操作系統(tǒng)服務(wù)器的IP地址
3.操作系統(tǒng)做DNS查詢,返回IP地址給瀏覽器
4.瀏覽器打開對服務(wù)器的TCP連接
5.瀏覽器通過TCP連接發(fā)送HTTP請求
6.瀏覽器接收HTTP響應(yīng)并且可能關(guān)掉TCP連接,或者是重新使用連接處理新請求
7.瀏覽器檢查HTTP響應(yīng)是否為一個重定向(3xx 結(jié)果狀態(tài)碼 ),一個驗證請求(401),錯誤(4xx 5xx)等等,這些都是不同響應(yīng)的正常處理(2xx)
8.如果響應(yīng)可緩存,將存入緩存
9.瀏覽器解碼響應(yīng)
10.瀏覽器決定如何處理這些響應(yīng)(例如,它是HTML頁面,一張圖片,一段音樂)
11.瀏覽器展現(xiàn)響應(yīng),對未知類型還會彈出下載對話框(現(xiàn)在一般不會彈出了,用戶對瀏覽器設(shè)置而定).
所以不難看出在輸入url后瀏覽器做的第一件事就是域名解析:
將對應(yīng)的域名解析成ip的過程。解析過程如下圖所示:

而看到這里其實后面的一些步驟可以不用繼續(xù)看下去了,當(dāng)然大家有興趣的話可以去研
究下.如果想要達到文章開始所說的效果的話就需要在本地dns服務(wù)器解析過程中下功夫
了,因為作為熱點的平板可以看成一個路由,在這里設(shè)置一道屏障將所有的數(shù)據(jù)進行過
濾重新處理。那既然方案有了那具體該怎么做了,用過Linux操作系統(tǒng)的都知道又一個
iptables防火墻的東西,而android手機底層恰好是Linux,所以這個方法是可行的
(由于android系統(tǒng)開發(fā)性不是所有的廠商都添加了iptables模塊).關(guān)于iptables的知
識可以參考這篇文章[iptables](http://seanlook.com/2014/02/23/iptables-
understand/).
通過iptables編寫規(guī)則,進行數(shù)據(jù)重定向達到我們開始的目的,具體代碼如下.

這里只是貼出了關(guān)鍵的代碼,大家如果想實現(xiàn)的話可以自己嘗試下,如果對于上面的有意見,歡迎大家提出共同學(xué)習(xí)。