2015-03-20 3 views
3

Я пытаюсь реализовать Orchid Tor lib с кодом Java; к сожалению, и из-за отсутствия документации я не могу заставить его работать, это то, что я сделал:Java Tor Lib: Как настроить Orchid Tor Lib с 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); 

} 
+1

Ааа Tor с Явой, я убил себя, чтобы найти способ, чтобы заставить его работать в течение недели. в конце концов я сдался и использовал python controler (pytorctl), затем запустил версию python thourgh Runtime class в java – nafas

+0

yep, это так сложно, потому что нет четкой документации, я работаю над этой проблемой через месяц, на любом туто, как вы это сделали ? – MoadKey

+0

Непонятно, чего вы хотите достичь. Вы просто хотите подключиться к Java через Tor или хотите настроить прокси-сервер для другого приложения? Если вы хотите, чтобы ваша Java-связь через тор, вы могли бы проверить SilverTunnel-NG https://sourceforge.net/p/silvertunnel-ng/wiki/Sample%20Code%20%3A%20Check%20if%20Tor%20Connection%20works/ – B4dT0bi

ответ

6

Это, похоже, работает с использованием Java8.

Зависимости: орхидеи 1.0.0.jar, jsoup-1.8.2.jar & Обще-ю-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 Я надеюсь, что кто-то может знать о лучшем способе ....

Приветствия

+1

Я использую тот же код, но получаю следующее сообщение: «Невозможно построить схемы, потому что у нас недостаточно информации о директории. Следовательно, я не получаю обратный вызов - initializationProgress или initializationCompleted. Однако, когда я запускаю браузер TOR, он работает нормально, поэтому я знаю, что мой интернет-провайдер не блокирует TOR. Есть предположения? –

+0

Да, такой же проблема. Что-то сломалось. Вы можете следить за реестром maven для обновлений ... http://mvnrepository.com/artifact/org.bitcoinj/orchid – Wayno

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