如何在android应用程序中使用socks5代理?

如何在android应用程序中使用socks5代理?,android,proxy,socks,Android,Proxy,Socks,其目的是在android应用程序中的所有连接中使用socks5。正如这里所说的, 我只需要使用系统属性设置端口、主机名和socks版本: System.setProperty("socksProxyHost",addr); System.setProperty("socksProxyPort",port); System.setProperty("socksProxyVersion","5") 然后创建一个连接: protected String doInBackground(String..

其目的是在android应用程序中的所有连接中使用socks5。正如这里所说的, 我只需要使用系统属性设置端口、主机名和socks版本:

System.setProperty("socksProxyHost",addr);
System.setProperty("socksProxyPort",port);
System.setProperty("socksProxyVersion","5")
然后创建一个连接:

protected String doInBackground(String... sUrl) {

    OutputStream output = null;
    InputStream input = null;
    byte data[] = new byte[4096];
    int total = 0, fileNameLength = sUrl[0].length();
    int count;
    try {
        // Download file from URL
        URL url = new URL(sUrl[0]);
        SocketAddress socketAddress;
        connection = (HttpsURLConnection)url.openConnection();

        //Accepting all certs
        TrustManager[] trustManagers = new TrustManager[] {
                new X509TrustManager() {
                    public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                        return null;
                    }
                    public void checkClientTrusted(X509Certificate[] certs, String authType) {  }
                    public void checkServerTrusted(X509Certificate[] certs, String authType) {  }
                }
        };

        HostnameVerifier hostnameVerifier = new HostnameVerifier() {
            @Override
            public boolean verify(String s, SSLSession sslSession) {
                return s.equals(sslSession.getPeerHost());
            }
        };

        SSLContext sslContext = SSLContext.getInstance("TLS");
        sslContext.init(null, trustManagers, null);

        connection.setSSLSocketFactory(sslContext.getSocketFactory());
        connection.setHostnameVerifier(hostnameVerifier);

        input = connection.getInputStream();
但当我嗅探流量时,它总是使用袜子。Http、Https代理按预期工作。然后,如果我使用直接指定的代理调用套接字构造函数,我尝试找出创建的套接字类型:

Socket socket = new Socket(new Proxy(Proxy.Type.SOCKS, new InetSocketAddress(proxyAddr, proxyPort)));
Class clazzSocks  = socket.getClass();
Method setSockVersion  = null;
Field sockImplField = null;
SocketImpl socksimpl = null;
sockImplField = clazzSocks.getDeclaredField("impl");
sockImplField.setAccessible(true);
socksimpl  = (SocketImpl) sockImplField.get(socket);
Class clazzSocksImpl  =  socksimpl.getClass();

它表明clazzSocksImpl是纯socketImpl,而不是我所期望的socksocketImpl。有人能告诉我我做错了什么吗?

你找到解决办法了吗?