连接热点之后自动拉起浏览器的总结

来源:互联网 发布:淘宝客 微信 编辑:程序博客网 时间:2024/06/05 15:40

这个其实应用场景还是蛮多的。

比如机场弹的登陆界面什么的。

Android机器在连接热点时WifistateMachine都出处于CaptivePortalCheck。在这种状态下会去检查该热点是否具备CaptivePortal功能。如果具备则服务器端会告知客户端指定界面,然后客户端就会去访问此界面。

这里我们认为开wifi端的也就是客户端为C端。开AP的也就是服务器端为S端。

具体的流程如下:

1,C端连接上AP之后将会发包访问http://client3.google.com/generate_204,在这一步正常情况下要先进行DNS解析

2,而这里不是正常情况,so,直接用

iptables-t nat -A PREROUTING -d 0.0.0.0/0 -p udp --dport 53 -j DNAT --to192.168.43.1:53530

 

进行端口转发。(DNS默认端口53,无法监听。0~1023都是特殊端口,一般只分配给特殊服务,普通apk不能监听,所以要转发,此外,21端口是ftp,25端口是smtp,80是http,135分配给RPC)

监听53530,发现http://client3.google.com就将http://client3.google.com解析成AP的ip(Android机器自建热点的ip和苹果机器自建热点的ip都是固定的)。

3,C端将访问解析到的ip,默认端口80,再次用

iptables -t nat -APREROUTING -d 0.0.0.0/0 -p tcp --dport 80 -j DNAT --to 192.168.43.1:8080

转发。监听8080端口,监听到204之后,就设置response状态:response.setStatusCode(HttpStatus.SC_MOVED_TEMPORARILY);

SC_MOVED_TEMPORARILY是302标示服务器重定向,客户端需要重新获取新的uri来进行补充定位。

4,C端收到302状态后会认为S端Captive Portal 有效并且需要重定位,默认将会拉起浏览器,国内会先访问http://www.baidu.com,

5,在S端进行DNS解析,还是要进行端口转发,然后将baidu.com解析为指定界面。

这样C端就会拉起指定界面了。

 

ok,结束了,在某手机上应该是可行的。有什么说得不对的地方也敬请指导哈哈。

 

powered by @ 弹跳

 

1 0