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

前言

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

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

注意,所以这篇讲的是我netty服务里的客户端Bootstrap,怎么走到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客户端代理的使用和几个服务串起来的方式,有空再补充更多

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值