我正在尝试用Java在Android上编写一个简单的代理应用程序来过滤URL。它所做的基本上是读取传入Socket上的所有内容,将所有内容写入服务器,反之亦然。如果我将我的Opera移动浏览器指向它,一切都会正常工作。我想让它变得透明,所以我尝试通过这些iptables规则将所有流量重定向到它:
iptables -t nat -A OUTPUT -m owner --uid-owner 10090 -j ACCEPT
iptables -t nat A OUTPUT -p tcp --dport 80 -j REDIRECT -p tcp --to-port 8081然后,我收到一条错误消息,指出“服务器通信失败”。
会不会是因为在透明模式下使用代理时,它的行为会有所不同,比如像when服务器一样?我在某处读到,当透明地使用squid时,您必须将其配置为“透明模式”。
还是有一个完全不同的原因?
发布于 2012-03-09 01:22:23
回答我自己的问题。
iptable规则可以完美地工作,所以这不是问题所在。错误消息将我带到了正确的轨道上。它指出“服务器通信失败”,所以我的代理响应浏览器的方式有问题。
结果它没有向浏览器发送任何HTTP头,因为我使用URLConnection与真正的used服务器通信。URLConnection负责处理HTTP协议,这就是为什么浏览器在响应中看不到任何报头的原因。然后我切换到Socket应用程序接口与and服务器对话,并只是将所有内容转发回浏览器,其中包括标题和所有内容,它起作用了!
https://stackoverflow.com/questions/9520062
复制相似问题