Netty的客户端使用Socks5代理,netty-handler-proxy源码浅析

Posted Oxye

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Netty的客户端使用Socks5代理,netty-handler-proxy源码浅析相关的知识,希望对你有一定的参考价值。

目录

前言

这个需求的出发点是这样,一个netty服务,里面有netty服务端提供给外部客户端连接,netty的客户端去连接外部的服务,但是外部服务的网络不一定和netty服务通,所以netty的客户端有时候就需要连一个跳板机去转发报文到外部服务。

这个跳板机也是netty实现的socks代理服务器,搭建流程可参考此文
netty系列之:从零到壹,搭建一个SOCKS代理服务器

注意,所以这篇讲的是我netty服务里的客户端,怎么走到socks代理服务器

使用

给客户端的通道加Socks5ProxyHandler处理器,就能直接转发到代理服务器,再到目标服务器.
Socks5里用户名和密码可以不填可以填,Socks4里不支持帐号密码

pipeline.addFirst("socks5CLientProxy", new Socks5ProxyHandler(
                    new InetSocketAddress(proxyIp, proxyPort)
                    , proxyUsername, proxyPassword));

源码浅析

版本

netty-handler-proxy模块现在国内网上资料较少,在我目前看来,在基于Netty程序的服务中,能提供给客户端(Bootstrap创建的)代理能力。
版本的话暂时是从netty-all 4.1.75.Final带过来的,最新的4.1.89我对比,netty-handler-proxy部分是没变化的

		<dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-all</artifactId>
            <version>4.1.75.Final</version>
        </dependency>

子模块的id

 <artifactId>netty-handler-proxy</artifactId>

目录结构

类名说明
ProxyHandler代理处理器的抽象类
Socks4ProxyHandlersocks4的代理处理器实现
Socks5ProxyHandlersocks5的代理处理器实现
HttpProxyHandlerhttp的代理处理器实现
ProxyConnectionEvent代理连接事件,看起来本身没什么实现
ProxyConnectException代理连接异常类
HttpProxyHandlerhttp的代理处理器实现

ProxyHandler

本身就是一个通道处理器

在重写的连接方法中,使用了目标服务器和代理服务器的信息,代理服务器地址就是初始化socks5那些实现类的时候,写在构造方法的

有添加编解码器的接口,socks5进行了实现

socks5的实现,添加了socks5的解码器

Socks5ProxyHandler

socks5的引用很多都是依赖artifactId是netty-codec-socks里的,这个依赖也是netty的sockd代理程序实现的主要依据

从发送连接命令的方法,可以看出,报文中携带了目标服务器的地址

socks5代理服务

我们把这个地址对应到socks代理服务,就可以看到使用的地方,就是代理服务发送给目标服务器信息的时候

待续

浅写一下netty客户端代理的使用和几个服务串起来的方式,有空再补充更多

以上是关于Netty的客户端使用Socks5代理,netty-handler-proxy源码浅析的主要内容,如果未能解决你的问题,请参考以下文章

阻止客户端关闭与 netty 服务器的连接(我需要设置啥)?

使用动态代理+Netty+Zookeeper+Protobuff手撸一个RPC框架

使用动态代理+Netty+Zookeeper+Protobuff手撸一个RPC框架

通过代理使用 netty 3.4.2.Final

Netty HTTP2 帧转发/代理 - 管道配置问题

代理网关设计与实现(基于NETTY)