2012-03-01 3 views
0

Я пытаюсь написать прокси-приложение на Android в Java для фильтрации URL-адресов. То, что он делает, это в основном читать все на входящем Socket, писать все на сервер и наоборот. Все работает нормально, если я укажу на свой мобильный браузер Opera. Я хочу, чтобы сделать его прозрачным, поэтому я попытался перенаправить весь трафик на него с помощью этих правил Iptables:Прозрачное приложение Webproxy с 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 

Затем я получаю сообщение об ошибке, о том, что «связи с сервером не удалось».

Может случиться так, что при использовании прокси в прозрачном режиме он должен вести себя по-другому, например. как веб-сервер? Я где-то читал, что при использовании squid прозрачно, вы должны настроить его на «прозрачный режим».

Или существует совершенно другая причина?

ответ

0

Отвечая на мой собственный вопрос.

Правила iptable работают отлично, так что это не проблема. Сообщение об ошибке привело меня на правильный путь. В нем указано, что «сбой связи с сервером», поэтому было что-то не так с тем, как мой прокси-сервер откликнулся на браузер.

Оказалось, что он не отправил HTTP-заголовки в браузер, потому что я использовал URLConnection для связи с реальным веб-сервером. URLConnection заботится о HTTP-протоколе, поэтому браузер не видит заголовков в ответе. Затем я переключился на API Socket, чтобы поговорить с веб-сервером, и просто перенаправил все обратно в браузер, в который вошли заголовки и все такое, и это сработало!

 Смежные вопросы

  • Нет связанных вопросов^_^