把 Netty 的 SOCKS 协商放在应用协议之前
在应用流量之前安排 Netty SOCKS 代理处理器,并在需要由代理侧进行 DNS 时保留未解析的目标地址。
对于现有的 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 和应用结果分开。