From 578429777a11e8ba93412e4396a6f44f72db0dbb Mon Sep 17 00:00:00 2001 From: wujiawei <12345678> Date: Mon, 5 May 2025 23:12:04 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90fix=E3=80=91=E5=AE=A2=E6=88=B7?= =?UTF-8?q?=E7=AB=AF=E4=BB=A3=E7=90=86=E5=AE=A2=E6=88=B7=E7=AB=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...lientProxyClientTransferCloseAdvanced.java | 17 +++++++++--- ...SocksClientProxyClientTransferFilter.java} | 9 +++---- ...lientProxyClientVisitorTransferFilter.java | 1 - ...ocksClientProxyClientTransferHandler.java} | 10 +++---- ...NettySocksClientProxyClientRealSocket.java | 26 ++++++++++++------- ...roxyClientConnectTransferTypeAdvanced.java | 11 +++++--- 6 files changed, 44 insertions(+), 30 deletions(-) rename wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/socks/filter/{NettySocksClientProxyClientTransferRealFilter.java => NettySocksClientProxyClientTransferFilter.java} (81%) rename wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/socks/handler/{NettySocksClientProxyClientTransferRealHandler.java => NettySocksClientProxyClientTransferHandler.java} (87%) diff --git a/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/socks/advanced/ClientHandleDistributeSocksClientProxyClientTransferCloseAdvanced.java b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/socks/advanced/ClientHandleDistributeSocksClientProxyClientTransferCloseAdvanced.java index 1598b30..0ef446d 100644 --- a/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/socks/advanced/ClientHandleDistributeSocksClientProxyClientTransferCloseAdvanced.java +++ b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/socks/advanced/ClientHandleDistributeSocksClientProxyClientTransferCloseAdvanced.java @@ -1,12 +1,15 @@ package org.framework.lazy.cloud.network.heartbeat.client.netty.proxy.socks.advanced; import io.netty.channel.Channel; +import io.netty.handler.codec.socksx.v5.DefaultSocks5CommandResponse; +import io.netty.handler.codec.socksx.v5.Socks5AddressType; +import io.netty.handler.codec.socksx.v5.Socks5CommandStatus; import lombok.extern.slf4j.Slf4j; import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyChannelContext; import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg; import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.client.AbstractHandleSocksDistributeClientProxyClientTransferCloseTypeAdvanced; -import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.client.AbstractHandleSocksDistributeClientProxyServerTransferCloseTypeAdvanced; import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils; +import org.wu.framework.core.utils.ObjectUtils; @Slf4j @@ -24,10 +27,18 @@ public class ClientHandleDistributeSocksClientProxyClientTransferCloseAdvanced e protected void doHandler(NettyChannelContext nettyChannelContext, NettyProxyMsg nettyProxyMsg) { Channel channel = nettyChannelContext.channel(); // 关闭传输通道 - Channel proxyChannel = ChannelAttributeKeyUtils.getNextChannel(channel); - proxyChannel.close();// 真实通道关闭 + Channel visitorChannel = ChannelAttributeKeyUtils.getNextChannel(channel); + channel.close(); // 数据传输通道关闭 + if (ObjectUtils.isNotEmpty(visitorChannel)) { + Byte socks5AddressTypeByte = ChannelAttributeKeyUtils.getSocks5AddressType(visitorChannel); + Socks5AddressType socks5AddressType = Socks5AddressType.valueOf(socks5AddressTypeByte); + DefaultSocks5CommandResponse commandResponse = + new DefaultSocks5CommandResponse(Socks5CommandStatus.FAILURE, socks5AddressType); + visitorChannel.writeAndFlush(commandResponse); + visitorChannel.close();// 真实通道关闭 + } } } diff --git a/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/socks/filter/NettySocksClientProxyClientTransferRealFilter.java b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/socks/filter/NettySocksClientProxyClientTransferFilter.java similarity index 81% rename from wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/socks/filter/NettySocksClientProxyClientTransferRealFilter.java rename to wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/socks/filter/NettySocksClientProxyClientTransferFilter.java index d738ee4..5e6d7c6 100644 --- a/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/socks/filter/NettySocksClientProxyClientTransferRealFilter.java +++ b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/socks/filter/NettySocksClientProxyClientTransferFilter.java @@ -5,8 +5,7 @@ import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelPipeline; import io.netty.channel.socket.SocketChannel; import io.netty.handler.timeout.IdleStateHandler; -import org.framework.lazy.cloud.network.heartbeat.client.netty.permeate.tcp.handler.NettyTcpClientPermeateClientTransferRealHandler; -import org.framework.lazy.cloud.network.heartbeat.client.netty.proxy.socks.handler.NettySocksClientProxyClientTransferRealHandler; +import org.framework.lazy.cloud.network.heartbeat.client.netty.proxy.socks.handler.NettySocksClientProxyClientTransferHandler; import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelTypeAdapter; import org.framework.lazy.cloud.network.heartbeat.common.decoder.NettyProxyMsgDecoder; import org.framework.lazy.cloud.network.heartbeat.common.encoder.NettyProxyMsgEncoder; @@ -15,10 +14,10 @@ import org.framework.lazy.cloud.network.heartbeat.common.filter.DebugChannelInit /** * netty 客户端连接真实服服务端访客拦截器 */ -public class NettySocksClientProxyClientTransferRealFilter extends DebugChannelInitializer { +public class NettySocksClientProxyClientTransferFilter extends DebugChannelInitializer { private final ChannelTypeAdapter channelTypeAdapter; - public NettySocksClientProxyClientTransferRealFilter(ChannelTypeAdapter channelTypeAdapter) { + public NettySocksClientProxyClientTransferFilter(ChannelTypeAdapter channelTypeAdapter) { this.channelTypeAdapter = channelTypeAdapter; } @@ -42,6 +41,6 @@ public class NettySocksClientProxyClientTransferRealFilter extends DebugChannelI pipeline.addLast(new NettyProxyMsgDecoder(Integer.MAX_VALUE, 0, 4, -4, 0)); pipeline.addLast(new NettyProxyMsgEncoder()); - pipeline.addLast(new NettySocksClientProxyClientTransferRealHandler(channelTypeAdapter)); + pipeline.addLast(new NettySocksClientProxyClientTransferHandler(channelTypeAdapter)); } } diff --git a/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/socks/filter/NettySocksClientProxyClientVisitorTransferFilter.java b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/socks/filter/NettySocksClientProxyClientVisitorTransferFilter.java index d487547..d1d7917 100644 --- a/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/socks/filter/NettySocksClientProxyClientVisitorTransferFilter.java +++ b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/socks/filter/NettySocksClientProxyClientVisitorTransferFilter.java @@ -6,7 +6,6 @@ import io.netty.channel.ChannelPipeline; import io.netty.channel.socket.SocketChannel; import io.netty.handler.timeout.IdleStateHandler; import org.framework.lazy.cloud.network.heartbeat.client.netty.proxy.socks.handler.NettySocksClientProxyClientVisitorTransferHandler; -import org.framework.lazy.cloud.network.heartbeat.client.netty.proxy.socks.handler.NettySocksClientProxyServerTransferHandler; import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelTypeAdapter; import org.framework.lazy.cloud.network.heartbeat.common.decoder.NettyProxyMsgDecoder; import org.framework.lazy.cloud.network.heartbeat.common.encoder.NettyProxyMsgEncoder; diff --git a/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/socks/handler/NettySocksClientProxyClientTransferRealHandler.java b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/socks/handler/NettySocksClientProxyClientTransferHandler.java similarity index 87% rename from wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/socks/handler/NettySocksClientProxyClientTransferRealHandler.java rename to wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/socks/handler/NettySocksClientProxyClientTransferHandler.java index 5cdded4..e10250f 100644 --- a/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/socks/handler/NettySocksClientProxyClientTransferRealHandler.java +++ b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/socks/handler/NettySocksClientProxyClientTransferHandler.java @@ -8,17 +8,14 @@ import lombok.extern.slf4j.Slf4j; import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelTypeAdapter; import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg; import org.framework.lazy.cloud.network.heartbeat.common.constant.ProxyMessageType; -import org.framework.lazy.cloud.network.heartbeat.common.constant.TcpMessageType; import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils; -/** - * 客户端访客通信通道 处理器 - */ + @Slf4j -public class NettySocksClientProxyClientTransferRealHandler extends SimpleChannelInboundHandler { +public class NettySocksClientProxyClientTransferHandler extends SimpleChannelInboundHandler { private final ChannelTypeAdapter channelTypeAdapter; - public NettySocksClientProxyClientTransferRealHandler(ChannelTypeAdapter channelTypeAdapter) { + public NettySocksClientProxyClientTransferHandler(ChannelTypeAdapter channelTypeAdapter) { this.channelTypeAdapter = channelTypeAdapter; } @@ -29,7 +26,6 @@ public class NettySocksClientProxyClientTransferRealHandler extends SimpleChanne @Override public void channelRead0(ChannelHandlerContext ctx, NettyProxyMsg nettyProxyMsg) throws Exception { - Channel channel = ctx.channel(); channelTypeAdapter.handler(ctx, nettyProxyMsg); } diff --git a/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/socks/socket/NettySocksClientProxyClientRealSocket.java b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/socks/socket/NettySocksClientProxyClientRealSocket.java index cec024c..dda4c58 100644 --- a/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/socks/socket/NettySocksClientProxyClientRealSocket.java +++ b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/socks/socket/NettySocksClientProxyClientRealSocket.java @@ -6,10 +6,8 @@ import io.netty.channel.*; import io.netty.channel.socket.nio.NioSocketChannel; import lombok.extern.slf4j.Slf4j; import org.framework.lazy.cloud.network.heartbeat.client.config.NettyClientProperties; -import org.framework.lazy.cloud.network.heartbeat.client.netty.permeate.tcp.filter.NettyTcpClientPermeateClientRealFilter; -import org.framework.lazy.cloud.network.heartbeat.client.netty.permeate.tcp.filter.NettyTcpClientPermeateClientTransferRealFilter; import org.framework.lazy.cloud.network.heartbeat.client.netty.proxy.socks.filter.NettySocksClientProxyClientRealFilter; -import org.framework.lazy.cloud.network.heartbeat.client.netty.proxy.socks.filter.NettySocksClientProxyClientTransferRealFilter; +import org.framework.lazy.cloud.network.heartbeat.client.netty.proxy.socks.filter.NettySocksClientProxyClientTransferFilter; import org.framework.lazy.cloud.network.heartbeat.common.NettyRealIdContext; import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelTypeAdapter; import org.framework.lazy.cloud.network.heartbeat.common.advanced.HandleChannelTypeAdvanced; @@ -39,7 +37,10 @@ public class NettySocksClientProxyClientRealSocket { EventLoopGroup eventLoopGroup = EventLoopGroupFactory.createClientWorkGroup(); Bootstrap bootstrap = new Bootstrap(); - bootstrap.group(eventLoopGroup).channel(NioSocketChannel.class) + bootstrap + .group(eventLoopGroup) + .channel(NioSocketChannel.class) + .option(ChannelOption.TCP_NODELAY, true) // 设置读缓冲区为2M .option(ChannelOption.SO_RCVBUF, 2048 * 1024) // 设置写缓冲区为1M @@ -47,7 +48,6 @@ public class NettySocksClientProxyClientRealSocket { .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 1000 * 60)//连接超时时间设置为 60 秒 .option(ChannelOption.WRITE_BUFFER_WATER_MARK, new WriteBufferWaterMark(1024 * 1024, 1024 * 1024 * 2)) .handler(new NettySocksClientProxyClientRealFilter()) - ; @@ -66,14 +66,20 @@ public class NettySocksClientProxyClientRealSocket { // 连接服务端 然后绑定通道 // 新建一个通道处理 - newVisitorConnect2Server(clientId, + newVisitorConnect2Server( + clientId, clientTargetIp, clientTargetPort, - visitorId, realChannel, nettyClientProperties, handleChannelTypeAdvancedList); - - + visitorId, + realChannel, + nettyClientProperties, + handleChannelTypeAdvancedList + ); } else { log.error("客户:【{}】,无法连接当前网络内的目标IP:【{}】,目标端口:【{}】", clientId, clientTargetIp, clientTargetPort); + // DefaultSocks5CommandResponse commandResponse = new DefaultSocks5CommandResponse(Socks5CommandStatus.FAILURE, socks5AddressType); + // transferChannel.writeAndFlush(commandResponse); + // realChannel.close(); } }); } catch (Exception e) { @@ -108,7 +114,7 @@ public class NettySocksClientProxyClientRealSocket { .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 1000 * 60)//连接超时时间设置为 60 秒 .option(ChannelOption.WRITE_BUFFER_WATER_MARK, new WriteBufferWaterMark(1024 * 1024, 1024 * 1024 * 2)) - .handler(new NettySocksClientProxyClientTransferRealFilter(new ChannelTypeAdapter(handleChannelTypeAdvancedList))) + .handler(new NettySocksClientProxyClientTransferFilter(new ChannelTypeAdapter(handleChannelTypeAdvancedList))) ; String inetHost = nettyClientProperties.getInetHost(); diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/proxy/socks/advanced/ServerHandleSocksReportClientProxyClientConnectTransferTypeAdvanced.java b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/proxy/socks/advanced/ServerHandleSocksReportClientProxyClientConnectTransferTypeAdvanced.java index df4cf78..05e9eb9 100644 --- a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/proxy/socks/advanced/ServerHandleSocksReportClientProxyClientConnectTransferTypeAdvanced.java +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/proxy/socks/advanced/ServerHandleSocksReportClientProxyClientConnectTransferTypeAdvanced.java @@ -14,7 +14,6 @@ import org.framework.lazy.cloud.network.heartbeat.common.NettyTransferChannelCon import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyChannelContext; import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg; import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.server.AbstractHandleSocksReportClientProxyClientConnectionTransferTypeAdvanced; -import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.server.AbstractHandleSocksReportClientProxyServerConnectionTransferTypeAdvanced; import org.framework.lazy.cloud.network.heartbeat.common.constant.ProxyMessageType; import org.framework.lazy.cloud.network.heartbeat.common.decoder.TransferDecoder; import org.framework.lazy.cloud.network.heartbeat.common.factory.EventLoopGroupFactory; @@ -49,19 +48,23 @@ public class ServerHandleSocksReportClientProxyClientConnectTransferTypeAdvanced Integer port = Integer.parseInt(nettyProxyMsg.getTargetPortString()); byte[] data = nettyProxyMsg.getData(); byte[] visitorId = nettyProxyMsg.getVisitorId(); - byte[] clientId = nettyProxyMsg.getClientId(); + byte[] targetClientId = nettyProxyMsg.getClientId(); String msgVisitorId = new String(visitorId); - ChannelAttributeKeyUtils.buildClientId(transferChannel, clientId); + ChannelAttributeKeyUtils.buildClientId(transferChannel, targetClientId); ChannelAttributeKeyUtils.buildVisitorId(transferChannel, msgVisitorId); NettyTransferChannelContext.pushVisitor(transferChannel, msgVisitorId); // 客户端连接客户端传输通道 - Channel loadBalance = ChannelContext.getLoadBalance(clientId); + Channel loadBalance = ChannelContext.getLoadBalance(targetClientId); if(ObjectUtils.isNotEmpty(loadBalance)) { // 下发创建新链接指令 NettyProxyMsg otherClientConnectServer = new NettyProxyMsg(); otherClientConnectServer.setData(data); + otherClientConnectServer.setClientTargetIp(host); + otherClientConnectServer.setClientTargetPort(port); + otherClientConnectServer.setVisitorId(visitorId); + otherClientConnectServer.setClientId(targetClientId); otherClientConnectServer.setType(ProxyMessageType.SOCKS_DISTRIBUTE_CLIENT_PROXY_CLIENT_OTHER_TRANSFER_CONNECTION_); loadBalance.writeAndFlush(otherClientConnectServer);