From 9784cc65b69625054f5970a1485dd3a56cb48647 Mon Sep 17 00:00:00 2001 From: wujiawei <12345678> Date: Tue, 24 Sep 2024 20:19:43 +0800 Subject: [PATCH] =?UTF-8?q?[fix]=20=20=E9=80=9A=E4=BF=A1=E9=80=9A=E9=81=93?= =?UTF-8?q?=E7=BB=9F=E4=B8=80=E7=BB=91=E5=AE=9A=E5=AE=A2=E6=88=B7=E7=AB=AF?= =?UTF-8?q?ID=EF=BC=8C=E8=AE=BF=E5=AE=A2ID?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...annelConnectionSuccessfulTypeAdvanced.java | 3 ++- ...ttyClientPermeateClientVisitorHandler.java | 5 ++--- ...ntPermeateClientVisitorTransferSocket.java | 21 +++++-------------- .../network/heartbeat/common/MessageType.java | 4 +++- .../common/enums/MessageTypeEnums.java | 2 +- ...annelConnectionSuccessfulTypeAdvanced.java | 10 ++++++--- ...eateChannelInitSuccessfulTypeAdvanced.java | 13 ++++++------ ...annelConnectionSuccessfulTypeAdvanced.java | 6 ++++++ ...verHandleReportDisconnectTypeAdvanced.java | 2 +- .../netty/handler/NettyServerHandler.java | 20 ++++++++++++++---- ...ttyServerPermeateClientVisitorHandler.java | 2 +- 11 files changed, 51 insertions(+), 37 deletions(-) diff --git a/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/advanced/ClientHandleDistributeClientTransferClientPermeateChannelConnectionSuccessfulTypeAdvanced.java b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/advanced/ClientHandleDistributeClientTransferClientPermeateChannelConnectionSuccessfulTypeAdvanced.java index 1f57155..681245a 100644 --- a/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/advanced/ClientHandleDistributeClientTransferClientPermeateChannelConnectionSuccessfulTypeAdvanced.java +++ b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/advanced/ClientHandleDistributeClientTransferClientPermeateChannelConnectionSuccessfulTypeAdvanced.java @@ -11,6 +11,7 @@ import org.framework.lazy.cloud.network.heartbeat.common.advanced.client.Abstrac import org.framework.lazy.cloud.network.heartbeat.common.enums.MessageTypeEnums; import org.wu.framework.spring.utils.SpringContextHolder; +import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @@ -45,7 +46,7 @@ public class ClientHandleDistributeClientTransferClientPermeateChannelConnection String visitorId=new String(msgVisitorId); Integer visitorPort=Integer.parseInt(new String(msgVisitorPort)); NettyClientProperties nettyClientProperties = SpringContextHolder.getBean(NettyClientProperties.class); - List handleChannelTypeAdvancedList = SpringContextHolder.getApplicationContext().getBeansOfType(HandleChannelTypeAdvanced.class).values().stream().collect(Collectors.toList()); + List handleChannelTypeAdvancedList = new ArrayList<>(SpringContextHolder.getApplicationContext().getBeansOfType(HandleChannelTypeAdvanced.class).values()); NettyClientPermeateClientRealSocket.buildRealServer( clientId, clientTargetIp, diff --git a/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/handler/NettyClientPermeateClientVisitorHandler.java b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/handler/NettyClientPermeateClientVisitorHandler.java index 6ffa8f6..6579250 100644 --- a/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/handler/NettyClientPermeateClientVisitorHandler.java +++ b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/handler/NettyClientPermeateClientVisitorHandler.java @@ -21,7 +21,7 @@ import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeK import java.util.UUID; @Slf4j -public class NettyClientPermeateClientVisitorHandler extends SimpleChannelInboundHandler { +public class NettyClientPermeateClientVisitorHandler extends SimpleChannelInboundHandler { private final InternalNetworkClientPermeateClientVisitor internalNetworkClientPermeateClientVisitor; // private final NettyChannelPool nettyChannelPool = new DefaultNettyChannelPool(10); @@ -50,11 +50,10 @@ public class NettyClientPermeateClientVisitorHandler extends SimpleChannelInboun // 当前通道绑定访客ID ChannelAttributeKeyUtils.buildVisitorId(visitorChannel, visitorId); - internalNetworkClientPermeateClientVisitor.setVisitorId(visitorId); // 判断是否有可用的通道 如果没有创建新的通道 // Channel transferChannel = nettyChannelPool.availableChannel(visitorId); // 创建访客连接客户端通道 - NettyClientPermeateClientVisitorTransferSocket.buildTransferServer(internalNetworkClientPermeateClientVisitor); + NettyClientPermeateClientVisitorTransferSocket.buildTransferServer(internalNetworkClientPermeateClientVisitor,visitorChannel); log.info("客户端渗透客户端访客端口连接成功了"); super.channelActive(ctx); } diff --git a/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/socket/NettyClientPermeateClientVisitorTransferSocket.java b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/socket/NettyClientPermeateClientVisitorTransferSocket.java index a5f7fea..9ad31ff 100644 --- a/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/socket/NettyClientPermeateClientVisitorTransferSocket.java +++ b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/socket/NettyClientPermeateClientVisitorTransferSocket.java @@ -28,18 +28,9 @@ public class NettyClientPermeateClientVisitorTransferSocket { /** * 连接服务端通信通道 */ - public static void buildTransferServer(InternalNetworkClientPermeateClientVisitor internalNetworkClientPermeateClientVisitor) { - newTransferConnect2Server(internalNetworkClientPermeateClientVisitor); - } + public static void buildTransferServer(InternalNetworkClientPermeateClientVisitor internalNetworkClientPermeateClientVisitor,Channel visitorChannel) { - /** - * 连接服务端通信通道 - *

- * internalNetworkPermeateServerVisitor - */ - protected static void newTransferConnect2Server(InternalNetworkClientPermeateClientVisitor internalNetworkClientPermeateClientVisitor) { - Bootstrap bootstrap = new Bootstrap(); bootstrap.group(eventLoopGroup) .channel(NioSocketChannel.class) @@ -66,7 +57,7 @@ public class NettyClientPermeateClientVisitorTransferSocket { String targetIp = internalNetworkClientPermeateClientVisitor.getTargetIp(); Integer targetPort = internalNetworkClientPermeateClientVisitor.getTargetPort(); - String visitorId = internalNetworkClientPermeateClientVisitor.getVisitorId(); + String visitorId = ChannelAttributeKeyUtils.getVisitorId(visitorChannel); Integer visitorPort = internalNetworkClientPermeateClientVisitor.getVisitorPort(); String toClientId = internalNetworkClientPermeateClientVisitor.getToClientId(); @@ -94,17 +85,15 @@ public class NettyClientPermeateClientVisitorTransferSocket { ChannelAttributeKeyUtils.buildVisitorId(transferChannel, visitorId); ChannelAttributeKeyUtils.buildClientId(transferChannel, clientId); // 传输通道打开后自动读取 - Channel visitor = NettyRealIdContext.getReal(visitorId); - - ChannelAttributeKeyUtils.buildNextChannel(visitor, transferChannel); - ChannelAttributeKeyUtils.buildNextChannel(transferChannel, visitor); + ChannelAttributeKeyUtils.buildNextChannel(visitorChannel, transferChannel); + ChannelAttributeKeyUtils.buildNextChannel(transferChannel, visitorChannel); } else { log.info("无法连接到服务端...."); transferChannel.eventLoop().schedule(() -> { try { - buildTransferServer(internalNetworkClientPermeateClientVisitor); + buildTransferServer(internalNetworkClientPermeateClientVisitor,visitorChannel); } catch (Exception e) { e.printStackTrace(); } diff --git a/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/MessageType.java b/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/MessageType.java index 7cac599..626942b 100644 --- a/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/MessageType.java +++ b/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/MessageType.java @@ -212,6 +212,8 @@ public class MessageType { + + /** * 下发 客户端接收连接成功通知 * @@ -270,7 +272,7 @@ public class MessageType { * @see MessageTypeEnums#DISTRIBUTE_SINGLE_CLIENT_REAL_CLOSE_VISITOR * @see AbstractHandleDistributeSingleClientRealCloseVisitorTypeAdvanced */ - public static final byte DISTRIBUTE_SINGLE_CLIENT_REAL_CLOSE_VISITOR = -0X08; + public static final byte DISTRIBUTE_SERVER_PERMEATE_CLIENT_REAL_CLOSE_VISITOR = -0X08; /** * 下发 客户端消息 diff --git a/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/enums/MessageTypeEnums.java b/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/enums/MessageTypeEnums.java index 6f19238..a55241d 100644 --- a/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/enums/MessageTypeEnums.java +++ b/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/enums/MessageTypeEnums.java @@ -156,7 +156,7 @@ public enum MessageTypeEnums { /** * @see AbstractHandleDistributeSingleClientRealCloseVisitorTypeAdvanced */ - DISTRIBUTE_SINGLE_CLIENT_REAL_CLOSE_VISITOR(MessageType.DISTRIBUTE_SINGLE_CLIENT_REAL_CLOSE_VISITOR, "下发 客户端关闭代理服务通道"), + DISTRIBUTE_SINGLE_CLIENT_REAL_CLOSE_VISITOR(MessageType.DISTRIBUTE_SERVER_PERMEATE_CLIENT_REAL_CLOSE_VISITOR, "下发 客户端关闭代理服务通道"), /** * @see AbstractHandleDistributeSingleClientMessageTypeAdvanced */ diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/advanced/ServerHandleReportClientTransferClientPermeateChannelConnectionSuccessfulTypeAdvanced.java b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/advanced/ServerHandleReportClientTransferClientPermeateChannelConnectionSuccessfulTypeAdvanced.java index 32f7965..a9137c6 100644 --- a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/advanced/ServerHandleReportClientTransferClientPermeateChannelConnectionSuccessfulTypeAdvanced.java +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/advanced/ServerHandleReportClientTransferClientPermeateChannelConnectionSuccessfulTypeAdvanced.java @@ -4,6 +4,7 @@ import io.netty.channel.Channel; import lombok.extern.slf4j.Slf4j; import org.framework.lazy.cloud.network.heartbeat.common.*; import org.framework.lazy.cloud.network.heartbeat.common.advanced.server.AbstractHandleReportClientTransferClientPermeateChannelConnectionSuccessfulTypeAdvanced; +import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils; import org.springframework.stereotype.Component; /** @@ -15,19 +16,22 @@ public class ServerHandleReportClientTransferClientPermeateChannelConnectionSucc /** * 处理当前数据 * - * @param channel 当前通道 + * @param transferChannel 当前通道 * @param nettyProxyMsg 通道数据 */ @Override - protected void doHandler(Channel channel, NettyProxyMsg nettyProxyMsg) { + protected void doHandler(Channel transferChannel, NettyProxyMsg nettyProxyMsg) { // 创建目标地址连接 byte[] msgVisitorId = nettyProxyMsg.getVisitorId(); byte[] msgVisitorPort = nettyProxyMsg.getVisitorPort(); byte[] msgClientTargetIp = nettyProxyMsg.getClientTargetIp(); byte[] msgClientTargetPort = nettyProxyMsg.getClientTargetPort(); byte[] clientId = nettyProxyMsg.getClientId();// 目标客户端ID + + ChannelAttributeKeyUtils.buildClientId(transferChannel, clientId); + ChannelAttributeKeyUtils.buildVisitorId(transferChannel, msgVisitorId); // 绑定访客通道 - NettyTransferChannelContext.pushVisitor(channel,msgVisitorId); + NettyTransferChannelContext.pushVisitor(transferChannel,msgVisitorId); ChannelContext.ClientChannel clientChannel = ChannelContext.get(clientId); NettyProxyMsg clientConnectTagetNettyProxyMsg = new NettyProxyMsg(); diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/advanced/ServerHandleReportClientTransferClientPermeateChannelInitSuccessfulTypeAdvanced.java b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/advanced/ServerHandleReportClientTransferClientPermeateChannelInitSuccessfulTypeAdvanced.java index 5f45c1f..41e8c2f 100644 --- a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/advanced/ServerHandleReportClientTransferClientPermeateChannelInitSuccessfulTypeAdvanced.java +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/advanced/ServerHandleReportClientTransferClientPermeateChannelInitSuccessfulTypeAdvanced.java @@ -18,11 +18,11 @@ public class ServerHandleReportClientTransferClientPermeateChannelInitSuccessful /** * 处理当前数据 * - * @param channel 当前通道 + * @param transferChannel 当前通道 * @param nettyProxyMsg 通道数据 */ @Override - protected void doHandler(Channel channel, NettyProxyMsg nettyProxyMsg) { + protected void doHandler(Channel transferChannel, NettyProxyMsg nettyProxyMsg) { // 创建目标地址连接 byte[] msgVisitorId = nettyProxyMsg.getVisitorId(); byte[] msgVisitorPort = nettyProxyMsg.getVisitorPort(); @@ -33,11 +33,12 @@ public class ServerHandleReportClientTransferClientPermeateChannelInitSuccessful // next translation Channel nextTransferChannel = NettyTransferChannelContext.getVisitor(msgVisitorId); - ChannelAttributeKeyUtils.buildTransferNextChannel(nextTransferChannel,channel); - ChannelAttributeKeyUtils.buildTransferNextChannel(channel,nextTransferChannel); - NettyTransferChannelContext.clear(msgVisitorId); + ChannelAttributeKeyUtils.buildTransferNextChannel(nextTransferChannel,transferChannel); + ChannelAttributeKeyUtils.buildTransferNextChannel(transferChannel,nextTransferChannel); + ChannelAttributeKeyUtils.buildClientId(transferChannel,clientId); + ChannelAttributeKeyUtils.buildVisitorId(transferChannel,msgVisitorId); - Channel nextChannel = ChannelAttributeKeyUtils.getTransferNextChannel(channel); + Channel nextChannel = ChannelAttributeKeyUtils.getTransferNextChannel(transferChannel); NettyProxyMsg clientConnectTagetNettyProxyMsg = new NettyProxyMsg(); clientConnectTagetNettyProxyMsg.setVisitorId(msgVisitorId); diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/advanced/ServerHandleReportClientTransferServerPermeateChannelConnectionSuccessfulTypeAdvanced.java b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/advanced/ServerHandleReportClientTransferServerPermeateChannelConnectionSuccessfulTypeAdvanced.java index f92ab66..53e7d6a 100644 --- a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/advanced/ServerHandleReportClientTransferServerPermeateChannelConnectionSuccessfulTypeAdvanced.java +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/advanced/ServerHandleReportClientTransferServerPermeateChannelConnectionSuccessfulTypeAdvanced.java @@ -3,6 +3,7 @@ package org.framework.lazy.cloud.network.heartbeat.server.netty.advanced; import io.netty.channel.Channel; import org.framework.lazy.cloud.network.heartbeat.common.NettyProxyMsg; import org.framework.lazy.cloud.network.heartbeat.common.advanced.server.AbstractHandleReportClientTransferServerPermeateChannelConnectionSuccessfulTypeAdvanced; +import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils; import org.framework.lazy.cloud.network.heartbeat.server.netty.socket.NettyClientPermeateServerConnectRealSocket; import org.springframework.stereotype.Component; @@ -24,6 +25,11 @@ public class ServerHandleReportClientTransferServerPermeateChannelConnectionSucc byte[] msgVisitorPort = nettyProxyMsg.getVisitorPort(); byte[] msgClientTargetIp = nettyProxyMsg.getClientTargetIp(); byte[] msgClientTargetPort = nettyProxyMsg.getClientTargetPort(); + byte[] msgClientId = nettyProxyMsg.getClientId(); + String clientId = new String(msgClientId); + // 绑定客户端ID + ChannelAttributeKeyUtils.buildClientId(transferChannel,clientId); + ChannelAttributeKeyUtils.buildVisitorId(transferChannel,msgVisitorId); NettyClientPermeateServerConnectRealSocket.buildNewRealServer(new String(msgVisitorId), Integer.parseInt(new String(msgVisitorPort)), new String(msgClientTargetIp), diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/advanced/ServerHandleReportDisconnectTypeAdvanced.java b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/advanced/ServerHandleReportDisconnectTypeAdvanced.java index ff598be..d7926a5 100644 --- a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/advanced/ServerHandleReportDisconnectTypeAdvanced.java +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/advanced/ServerHandleReportDisconnectTypeAdvanced.java @@ -40,7 +40,7 @@ public class ServerHandleReportDisconnectTypeAdvanced extends AbstractHandleRepo public void doHandler(Channel deathChannel, NettyProxyMsg msg) { // 关闭连接通知 byte[] clientIdByte = msg.getClientId(); - log.warn("close client :{} channel", new String(clientIdByte)); + log.warn("close client :{} channel", new String(clientIdByte)); ChannelId deathChannelId = deathChannel.id(); ChannelContext.ClientChannel deathClientChannelDTO = ChannelContext.get(clientIdByte); diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/handler/NettyServerHandler.java b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/handler/NettyServerHandler.java index 5b4c0d4..b056649 100644 --- a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/handler/NettyServerHandler.java +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/handler/NettyServerHandler.java @@ -4,13 +4,13 @@ import io.netty.channel.*; import io.netty.handler.timeout.IdleState; import io.netty.handler.timeout.IdleStateEvent; import lombok.extern.slf4j.Slf4j; -import org.wu.framework.core.utils.ObjectUtils; import org.framework.lazy.cloud.network.heartbeat.common.MessageType; import org.framework.lazy.cloud.network.heartbeat.common.NettyCommunicationIdContext; import org.framework.lazy.cloud.network.heartbeat.common.NettyProxyMsg; 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.utils.ChannelAttributeKeyUtils; +import org.wu.framework.core.utils.ObjectUtils; /** * description 服务端数据处理器 @@ -66,7 +66,7 @@ public class NettyServerHandler extends SimpleChannelInboundHandler