Java Tor Lib : Как настроить Orchid Tor Lib с Java?

Я пытаюсь реализовать библиотеку Orchid Tor с кодом Java; к сожалению, и из-за отсутствия документации я не могу заставить его работать, вот что я сделал:

....................

private final static String DEFAULT_SOCKS_PORT = "9050";

 TorClient torClient = new TorClient();

 torClient.addInitializationListener(new TorInitializationListener() {

    @Override
    public void initializationProgress(String string, int i) {
       System.out.println(">>> [ "+ i + "% ]: "+ string);
    // throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public void initializationCompleted() {
        try {

            System.out.println("Tor is ready to go!");

            setSystemProperties("127.0.0.1","8118");

            System.out.println("is online "+isOnline()); //isOnilne is just function return true if connected by pinging google.com

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
});

torClient.enableDashboard(8118);

torClient.enableSocksListener(9050);

torClient.start();

private static void setSystemProperties(String host, String port)
{

    System.setProperty("proxyHost", host);
    System.setProperty("proxyPort", port);

    System.setProperty("http.proxyHost", host);
    System.setProperty("http.proxyPort", port);

    System.setProperty("https.proxyHost", host);
    System.setProperty("https.proxyPort", port);


    System.setProperty("socks.proxyHost", host);
    System.setProperty("socks.proxyPort", DEFAULT_SOCKS_PORT);

    System.setProperty("socksProxyHost", host);
    System.setProperty("socksProxyPort", DEFAULT_SOCKS_PORT);

}

person MoadKey    schedule 20.03.2015    source источник
comment
ааа с java, я убил себя, чтобы найти способ заставить его работать больше недели. в конце концов я сдался и использовал контроллер python (pytorctl), а затем запустил версию python через класс Runtime в java   -  person nafas    schedule 20.03.2015
comment
да, это так сложно, потому что нет четкой документации, я работаю над этой проблемой уже месяц, есть туто, как вы это сделали?   -  person MoadKey    schedule 20.03.2015
comment
Непонятно, чего вы хотите добиться. Вы просто хотите установить соединение на Java через Tor или хотите настроить прокси-сервер Tor для другого приложения? Если вы хотите общаться на Java через Tor, вы можете проверить SilverTunnel-NG sourceforge.net/p/silvertunnel-ng/wiki/   -  person B4dT0bi    schedule 27.03.2015
comment
Нет смысла подключаться к сети без ее использования, я хочу, чтобы мое приложение использовало сеть tor для передачи данных через нее с помощью Orchid Tor lib.   -  person MoadKey    schedule 02.04.2015
comment
любое обновление для этой проблемы?!   -  person MoadKey    schedule 14.07.2015


Ответы (1)


Кажется, это работает с использованием Java8.

Зависимости: orchid-1.0.0.jar, jsoup-1.8.2.jar и commons-io-2.4.jar

package orchiddemo;

import com.subgraph.orchid.TorClient;
import com.subgraph.orchid.TorInitializationListener;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.Socket;
import java.net.URL;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.commons.io.IOUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class OrchidDemo {

private static TorClient client;

public static void main(String[] args) {
    startOrchid();
}

private static void startOrchid() {
    //listen on 127.0.0.1:9150 (default)
    client = new TorClient();
    client.addInitializationListener(createInitalizationListner());
    client.start();
    client.enableSocksListener();//or client.enableSocksListener(yourPortNum);
}

private static void stopOrchid() {
    client.stop();
}

public static TorInitializationListener createInitalizationListner() {
    return new TorInitializationListener() {
        @Override
        public void initializationProgress(String message, int percent) {
            System.out.println(">>> [ " + percent + "% ]: " + message);
        }

        @Override
        public void initializationCompleted() {
            System.out.println("Tor is ready to go!");
            doTests();
        }
    };
}

private static void doTests() {
    testOrchidUsingProxyObject();
    testOrchidUsingSystemPropsProxy();
    testOrchidUsingSocket();
}

private static void testOrchidUsingProxyObject() {
    Thread thread = new Thread() {
        @Override
        public void run() {
            try {
                //Caution: Native Java DNS lookup will occur outside of the tor network.  
                //Monitor traffic on port 53 using tcpdump or equivalent.
                URL url = new URL("https://wtfismyip.com/");
                Proxy proxy = new Proxy(Proxy.Type.SOCKS, new InetSocketAddress("localhost", 9150));
                HttpURLConnection uc = (HttpURLConnection) url.openConnection(proxy);
                uc.setConnectTimeout(10000);
                Document document = Jsoup.parse(IOUtils.toString(uc.getInputStream()));
                String result = document.select("div[id=tor").text();
                System.out.println("testOrchidUsingProxyObject: " + result);
            } catch (Exception ex) {
                Logger.getLogger(OrchidDemo.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    };
    thread.start();
}

private static void testOrchidUsingSystemPropsProxy() {
    Thread thread = new Thread() {
        @Override
        public void run() {
            try {
                //Caution: Native Java DNS lookup will occur outside of the tor network. 
                //Monitor traffic on port 53 using tcpdump or equivalent.
                System.setProperty("socksProxyHost", "127.0.0.1");
                System.setProperty("socksProxyPort", "9150");
                Document document = Jsoup.connect("https://wtfismyip.com/").get();
                String result = document.select("div[id=tor").text();
                System.out.println("testOrchidUsingSystemPropsProxy: " + result);
                System.setProperty("socksProxyHost", "");
                System.setProperty("socksProxyPort", "");
            } catch (Exception ex) {
                Logger.getLogger(OrchidDemo.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    };
    thread.start();
}

private static void testOrchidUsingSocket() {
    Thread thread = new Thread() {
        @Override
        public void run() {
            try {
                // This does not appear to leak the DNS lookup, but requires confirmation!
                Socket socket = client.getSocketFactory().createSocket("www.google.com", 80);
                PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);
                BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                writer.println("GET /");
                String line;
                System.out.println("testOrchidUsingSocket: ");
                while ((line = reader.readLine()) != null) {
                    System.out.println(line);
                }
                socket.close();
            } catch (Exception ex) {
                Logger.getLogger(OrchidDemo.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    };
    thread.start();
  }
}

Утечка DNS — это драма, но silvertunnel может помочь: NetAddressNameService Я надеюсь, что кто-то может знать лучший способ....

Ваше здоровье

person Wayno    schedule 20.07.2015
comment
Я использую тот же код, но получаю следующее сообщение: Невозможно построить схемы, потому что у нас недостаточно информации о каталоге. Следовательно, я не получаю обратный вызов - initializationProgress или initializationCompleted. Однако, когда я запускаю браузер TOR, он работает нормально, поэтому я знаю, что мой интернет-провайдер не блокирует TOR. Какие-нибудь мысли? - person Anshu Dutta; 22.08.2016
comment
Ага, та же проблема. Что-то сломано. Вы можете следить за обновлениями в репозитории maven... mvnrepository.com/artifact/org. биткойн/орхидея - person Wayno; 26.09.2016