我在特定端口上设置了 Tor,并希望通过该端口访问该网站。以下代码在 Android 7.0 中完美运行,但在 android 6.0 中出现以下错误。可能是什么问题?Tor 服务在我发送请求的特定端口成功运行。运行这个库的示例代码(https://github.com/jehy/Tor-Onion-Proxy-Library)
错误
java.net.UnknownHostException:主机未解析:google.com W/System.err:在 java.net.Socket.connect(Socket.java:893) W/System.err:在 cz.msebera.android.httpclient.conn .socket.PlainConnectionSocketFactory.connectSocket(PlainConnectionSocketFactory.java:74) W/System.err: 在 com.example.nandan.sampletorproxyapp.MyConnectionSocketFactory.connectSocket(MyConnectionSocketFactory.java:33) W/System.err: 在 cz.msebera.android .httpclient.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:134) W/System.err:在 cz.msebera.android.httpclient.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:353) W/System。错误:在 cz.msebera.android.httpclient.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:380) W/System.err:在 cz.msebera.android.httpclient.impl.execchain.MainClientExec.execute(MainClientExec.java:236) W/System.err: 在 cz.msebera.android.httpclient.impl.execchain.ProtocolExec.execute(ProtocolExec.java: 184) W/System.err: 在 cz.msebera.android.httpclient.impl.execchain.RetryExec.execute(RetryExec.java:88) W/System.err: 在 cz.msebera.android.httpclient.impl.execchain。 RedirectExec.execute(RedirectExec.java:110) W/System.err:在 cz.msebera.android.httpclient.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184) W/System.err:在 cz.msebera。 android.httpclient.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82) W/System.err: 在 cz.msebera.android.httpclient.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:55) W/System .err:在 com.example.nandan。sampletorproxyapp.MainActivity$TorTask.doInBackground(MainActivity.java:85) W/System.err: 在 com.example.nandan.sampletorproxyapp.MainActivity$TorTask.doInBackground(MainActivity.java:60) W/System.err: 在 android。 os.AsyncTask$2.call(AsyncTask.java:295) W/System.err: 在 java.util.concurrent.FutureTask.run(FutureTask.java:237) W/System.err: 在 android.os.AsyncTask$SerialExecutor $1.run(AsyncTask.java:234) W/System.err:在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) W/System.err:在 java.util.concurrent.ThreadPoolExecutor$Worker。运行(ThreadPoolExecutor.java:588)W/System.err:在 java.lang.Thread.run(Thread.java:818)doInBackground(MainActivity.java:60) W/System.err: 在 android.os.AsyncTask$2.call(AsyncTask.java:295) W/System.err: 在 java.util.concurrent.FutureTask.run(FutureTask.java :237) W/System.err: 在 android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) W/System.err: 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) W/System.err:在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) W/System.err:在 java.lang.Thread.run(Thread.java:818)doInBackground(MainActivity.java:60) W/System.err: 在 android.os.AsyncTask$2.call(AsyncTask.java:295) W/System.err: 在 java.util.concurrent.FutureTask.run(FutureTask.java :237) W/System.err: 在 android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) W/System.err: 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) W/System.err:在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) W/System.err:在 java.lang.Thread.run(Thread.java:818)ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) W/System.err: at java.lang.Thread.run(线程.java:818)ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) W/System.err: at java.lang.Thread.run(线程.java:818)
主要活动
HttpClient httpClient = getNewHttpClient();
int port = onionProxyManager.getIPv4LocalHostSocksPort();
InetSocketAddress socksaddr = new InetSocketAddress("127.0.0.1", port);
HttpClientContext context = HttpClientContext.create();
context.setAttribute("socks.address", socksaddr);
HttpGet httpGet = new HttpGet("http://google.co.in");
HttpResponse httpResponse = httpClient.execute(httpGet, context); // GETTING ERROR HERE
static class FakeDnsResolver implements DnsResolver {
@Override
public InetAddress[] resolve(String host) throws UnknownHostException {
return new InetAddress[] { InetAddress.getByAddress(new byte[] { 1, 1, 1, 1 }) };
}
}
public HttpClient getNewHttpClient() {
Registry<ConnectionSocketFactory> reg = RegistryBuilder.<ConnectionSocketFactory>create()
.register("http", new MyConnectionSocketFactory())
.build();
PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(reg,new FakeDnsResolver());
return HttpClients.custom()
.setConnectionManager(cm)
.build();
}
MyConnectionSocketFactory.java
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.Socket;
import cz.msebera.android.httpclient.HttpHost;
import cz.msebera.android.httpclient.conn.socket.PlainConnectionSocketFactory;
import cz.msebera.android.httpclient.protocol.HttpContext;
public class MyConnectionSocketFactory extends PlainConnectionSocketFactory {
@Override
public Socket createSocket(final HttpContext context) {
InetSocketAddress socksaddr = (InetSocketAddress) context.getAttribute("socks.address");
Proxy proxy = new Proxy(Proxy.Type.SOCKS, socksaddr);
return new Socket(proxy);
}
@Override
public Socket connectSocket(
int connectTimeout,
Socket socket,
final HttpHost host,
final InetSocketAddress remoteAddress,
final InetSocketAddress localAddress,
final HttpContext context) throws IOException{
InetSocketAddress unresolvedRemote = InetSocketAddress
.createUnresolved(host.getHostName(), remoteAddress.getPort());
return super.connectSocket(connectTimeout, socket, host, unresolvedRemote, localAddress, context);
}
}