4

隠しサービスへのソケット接続をTORネットワークに実装しようとしています。隠しサービスのオニオンドメインホスト名があります。Orbot をデバイスにインストールしました。プロキシ Orbot を使用して非表示のサービスに接続するためのソケットを作成します。私はこのようにしました:

Proxy proxy = new Proxy(Proxy.Type.SOCKS, new InetSocketAddress(
            "localhost", 9050));
    clientSocket = new Socket(proxy);

    InetSocketAddress remoteAddress = InetSocketAddress.createUnresolved(HS_DOMEN, HS_PORT);

    if (remoteAddress.isUnresolved())
        Log.i("LOG", "address unresolved!!!");

    Log.i("LOG", "start connect to inet addr");
    clientSocket.connect(remoteAddress, CONNECT_TIMEOUNT);
    Log.i("LOG", "after connect ward");

    if (clientSocket.isConnected()) {
        Log.i("LOG", "socket connected");
    }

ソケットはプロキシ設定を正常に理解しましたが、非表示のサービスに接続しようとするとエラーが発生します:

11-06 14:34:57.215: W/System.err(32101): java.net.UnknownHostException: Host is 
unresolved: *.onion
11-06 14:34:57.215: W/System.err(32101):    at java.net.Socket.connect(Socket.java:825)
11-06 14:34:57.215: W/System.err(32101):    at ru.dtlbox.example.clientsample.MainActivity.connectSocket(MainActivity.java:79)
11-06 14:34:57.215: W/System.err(32101):    at ru.dtlbox.example.clientsample.MainActivity$2.run(MainActivity.java:128)
11-06 14:34:57.215: W/System.err(32101):    at java.lang.Thread.run(Thread.java:856)

Orweb を使用してテストしようとしたため、Onion ホスト名は有効です。すべて正常に動作します。80ポートにnginxサーバーがあります。しかし、私のソケットはこのタマネギのアドレスを解決できません。InetAddress クラスが渡されたホスト名の IP アドレスを解決できないために発生すると思います。しかし、どうすれば正しい設定をセットアップしたり、別の方法で接続したりできますか? アイデアはありますか?どうもありがとうございます!

4

1 に答える 1

0

あなたの質問はかなり前に尋ねられました。1つも答えられなかったことに驚いています。おそらく、今までに解決策を見つけたかもしれないと思います。ただし、次の回答は、将来この問題の解決策を探し、この投稿を見つける可能性がある人向けです。

最近、オニオンアドレスを使用してクライアントソケットをサーバーソケットに接続しようとして同じ問題が発生しました。私は、ガーディアン プロジェクトのリンクからオープン ソース プログラムのコードを調査するのに何時間も費やしました。

jsocks というライブラリが使用されていることに気付いたのは、廃止された Orlib ライブラリを調べていたときです。http://sourceforge.net/projects/jsocks/でライブラリを見つけ、Android Studio にライブラリとしてインストールし、Socks5 プロキシと SocksSocket を使用して正常に接続しました。なぜ機能するのかはまだわかりませんが、機能します。

これが接続コードです。.onion アドレスは隠されています。

 private void connect(){
      new Thread(new Runnable() {
          @Override
          public void run() {
              System.out.println("Orbot Running: " + OrbotHelper.isOrbotRunning(getApplicationContext()));

              int proxyPort = 9050;
              String proxyHost = "127.0.0.1";
              String remoteHost = "[address].onion";
              int remotePort = 12345;

              try {
                  socks5Proxy = new Socks5Proxy(proxyHost, proxyPort);
                  socks5Proxy.resolveAddrLocally(false);
                  socket = new SocksSocket(socks5Proxy, remoteHost, remotePort);

                  out = new PrintWriter(socket.getOutputStream(), true);
                  receive();
              }catch (IOException e){
                  e.printStackTrace();
              }
          }
      }).start();
}
于 2015-11-19T11:34:07.803 に答える