Проблемы с настройкой Прозрачного TCP Прокси на Android / Linux - PullRequest
4 голосов
/ 06 декабря 2011

Я пытаюсь настроить прозрачный TCP-прокси на Android для своей диссертации, но у меня возникли некоторые проблемы.Я использую программное обеспечение, найденное на этом сайте - http://en.dfr.ch/free-software/java-tcp-proxy - источник находится в свободном доступе.

Я извлек источник и создал на нем приложение для Android.Основная часть кода находится в цикле ниже.

while(!interrupted()) {
    Socket serverSocket=srvSock.accept();
    Log.e(TAG, "New incoming connection");
    try {
        serverSocket.setSoLinger(true,lingerTime);
        Socket clientSocket=new Socket(dstAddr,dstPort);
        clientSocket.setSoLinger(true,lingerTime);
        Log.e(TAG, "Server socket and client socket created");
        StreamCopyThread sToC=new StreamCopyThread(serverSocket,clientSocket, "BrowserSide");
        StreamCopyThread cToS=new StreamCopyThread(clientSocket,serverSocket, "ServerSide");
        Log.e(TAG, "Working threads created");
        sToC.setPeer(cToS);
        cToS.setPeer(sToC);
        Log.e(TAG, "Peers defined");
        synchronized(lock) {
            connections.addElement(cToS);
            connections.addElement(sToC);
            sToC.start();
            cToS.start();
            Log.e(TAG, "Working threads running");
        }
    } catch(Exception xc) {
        Log.e(TAG, header+":"+xc.getMessage());
        // xc.printStackTrace();
    }
}
srvSock.close();

Трафик перенаправляется с IP на локальный узел, где прокси-сервер обрабатывает его.Для перенаправления я использовал следующее правило iptables:

iptables -t nat -A OUTPUT -p tcp --dport 80 -d [any ip] -j REDIRECT --to-port 8080

Это похоже на работу при перенаправлении трафика, однако, когда прокси-сервер работает, он, кажется, непрерывно создает новые потоки (соединения) до тех пор, покане хватает памяти.При ведении журнала выходной файл аналогичен приведенному ниже.Где ... представляет несколько циклов вышеприведенной регистрации выходных данных до ошибки.

Работающие рабочие потоки

Новое входящее соединение

Создан сокет сервера и клиентский сокет

Созданы рабочие потоки

Определены одноранговые узлы

BrowserSide -> 611

Работают рабочие потоки

...

/ 127.0.0.1: 8080 <-> / [any ip]: 80: Слишком много открытых файлов

Я действительно не понимаю, почему он не работает должным образом.Та же самая ошибка появляется, когда я пробую ее в Ubuntu на компьютере, но она прекрасно работает в Windows.Я думаю, что это может быть проблема с iptables или некоторые проблемы, связанные с jvm / socket в Linux.В настоящее время я использую iptables версии 1.4.4.

Заранее благодарим вас за то, что нашли время взглянуть на эту проблему.

Ответы [ 2 ]

1 голос
/ 28 января 2015

Вы, скорее всего, инициируете соединение в своем коде с тем же портом, который перенаправляется.

Рассмотрим:

iptables -t nat -I OUTPUT -p tcp --dport 80 -d [any ip] -m owner \! --gid-owner proxyrunner -j REDIRECT --to-port 8080

Это исключит программы, работающие как группа proxyrunner, убедитесь, что ваш прокси работает соответствующим образом:

sg proxyrunner 'java [...]'
0 голосов
/ 07 декабря 2011

Вы пытались запустить другие прокси Java, такие как Little proxy с той же конфигурацией?

http://dev.littleshoot.org/littleproxy/

Другие прокси с открытым исходным кодом: http://proxies.xhaus.com/java/

...