Прозрачное приложение Webproxy с iptables - PullRequest
0 голосов
/ 01 марта 2012

Я пытаюсь написать простое прокси-приложение на Android на Java для фильтрации 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

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

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

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

1 Ответ

0 голосов
/ 08 марта 2012

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

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

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

...