让 Java SOCKS 目标保持未解析
创建 Java SOCKS 连接时保留目标主机名,避免本地解析目标 DNS。
SOCKS 连接可能在代理有机会解析目标之前就在本地失败。请检查你的代码在构造套接字地址时是否解析了目标。
对于 Java SOCKS 套接字,请用未解析的目标地址保留目标主机名:
Proxy proxy = new Proxy(Proxy.Type.SOCKS,
new InetSocketAddress("203.0.113.10", 1080));
Socket socket = new Socket(proxy);
socket.connect(InetSocketAddress.createUnresolved(
"destination.example", 443), 5000);端点和主机名都是占位符;对于允许的公共目标测试,请使用你的 SOCKS5 服务或 SOCKS5 代理列表中的候选。关键区别在于:为访问代理而解析代理,与为 SOCKS 交换保留目标名称。
连接之后,HTTPS 客户端仍然需要针对目标主机名的 TLS 会话。TLS 封装不应把代理的主机名当作对端身份。
也要检查更高层的代码:库可能在调用你的连接器之前自行进行查找。在此套接字地址中保留主机名,无法撤销应用程序其他地方已执行的查找。