在线咨询
在线客服

工作日:9:00-24:00

商务合作

15366085265

QQ联系方式

1872421339

大客户经理

宋经理

客户经理
专业客户经理,解答您的疑问

Android 使用 SOCKS5 代理 ——最完整、最实用的实现指南

发布日期

目录

一、SOCKS5 Android 中的基本原理

二、使用 OkHttp SOCKS5 代理(推荐方式)

1】添加依赖:

2】创建 SOCKS5 客户端:

三、Retrofit 中使用 SOCKS5

四、原生 Socket 场景(MQTT / TCP

五、常见坑点

六、系统级代理(不推荐)

七、总结

一、SOCKS5 Android 中的基本原理

SOCKS5 工作在 TCP 层,不像 HTTP 代理那样只处理 HTTP 协议,因此它具有以下优势:
- 可代理各种协议(HTTPHTTPSWSMQTTTCP
- 支持用户名/密码认证
- 不修改上层数据包(对请求透明)
Android 中,可使用 java.net.Proxy 实现。

二、使用 OkHttp SOCKS5 代理(推荐方式)

1】添加依赖:

implementation 'com.squareup.okhttp3:okhttp:4.9.0'

2】创建 SOCKS5 客户端:

import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import java.net.InetSocketAddress;
import java.net.Proxy;
public class NetworkUtils {
    public static OkHttpClient createSocks5Client(String host, int port) {
        Proxy proxy = new Proxy(
                Proxy.Type.SOCKS,
                new InetSocketAddress(host, port)
        );
        return new OkHttpClient.Builder()
                .proxy(proxy)
                .build();
    }
}

三、Retrofit 中使用 SOCKS5

import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
import java.net.Proxy;
import java.net.InetSocketAddress;
public class ApiClient {
    private static final String BASE_URL = "https://api.example.com/";
    private static Retrofit retrofit;
    public static Retrofit getClient() {
        if (retrofit == null) {
            Proxy proxy = new Proxy(
                    Proxy.Type.SOCKS,
                    new InetSocketAddress("your-proxy-host", 1080)
            );
            OkHttpClient client = new OkHttpClient.Builder()
                    .proxy(proxy)
                    .build();

            retrofit = new Retrofit.Builder()
                    .baseUrl(BASE_URL)
                    .client(client)
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
        }
        return retrofit;
    }
}

四、原生 Socket 场景(MQTT / TCP

Proxy proxy = new Proxy(
    Proxy.Type.SOCKS,
    new InetSocketAddress("your-proxy-host", 1080)
);
Socket socket = new Socket(proxy);
socket.connect(new InetSocketAddress("target-host", 12345));

五、常见坑点

1. DNS 不一定走 SOCKS5(可能泄露真实 DNS
2. 若代理需要账号密码,需要自定义 SOCKS5 握手
3. 不要全局复用带代理的 OkHttpClient

六、系统级代理(不推荐)

Android 系统代理一般不支持 SOCKS5,适合调试,不适合生产使用。

七、总结

✔ OkHttp + Proxy.Type.SOCKS 是最佳实践
✔ Retrofit 可直接注入带代理的 OkHttpClient
✔ Socket 可直接传入 Proxy
注意 DNS 与认证问题