2012-03-01 73 views
0

我想在Java中的Android上編寫一個簡單的代理應用程序來過濾URL。它所做的基本上是讀取傳入的Socket上的所有內容,將所有內容寫入服務器,反之亦然。如果我將Opera移動瀏覽器指向它,一切正常。我希望把它雖然透明的,所以我想通過這些iptables規則將所有流量重定向到它:使用iptables透明Webproxy應用程序

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 

然後我得到一個錯誤信息,指出「服務器的通信失敗」。

難道是在透明模式下使用代理時,它的行爲應該是不同的。像一個網絡服務器?我讀過一些地方,當透明地使用squid時,必須將其配置爲「透明模式」。

還是有一個完全不同的原因?

回答

0

回答我自己的問題。

iptable規則完美工作,所以這不是問題。錯誤消息使我走上了正確的軌道。它聲明「服務器通信失敗」,所以我的代理對瀏覽器的響應方式出了問題。

原來,它沒有發送任何HTTP頭到瀏覽器,因爲我用URLConnection與真正的網絡服務器通信。 URLConnection負責HTTP協議,這就是瀏覽器在響應中沒有看到任何標題的原因。然後,我切換到Socket API與網絡服務器交談,並將所有內容都轉發回瀏覽器,其中包含標題和所有內容,並且工作正常!

相關問題