用iptables实现G1手机cmwap代理上http网站[转]

折腾了几天,总算有点阶段性成果:

证实可以用iptables实现通过cmwap的代理上HTTP协议的网站。

首先,android系统的实现是有缺陷的。在接入apn中指定的proxy并不会被系统所用。好似只有浏览器会对这个设置有所反应。可以进行普通HTTP的代理浏览。而其它应用压根不理这个设置,我行我素的通过android系统进行域名请求,然后跟没有代理一样的进行连接请求。这应该是一个系统缺陷。

为了纠正这个偏差,主要有两个问题:

1、cmwap接入不支持dns解析。其实如果android压根不理dns的事情,直接把所有的请求都转发到apn指定的proxy,就没事了。但现在,我能想到的方法就只有自己修改/etc/hosts 文件来加入解析。

2、把所有向外的针对80端口的http请求全部转向到 10.0.0.172:80 用iptables可以实现这个需求。
具体步骤:

1、将system重新挂载为可写的模式,否则,就无法修改hosts文件

mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system

2、编辑/etc/hosts文件,当然,如果对vi编辑器不熟,或者懒得看terminal里面那么小的字,也可以用 adb push过去,目前我的hosts文件加了如下的解析:

127.0.0.1            localhost
64.73.32.135            north-america.pool.ntp.org
64.233.169.188        mtalk.google.com
66.249.89.99        www.google.com
66.249.89.101        android.clients.google.com
63.216.60.76        static.rememberthemilk.com
207.242.93.89        andrd.accu-weather.com    htc.accuweather.com
74.125.153.95        ajax.googleapis.com
72.9.41.2        lyrics.tunewiki.com

这个hosts文件可以实现:google地图的正常显示、accuweather天气软件的更新、market的使用、tunewiki的歌词和封面获取。

3、用iptables实现转向:

iptables -t nat -A OUTPUT -o rmnet0 -p tcp –dport 80 -j DNAT –to-destination 10.0.0.172:80

这一步每次重启之后都要重新做一次。没法子,凑合吧

=================================================

下面的工作:

1、搜集G1各个应用程序联网所需的域名解析

2、写个程序来控制转向的开启与关闭

3、实现一个简单的dns server程序,在有wifi连接的时候完成积累的dns解析,cmwap的时候在本地解析域名

4、想法子通过cmwap建立隧道传递所有TCP。这一步目前有个问题,如果我通过iptables将ip包的目的地址转为本地,如何能获得它原来的目的地址呢?。困扰~~~

原文:http://www.biaji.net/wp/biaji/2009/04/%e7%94%a8iptables%e5%ae%9e%e7%8e%b0g1%e6%89%8b%e6%9c%bacmwap%e4%bb%a3%e7%90%86%e4%b8%8ahttp%e7%bd%91%e7%ab%99/

你可能感兴趣的:(用iptables实现G1手机cmwap代理上http网站[转])