-
在线客服
工作日:9:00-24:00
-
商务合作
15366085265
-
QQ联系方式
1872421339
-
大客户经理
宋经理
目录
SOCKS5 工作在 TCP 层,不像 HTTP 代理那样只处理 HTTP 协议,因此它具有以下优势:
- 可代理各种协议(HTTP、HTTPS、WS、MQTT、TCP)
- 支持用户名/密码认证
- 不修改上层数据包(对请求透明)
在 Android 中,可使用 java.net.Proxy 实现。
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
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();
}
}
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;
}
}
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 与认证问题