首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓套接字主机未解析*.onion

安卓套接字主机未解析*.onion
EN

Stack Overflow用户
提问于 2013-11-06 18:54:32
回答 1查看 1.6K关注 0票数 4

我尝试在TOR网络中实现到隐藏服务的socket连接。我有它的隐藏服务的洋葱域名主机名。我在设备上安装了Orbot。我使用代理Orbot创建用于连接到隐藏服务的套接字。我是这样做的:

代码语言:javascript
复制
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");
    }

Socket成功理解代理设置,但当我尝试连接隐藏服务时发生错误:

代码语言:javascript
复制
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对其进行测试,一切正常。80端口上有nginx服务器。但是我的套接字不能解析这个洋葱地址。我认为这是因为InetAddress类无法解析传递的主机名的IP地址。但是,我如何设置正确的设置或使用不同的连接方式?有什么想法吗?非常感谢!

EN

回答 1

Stack Overflow用户

发布于 2015-11-19 19:34:08

你的问题很久以前就被问到了。我很惊讶,甚至连一个答案都没有给出。我想你现在可能已经找到解决方案了。然而,下面的答案是给那些可能在未来寻找这个问题的解决方案并找到这篇文章的人的。

我最近尝试使用洋葱地址通过tor将客户端套接字连接到服务器套接字时遇到了同样的问题。我花了很多时间研究来自Gaurdian Project link的开源程序的代码。

当我查看现已弃用的Orlib库时,我注意到其中使用了一个名为jsocks的库。我在http://sourceforge.net/projects/jsocks/找到了这个库,将它作为库安装在android studio中,并使用Socks5代理和SocksSocket成功连接。我还不确定它为什么有效,但它确实有效。

这是连接代码,.onion地址是模糊的。

代码语言:javascript
复制
 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();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19810179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档