netty trojan

发布时间:2023年12月27日

参考代码:https://github.com/kdyzm/trojan-client-netty
参考博客:
github代码作者的博客:https://blog.kdyzm.cn/post/71
trojan-go介绍:https://p4gefau1t.github.io/trojan-go/developer/trojan/
trojan协议介绍:https://trojan-gfw.github.io/trojan/protocol

使用

配置文件

在这里插入图片描述

查看是否生效

在这里插入图片描述

研究

责任链

在哪将数据发送到远程?

channelRead:48, TrojanClient2DestInboundHandler (com.kdyzm.trojan.client.netty.inbound)
invokeChannelRead:379, AbstractChannelHandlerContext (io.netty.channel)
invokeChannelRead:365, AbstractChannelHandlerContext (io.netty.channel)
fireChannelRead:357, AbstractChannelHandlerContext (io.netty.channel)
channelRead:1410, DefaultChannelPipeline$HeadContext (io.netty.channel)
invokeChannelRead:379, AbstractChannelHandlerContext (io.netty.channel)
access$600:61, AbstractChannelHandlerContext (io.netty.channel)
run:370, AbstractChannelHandlerContext$7 (io.netty.channel)
safeExecute:164, AbstractEventExecutor (io.netty.util.concurrent)
runAllTasks:472, SingleThreadEventExecutor (io.netty.util.concurrent)
run:500, NioEventLoop (io.netty.channel.nio)
run:989, SingleThreadEventExecutor$4 (io.netty.util.concurrent)
run:74, ThreadExecutorMap$2 (io.netty.util.internal)
run:30, FastThreadLocalRunnable (io.netty.util.concurrent)
run:842, Thread (java.lang)

发送流程

4-1线程 添加监听
com.kdyzm.trojan.client.netty.inbound.http.HttpProxyInboundHandler#proxyConnect
责任链:HttpServerCodec->HttpProxyInboundHandler
责任链初始化:com.kdyzm.trojan.client.netty.server.NettyServerInitializer#initChannel
主要目的:
1、创建客户端
2、向客户端添加监听(会在2-1线程中执行监听内容)。客户端创建完成后将服务端的责任链修改为TrojanClient2DestInboundHandler

2-1线程 添加任务 io.netty.channel.AbstractChannelHandlerContext#invokeChannelRead(io.netty.channel.AbstractChannelHandlerContext, java.lang.Object)
责任链:无(当责任链所属线程不是当前运行的线程时,会抛给所属线程)
主要目的:向服务端发送任务

4-1线程 添加任务
com.kdyzm.trojan.client.netty.inbound.TrojanClient2DestInboundHandler#channelRead
责任链:TrojanClient2DestInboundHandler
责任链初始化:com.kdyzm.trojan.client.netty.inbound.http.HttpProxyInboundHandler#proxyConnect
在这里插入图片描述
主要目的:调用客户端发送数据
在这里插入图片描述

接收流程

责任链:SslHandler->TrojanDest2ClientInboundHandler
责任链初始化:com.kdyzm.trojan.client.netty.inbound.http.HttpProxyInboundHandler#proxyConnect
在这里插入图片描述

主要目的:将客户端接收到的结果通过服务端返回给调用者

发收时线程切换?发的时候的切换为啥要那么复杂?是否可以优化?
每次请求都创建新的客户端与远程建立链接,这么做有点麻烦,是否可以让客户端与远程一致保持连接?这样代码逻辑应该会更清晰,不会出现"发送数据时线程反复切换"的情况。

发送协议

结合trojan协议规则分析代码实现

文章来源:https://blog.csdn.net/m1f2c3/article/details/135244300
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。