对于 OpenJDK 25 的套接字实现,用 socksProxyVersion 属性选择 SOCKS4。可以在启动应用时提供该属性:

java -DsocksProxyVersion=4 YourApplication

应用仍然可以显式提供代理端点:

Proxy proxy = new Proxy(Proxy.Type.SOCKS,
    new InetSocketAddress("proxy.example", 1080));
try (Socket socket = new Socket(proxy)) {
    socket.connect(new InetSocketAddress("192.0.2.10", 80), 5000);
    socket.setSoTimeout(10000);
}

这些地址是占位符。来自SOCKS4 代理列表的未经认证的地址可以填入代理主机和端口,用于允许的公共 IPv4 测试;实际的目标 IPv4 地址和端口需另行指定。此代码片段会打开并关闭 TCP 流;应用协议会在该代码块内使用已连接的流。

即使构造函数收到的是普通的显式 SOCKS Proxy,OpenJDK 25 的实现仍会检查版本属性。公开的 Proxy 对象本身只包含类型和地址,并不包含每个对象的 SOCKS 版本字段。

版本属性具有 JVM 全局作用域。如果并发工作负载需要不同的 SOCKS 版本,不要在单个请求前后来回切换。请改用支持按连接选择所需版本的客户端接口。旧 JDK 示例中的私有 setV4 反射不是受支持的配置接口。

相关文章