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 | 代理处理器的抽象类 |
Socks4ProxyHandler | socks4的代理处理器实现 |
Socks5ProxyHandler | socks5的代理处理器实现 |
HttpProxyHandler | http的代理处理器实现 |
ProxyConnectionEvent | 代理连接事件,看起来本身没什么实现 |
ProxyConnectException | 代理连接异常类 |
HttpProxyHandler | http的代理处理器实现 |
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框架