对于现有的 Netty bootstrap/pipeline,若要让 SOCKS 服务器解析目标:

bootstrap.resolver(NoopAddressResolverGroup.INSTANCE);

pipeline.addFirst(
    new Socks5ProxyHandler(new InetSocketAddress("127.0.0.1", 1080))
);

bootstrap.connect(
    InetSocketAddress.createUnresolved("example.com", 443)
);

代理端点是本地端口 1080;未解析的连接目标是 example.com:443。不要将代理地址用于两种角色,也不要在处理器收到之前解析名称。对于允许的公共代理路由上的公共目标,SOCKS5 代理列表为处理器的代理端点提供候选。

将 Socks5ProxyHandler 放在交换目标流量的处理器之前。等待它的代理连接 future,而不只是等待通道到达监听器。被拒绝的方法或目标属于这个设置阶段。

对于 HTTPS,下一层 TLS 使用目标的主机名、所需的验证与信任——而不是 SOCKS 端点的身份。只有之后才开始 HTTP/应用交换。

该片段不提供事件循环、通道类型、TLS/HTTP 处理器或常规错误处理。请选择与认证需求匹配的 SOCKS 构造函数;HTTP Basic 处理器是另一种协议。

仅在此下游处理器负责主机名解析的地方使用 no-op resolver。其他连接可能需要本地查询。诊断故障时,请把 resolver 输出、代理 future、TLS 和应用结果分开。

相关文章