项目需要最近需要做一个功能,就是将android平板作为热点,连接到该台平板的设备在连接后用浏览器打输入地址后都会自动跳转到我们指定的一个页面。
最开始做的时候一点头绪也没有,后来冷静下来就想什么事情都不可能一簇而就,咱们就一步一步的来吧。
首先既然要控制用户在浏览器上输入网址后跳转到我们指定的地址,那么问题来了 :
输入 URL 到页面加载完的过程中都发生了什么事情,我们来看下下面这个图
不难看出,加载url过程中经历了不少步骤,主要步骤可以总结为下面几步:
1.浏览器查询缓存,如果缓存存在跳到第9步
2.浏览器询问操作系统服务器的IP地址
3.操作系统做DNS查询,返回IP地址给浏览器
4.浏览器打开对服务器的TCP连接
5.浏览器通过TCP连接发送HTTP请求
6.浏览器接收HTTP响应并且可能关掉TCP连接,或者是重新使用连接处理新请求
7.浏览器检查HTTP响应是否为一个重定向(3xx 结果状态码 ),一个验证请求(401),错误(4xx 5xx)等等,这些都是不同响应的正常处理(2xx)
8.如果响应可缓存,将存入缓存
9.浏览器解码响应
10.浏览器决定如何处理这些响应(例如,它是HTML页面,一张图片,一段音乐)
11.浏览器展现响应,对未知类型还会弹出下载对话框(现在一般不会弹出了,用户对浏览器设置而定).
所以不难看出在输入url后浏览器做的第一件事就是域名解析:
将对应的域名解析成ip的过程。解析过程如下图所示:
而看到这里其实后面的一些步骤可以不用继续看下去了,当然大家有兴趣的话可以去研
究下.如果想要达到文章开始所说的效果的话就需要在本地dns服务器解析过程中下功夫
了,因为作为热点的平板可以看成一个路由,在这里设置一道屏障将所有的数据进行过
滤重新处理。那既然方案有了那具体该怎么做了,用过Linux操作系统的都知道又一个
iptables防火墙的东西,而android手机底层恰好是Linux,所以这个方法是可行的
(由于android系统开发性不是所有的厂商都添加了iptables模块).关于iptables的知
识可以参考这篇文章[iptables](http://seanlook.com/2014/02/23/iptables-
understand/).
通过iptables编写规则,进行数据重定向达到我们开始的目的,具体代码如下.
这里只是贴出了关键的代码,大家如果想实现的话可以自己尝试下,如果对于上面的有意见,欢迎大家提出共同学习。