From c04ba097631c449d9ad46b2ad9e91b58b4285793 Mon Sep 17 00:00:00 2001 From: wujiawei <1207537021@qq.com> Date: Sun, 22 Sep 2024 18:13:51 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90fix=E3=80=91=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E6=B5=81=E9=87=8F=E8=AE=A1=E8=B4=B9bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/HeartbeatClientConfiguration.java | 4 + ...entPermeateServerTransferTypeAdvanced.java | 53 +++++++++++++ ...ttyClientPermeateClientTransferFilter.java | 42 ++++++++++ ...ttyClientPermeateServerTransferFilter.java | 42 ++++++++++ ...tyClientPermeateClientTransferHandler.java | 79 +++++++++++++++++++ ...tyClientPermeateServerTransferHandler.java | 79 +++++++++++++++++++ ...ttyClientPermeateServerVisitorHandler.java | 30 +------ ...ntPermeateClientVisitorTransferSocket.java | 7 +- ...ntPermeateServerVisitorTransferSocket.java | 6 +- .../network/heartbeat/common/MessageType.java | 70 +++++++++++++--- ...rmeateServerTransferCloseTypeAdvanced.java | 28 +++++++ ...entPermeateServerTransferTypeAdvanced.java | 28 +++++++ ...rmeateServerTransferCloseTypeAdvanced.java | 27 +++++++ ...entPermeateServerTransferTypeAdvanced.java | 27 +++++++ .../common/enums/MessageTypeEnums.java | 28 ++++++- ...rmeateServerTransferCloseTypeAdvanced.java | 33 ++++++++ ...entPermeateServerTransferTypeAdvanced.java | 63 +++++++++++++++ ...portHandleChannelTransferTypeAdvanced.java | 2 +- .../ClientPermeateServerRealFilter.java | 5 +- ...NettyClientPermeateServerRealHandler.java} | 13 +-- .../entity/LazyVisitorPortFlowDO.java | 2 +- 21 files changed, 603 insertions(+), 65 deletions(-) create mode 100644 wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/advanced/ClientHandleDistributeClientPermeateServerTransferTypeAdvanced.java create mode 100644 wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/filter/NettyClientPermeateClientTransferFilter.java create mode 100644 wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/filter/NettyClientPermeateServerTransferFilter.java create mode 100644 wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/handler/NettyClientPermeateClientTransferHandler.java create mode 100644 wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/handler/NettyClientPermeateServerTransferHandler.java create mode 100644 wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/client/AbstractHandleDistributeClientPermeateServerTransferCloseTypeAdvanced.java create mode 100644 wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/client/AbstractHandleDistributeClientPermeateServerTransferTypeAdvanced.java create mode 100644 wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/server/AbstractHandleReportClientPermeateServerTransferCloseTypeAdvanced.java create mode 100644 wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/server/AbstractHandleReportClientPermeateServerTransferTypeAdvanced.java create mode 100644 wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/advanced/ServerHandleReportClientPermeateServerTransferCloseTypeAdvanced.java create mode 100644 wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/advanced/ServerHandleReportClientPermeateServerTransferTypeAdvanced.java rename wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/handler/{ClientPermeateServerRealHandler.java => NettyClientPermeateServerRealHandler.java} (79%) diff --git a/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/config/HeartbeatClientConfiguration.java b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/config/HeartbeatClientConfiguration.java index 65fc05b..c9583ca 100644 --- a/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/config/HeartbeatClientConfiguration.java +++ b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/config/HeartbeatClientConfiguration.java @@ -131,6 +131,10 @@ public class HeartbeatClientConfiguration { public ClientHandleDistributeClientPermeateServerCloseTypeAdvanced clientHandleDistributeClientPermeateServerCloseTypeAdvanced( ) { return new ClientHandleDistributeClientPermeateServerCloseTypeAdvanced(); } + @Bean + public ClientHandleDistributeClientPermeateServerTransferTypeAdvanced clientHandleDistributeClientPermeateServerTransferTypeAdvanced( ) { + return new ClientHandleDistributeClientPermeateServerTransferTypeAdvanced(); + } @Bean public ClientHandleDistributeClientPermeateClientCloseTypeAdvanced clientHandleDistributeClientPermeateClientCloseTypeAdvanced() { diff --git a/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/advanced/ClientHandleDistributeClientPermeateServerTransferTypeAdvanced.java b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/advanced/ClientHandleDistributeClientPermeateServerTransferTypeAdvanced.java new file mode 100644 index 0000000..a317dbe --- /dev/null +++ b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/advanced/ClientHandleDistributeClientPermeateServerTransferTypeAdvanced.java @@ -0,0 +1,53 @@ +package org.framework.lazy.cloud.network.heartbeat.client.netty.advanced; + + +import io.netty.buffer.ByteBuf; +import io.netty.channel.Channel; +import lombok.extern.slf4j.Slf4j; +import org.framework.lazy.cloud.network.heartbeat.client.config.NettyClientProperties; +import org.framework.lazy.cloud.network.heartbeat.common.NettyProxyMsg; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.client.AbstractHandleDistributeClientPermeateServerTransferTypeAdvanced; +import org.framework.lazy.cloud.network.heartbeat.common.enums.MessageTypeEnums; +import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils; + + +/** + * 服务端处理客户端数据传输 + * + * @see MessageTypeEnums#DISTRIBUTE_CLIENT_TRANSFER + */ +@Slf4j +public class ClientHandleDistributeClientPermeateServerTransferTypeAdvanced extends AbstractHandleDistributeClientPermeateServerTransferTypeAdvanced { + + + /** + * 处理当前数据 + * + * @param channel 当前通道 + * @param nettyProxyMsg 通道数据 + */ + @Override + public void doHandler(Channel channel, NettyProxyMsg nettyProxyMsg) { + log.debug("接收到服务端需要内网穿透的数据:{}" , nettyProxyMsg); + byte[] visitorPort = nettyProxyMsg.getVisitorPort(); + byte[] clientTargetIp = nettyProxyMsg.getClientTargetIp(); + byte[] clientTargetPort = nettyProxyMsg.getClientTargetPort(); + byte[] visitorId = nettyProxyMsg.getVisitorId(); + // 真实服务通道 +// Channel realChannel = NettyRealIdContext.getReal(new String(visitorId)); + Channel nextChannel = ChannelAttributeKeyUtils.getNextChannel(channel); + if (nextChannel == null) { + log.error("无法获取访客:{} 真实服务", new String(visitorId)); + return; + } + + + // 把数据转到真实服务 + ByteBuf buf = channel.config().getAllocator().buffer(nettyProxyMsg.getData().length); + buf.writeBytes(nettyProxyMsg.getData()); + + nextChannel.writeAndFlush(buf); + + } + +} diff --git a/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/filter/NettyClientPermeateClientTransferFilter.java b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/filter/NettyClientPermeateClientTransferFilter.java new file mode 100644 index 0000000..c27afe8 --- /dev/null +++ b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/filter/NettyClientPermeateClientTransferFilter.java @@ -0,0 +1,42 @@ +package org.framework.lazy.cloud.network.heartbeat.client.netty.filter; + +import io.netty.channel.Channel; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelPipeline; +import io.netty.channel.socket.SocketChannel; +import org.framework.lazy.cloud.network.heartbeat.client.netty.handler.NettyClientPermeateClientTransferHandler; +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; +import org.framework.lazy.cloud.network.heartbeat.common.filter.DebugChannelInitializer; + +/** + * netty 客户端渗透通信通道 + */ +public class NettyClientPermeateClientTransferFilter extends DebugChannelInitializer { + private final ChannelTypeAdapter channelTypeAdapter; + + public NettyClientPermeateClientTransferFilter(ChannelTypeAdapter channelTypeAdapter) { + this.channelTypeAdapter = channelTypeAdapter; + } + + /** + * This method will be called once the {@link Channel} was registered. After the method returns this instance + * will be removed from the {@link ChannelPipeline} of the {@link Channel}. + * + * @param ch the {@link Channel} which was registered. + * @throws Exception is thrown if an error occurs. In that case it will be handled by + * {@link #exceptionCaught(ChannelHandlerContext, Throwable)} which will by default connectionClose + * the {@link Channel}. + */ + @Override + protected void initChannel0(SocketChannel ch) throws Exception { + ChannelPipeline pipeline = ch.pipeline(); +// // 解码、编码 +// pipeline.addLast(new NettyProxyMsgDecoder(Integer.MAX_VALUE, 0, 4, -4, 0)); +// pipeline.addLast(new NettMsgEncoder()); + pipeline.addLast(new NettyProxyMsgDecoder(Integer.MAX_VALUE, 0, 4, -4, 0)); + pipeline.addLast(new NettyProxyMsgEncoder()); + pipeline.addLast(new NettyClientPermeateClientTransferHandler(channelTypeAdapter)); + } +} diff --git a/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/filter/NettyClientPermeateServerTransferFilter.java b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/filter/NettyClientPermeateServerTransferFilter.java new file mode 100644 index 0000000..690a6e0 --- /dev/null +++ b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/filter/NettyClientPermeateServerTransferFilter.java @@ -0,0 +1,42 @@ +package org.framework.lazy.cloud.network.heartbeat.client.netty.filter; + +import io.netty.channel.Channel; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelPipeline; +import io.netty.channel.socket.SocketChannel; +import org.framework.lazy.cloud.network.heartbeat.client.netty.handler.NettyClientPermeateServerTransferHandler; +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; +import org.framework.lazy.cloud.network.heartbeat.common.filter.DebugChannelInitializer; + +/** + * netty 客户端渗透通信通道 + */ +public class NettyClientPermeateServerTransferFilter extends DebugChannelInitializer { + private final ChannelTypeAdapter channelTypeAdapter; + + public NettyClientPermeateServerTransferFilter(ChannelTypeAdapter channelTypeAdapter) { + this.channelTypeAdapter = channelTypeAdapter; + } + + /** + * This method will be called once the {@link Channel} was registered. After the method returns this instance + * will be removed from the {@link ChannelPipeline} of the {@link Channel}. + * + * @param ch the {@link Channel} which was registered. + * @throws Exception is thrown if an error occurs. In that case it will be handled by + * {@link #exceptionCaught(ChannelHandlerContext, Throwable)} which will by default connectionClose + * the {@link Channel}. + */ + @Override + protected void initChannel0(SocketChannel ch) throws Exception { + ChannelPipeline pipeline = ch.pipeline(); +// // 解码、编码 +// pipeline.addLast(new NettyProxyMsgDecoder(Integer.MAX_VALUE, 0, 4, -4, 0)); +// pipeline.addLast(new NettMsgEncoder()); + pipeline.addLast(new NettyProxyMsgDecoder(Integer.MAX_VALUE, 0, 4, -4, 0)); + pipeline.addLast(new NettyProxyMsgEncoder()); + pipeline.addLast(new NettyClientPermeateServerTransferHandler(channelTypeAdapter)); + } +} diff --git a/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/handler/NettyClientPermeateClientTransferHandler.java b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/handler/NettyClientPermeateClientTransferHandler.java new file mode 100644 index 0000000..6eae863 --- /dev/null +++ b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/handler/NettyClientPermeateClientTransferHandler.java @@ -0,0 +1,79 @@ +package org.framework.lazy.cloud.network.heartbeat.client.netty.handler; + + +import io.netty.channel.Channel; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelOption; +import io.netty.channel.SimpleChannelInboundHandler; +import lombok.extern.slf4j.Slf4j; +import org.framework.lazy.cloud.network.heartbeat.common.ChannelContext; +import org.framework.lazy.cloud.network.heartbeat.common.MessageType; +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; + +/** + * 客户端访客通信通道 处理器 + */ +@Slf4j +public class NettyClientPermeateClientTransferHandler extends SimpleChannelInboundHandler { + private final ChannelTypeAdapter channelTypeAdapter; + + public NettyClientPermeateClientTransferHandler(ChannelTypeAdapter channelTypeAdapter) { + this.channelTypeAdapter = channelTypeAdapter; + } + + @Override + public void channelActive(ChannelHandlerContext ctx) throws Exception { + super.channelActive(ctx); + } + + @Override + public void channelRead0(ChannelHandlerContext ctx, NettyProxyMsg nettyProxyMsg) throws Exception { + Channel channel = ctx.channel(); + channelTypeAdapter.handler(channel, nettyProxyMsg); + + } + + @Override + public void channelInactive(ChannelHandlerContext ctx) throws Exception { + + String clientId = ChannelAttributeKeyUtils.getClientId(ctx.channel()); + String visitorId = ChannelAttributeKeyUtils.getVisitorId(ctx.channel()); + // 关闭访客 + ChannelContext.ClientChannel clientChannel = ChannelContext.get(clientId); + if (clientChannel != null) { + Channel channel = clientChannel.getChannel(); + // 上报关闭这个客户端的访客通道 + NettyProxyMsg closeVisitorMsg = new NettyProxyMsg(); + closeVisitorMsg.setType(MessageType.REPORT_SINGLE_CLIENT_CLOSE_VISITOR); + closeVisitorMsg.setVisitorId(visitorId); + channel.writeAndFlush(closeVisitorMsg); + } + + super.channelInactive(ctx); + } + + @Override + public void channelWritabilityChanged(ChannelHandlerContext ctx) throws Exception { + // 处理客户端本地真实通道问题 + String visitorId = ChannelAttributeKeyUtils.getVisitorId(ctx.channel()); + if(ObjectUtils.isEmpty(visitorId)) { + super.channelWritabilityChanged(ctx); + return; + } + + Channel realChannel = NettyRealIdContext.getReal(visitorId); + if (realChannel != null) { + log.debug("visitorId:{} transfer AUTO_READ:{} ",visitorId,ctx.channel().isWritable()); + realChannel.config().setOption(ChannelOption.AUTO_READ, ctx.channel().isWritable()); + } + } + + @Override + public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { + super.exceptionCaught(ctx, cause); + } +} \ No newline at end of file diff --git a/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/handler/NettyClientPermeateServerTransferHandler.java b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/handler/NettyClientPermeateServerTransferHandler.java new file mode 100644 index 0000000..2ba52d1 --- /dev/null +++ b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/handler/NettyClientPermeateServerTransferHandler.java @@ -0,0 +1,79 @@ +package org.framework.lazy.cloud.network.heartbeat.client.netty.handler; + + +import io.netty.channel.Channel; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelOption; +import io.netty.channel.SimpleChannelInboundHandler; +import lombok.extern.slf4j.Slf4j; +import org.framework.lazy.cloud.network.heartbeat.common.ChannelContext; +import org.framework.lazy.cloud.network.heartbeat.common.MessageType; +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; + +/** + * 客户端访客通信通道 处理器 + */ +@Slf4j +public class NettyClientPermeateServerTransferHandler extends SimpleChannelInboundHandler { + private final ChannelTypeAdapter channelTypeAdapter; + + public NettyClientPermeateServerTransferHandler(ChannelTypeAdapter channelTypeAdapter) { + this.channelTypeAdapter = channelTypeAdapter; + } + + @Override + public void channelActive(ChannelHandlerContext ctx) throws Exception { + super.channelActive(ctx); + } + + @Override + public void channelRead0(ChannelHandlerContext ctx, NettyProxyMsg nettyProxyMsg) throws Exception { + Channel channel = ctx.channel(); + channelTypeAdapter.handler(channel, nettyProxyMsg); + + } + + @Override + public void channelInactive(ChannelHandlerContext ctx) throws Exception { + + String clientId = ChannelAttributeKeyUtils.getClientId(ctx.channel()); + String visitorId = ChannelAttributeKeyUtils.getVisitorId(ctx.channel()); + // 关闭访客 + ChannelContext.ClientChannel clientChannel = ChannelContext.get(clientId); + if (clientChannel != null) { + Channel channel = clientChannel.getChannel(); + // 上报关闭服务端客户端真实通道 + NettyProxyMsg closeVisitorMsg = new NettyProxyMsg(); + closeVisitorMsg.setType(MessageType.REPORT_CLIENT_PERMEATE_SERVER_TRANSFER_CLOSE); + closeVisitorMsg.setVisitorId(visitorId); + channel.writeAndFlush(closeVisitorMsg); + } + + super.channelInactive(ctx); + } + + @Override + public void channelWritabilityChanged(ChannelHandlerContext ctx) throws Exception { + // 处理客户端本地真实通道问题 + String visitorId = ChannelAttributeKeyUtils.getVisitorId(ctx.channel()); + if(ObjectUtils.isEmpty(visitorId)) { + super.channelWritabilityChanged(ctx); + return; + } + + Channel realChannel = NettyRealIdContext.getReal(visitorId); + if (realChannel != null) { + log.debug("visitorId:{} transfer AUTO_READ:{} ",visitorId,ctx.channel().isWritable()); + realChannel.config().setOption(ChannelOption.AUTO_READ, ctx.channel().isWritable()); + } + } + + @Override + public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { + super.exceptionCaught(ctx, cause); + } +} \ No newline at end of file diff --git a/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/handler/NettyClientPermeateServerVisitorHandler.java b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/handler/NettyClientPermeateServerVisitorHandler.java index 652f85e..0eb3297 100644 --- a/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/handler/NettyClientPermeateServerVisitorHandler.java +++ b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/handler/NettyClientPermeateServerVisitorHandler.java @@ -76,7 +76,7 @@ public class NettyClientPermeateServerVisitorHandler extends SimpleChannelInboun Integer visitorPort = internalNetworkPermeateServerVisitor.getVisitorPort(); String clientId = internalNetworkPermeateServerVisitor.getNettyClientProperties().getClientId(); NettyProxyMsg nettyProxyMsg = new NettyProxyMsg(); - nettyProxyMsg.setType(MessageType.REPORT_CLIENT_TRANSFER); + nettyProxyMsg.setType(MessageType.REPORT_CLIENT_PERMEATE_SERVER_TRANSFER); nettyProxyMsg.setVisitorId(visitorId); nettyProxyMsg.setClientId(clientId); nettyProxyMsg.setVisitorPort(visitorPort); @@ -112,7 +112,7 @@ public class NettyClientPermeateServerVisitorHandler extends SimpleChannelInboun // 通知服务端 关闭访问通道、真实通道 NettyProxyMsg myMsg = new NettyProxyMsg(); - myMsg.setType(MessageType.DISTRIBUTE_SINGLE_CLIENT_REAL_CLOSE_VISITOR); + myMsg.setType(MessageType.REPORT_CLIENT_PERMEATE_SERVER_TRANSFER_CLOSE); myMsg.setVisitorId(visitorId); nextChannel.writeAndFlush(myMsg); } @@ -126,28 +126,6 @@ public class NettyClientPermeateServerVisitorHandler extends SimpleChannelInboun @Override public void channelWritabilityChanged(ChannelHandlerContext ctx) throws Exception { - // 获取访客的传输通道 - String visitorId = ChannelAttributeKeyUtils.getVisitorId(ctx.channel()); - if(ObjectUtils.isEmpty(visitorId)) { - super.channelWritabilityChanged(ctx); - return; - } - - Channel visitorCommunicationChannel = NettyCommunicationIdContext.getVisitor(visitorId); - if (visitorCommunicationChannel != null) { - log.debug("visitorId:{} transfer AUTO_READ:{} ",visitorId,ctx.channel().isWritable()); - visitorCommunicationChannel.config().setOption(ChannelOption.AUTO_READ, ctx.channel().isWritable()); - } - // Channel visitorChannel = ctx.channel(); - // String vid = visitorChannel.attr(Constant.VID).get(); - // if (StringUtil.isNullOrEmpty(vid)) { - // super.channelWritabilityChanged(ctx); - // return; - // } - // Channel clientChannel = Constant.vcc.get(vid); - // if (clientChannel != null) { - // clientChannel.config().setOption(ChannelOption.AUTO_READ, visitorChannel.isWritable()); - // } if (ctx.channel().isWritable()) { log.debug("Channel is writable again"); // 恢复之前暂停的操作,如写入数据 @@ -155,7 +133,7 @@ public class NettyClientPermeateServerVisitorHandler extends SimpleChannelInboun log.debug("Channel is not writable"); // 暂停写入操作,等待可写状态 } - log.info("visitorId:{} channelWritabilityChanged!",visitorId); + log.info("channelWritabilityChanged!"); } @Override @@ -171,7 +149,7 @@ public class NettyClientPermeateServerVisitorHandler extends SimpleChannelInboun if (nextChannel != null) { // 下发关闭访客 NettyProxyMsg closeRealClient = new NettyProxyMsg(); - closeRealClient.setType(MessageType.DISTRIBUTE_SINGLE_CLIENT_REAL_CONNECT_AUTO_READ); + closeRealClient.setType(MessageType.REPORT_CLIENT_PERMEATE_SERVER_TRANSFER_CLOSE); closeRealClient.setClientId(clientId); closeRealClient.setVisitorId(visitorId); nextChannel.writeAndFlush(closeRealClient); 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 213a7d3..9990a3d 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 @@ -8,7 +8,7 @@ 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.InternalNetworkClientPermeateClientVisitor; -import org.framework.lazy.cloud.network.heartbeat.client.netty.filter.NettyClientPermeateTransferFilter; +import org.framework.lazy.cloud.network.heartbeat.client.netty.filter.NettyClientPermeateClientTransferFilter; 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; @@ -16,8 +16,6 @@ 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 java.util.concurrent.TimeUnit; - /** * 客户端渗透服务端传输通道 */ @@ -54,8 +52,7 @@ public class NettyClientPermeateClientVisitorTransferSocket { // .option(ChannelOption.RCVBUF_ALLOCATOR, new NettyRecvByteBufAllocator(1024 * 1024))//用于Channel分配接受Buffer的分配器 默认AdaptiveRecvByteBufAllocator.DEFAULT .option(ChannelOption.WRITE_BUFFER_WATER_MARK, new WriteBufferWaterMark(1024 * 1024, 1024 * 1024 * 2)) - - .handler(new NettyClientPermeateTransferFilter(new ChannelTypeAdapter(internalNetworkClientPermeateClientVisitor.getHandleChannelTypeAdvancedList()))) + .handler(new NettyClientPermeateClientTransferFilter(new ChannelTypeAdapter(internalNetworkClientPermeateClientVisitor.getHandleChannelTypeAdvancedList()))) ; NettyClientProperties nettyClientProperties = internalNetworkClientPermeateClientVisitor.getNettyClientProperties(); String inetHost = nettyClientProperties.getInetHost(); diff --git a/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/socket/NettyClientPermeateServerVisitorTransferSocket.java b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/socket/NettyClientPermeateServerVisitorTransferSocket.java index 0180e99..6b7797b 100644 --- a/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/socket/NettyClientPermeateServerVisitorTransferSocket.java +++ b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/socket/NettyClientPermeateServerVisitorTransferSocket.java @@ -8,7 +8,7 @@ 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.InternalNetworkPermeateServerVisitor; -import org.framework.lazy.cloud.network.heartbeat.client.netty.filter.NettyClientPermeateTransferFilter; +import org.framework.lazy.cloud.network.heartbeat.client.netty.filter.NettyClientPermeateServerTransferFilter; 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; @@ -16,8 +16,6 @@ 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 java.util.concurrent.TimeUnit; - /** * 客户端渗透服务端传输通道 */ @@ -55,7 +53,7 @@ public class NettyClientPermeateServerVisitorTransferSocket { .option(ChannelOption.WRITE_BUFFER_WATER_MARK, new WriteBufferWaterMark(1024 * 1024, 1024 * 1024 * 2)) - .handler(new NettyClientPermeateTransferFilter(new ChannelTypeAdapter(internalNetworkPermeateServerVisitor.getHandleChannelTypeAdvancedList()))) + .handler(new NettyClientPermeateServerTransferFilter(new ChannelTypeAdapter(internalNetworkPermeateServerVisitor.getHandleChannelTypeAdvancedList()))) ; NettyClientProperties nettyClientProperties = internalNetworkPermeateServerVisitor.getNettyClientProperties(); String inetHost = nettyClientProperties.getInetHost(); 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 5670d39..3cc0234 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 @@ -95,6 +95,12 @@ public class MessageType { */ public static final byte REPORT_CLUSTER_NODE_REGISTER_MESSAGE = 0X11; + + /** + * 客户端渗透服务端类型------------------------------------------------------------------------------------ + * + */ + /** * 上报 客户端渗透服务端数据传输通道连接成功 * @@ -117,21 +123,45 @@ public class MessageType { * @see AbstractHandleReportClientPermeateServerCloseTypeAdvanced */ public static final byte REPORT_CLIENT_PERMEATE_SERVER_CLOSE = 0X14; + /** + * 上报 客户端渗透服务端通信通道关闭 + * + * @see MessageTypeEnums#REPORT_CLIENT_PERMEATE_SERVER_TRANSFER_CLOSE + * @see AbstractHandleReportClientPermeateServerTransferCloseTypeAdvanced + */ + public static final byte REPORT_CLIENT_PERMEATE_SERVER_TRANSFER_CLOSE = 0X15; + /** + * 上报 客户端渗透服务端通信传输 + * + * @see MessageTypeEnums#REPORT_CLIENT_PERMEATE_SERVER_TRANSFER + * @see AbstractHandleReportClientPermeateServerTransferTypeAdvanced + */ + public static final byte REPORT_CLIENT_PERMEATE_SERVER_TRANSFER = 0X16; + + + + + + /** + * 客户端渗透客户端类型------------------------------------------------------------------------------------ + * 60~90 + */ + /** * 上报 客户端渗透客户端init信息 * * @see MessageTypeEnums#REPORT_CLIENT_PERMEATE_CLIENT_INIT * @see AbstractHandleReportClientPermeateClientInitTypeAdvanced */ - public static final byte REPORT_CLIENT_PERMEATE_CLIENT_INIT = 0X15; + public static final byte REPORT_CLIENT_PERMEATE_CLIENT_INIT = 0X19; /** * 上报 客户端渗透客户端init close 信息 * * @see MessageTypeEnums#REPORT_CLIENT_PERMEATE_CLIENT_CLOSE * @see AbstractHandleReportClientPermeateClientCloseTypeAdvanced */ - public static final byte REPORT_CLIENT_PERMEATE_CLIENT_CLOSE = 0X16; + public static final byte REPORT_CLIENT_PERMEATE_CLIENT_CLOSE = 0X20; /** * 上报 客户端渗透客户端数据传输通道连接成功 * @@ -139,7 +169,7 @@ public class MessageType { * @see AbstractHandleReportClientTransferClientPermeateChannelConnectionSuccessfulTypeAdvanced * @see MessageType#DISTRIBUTE_CLIENT_TRANSFER_CLIENT_PERMEATE_CHANNEL_CONNECTION_SUCCESSFUL */ - public static final byte REPORT_CLIENT_TRANSFER_CLIENT_PERMEATE_CHANNEL_CONNECTION_SUCCESSFUL = 0X17; + public static final byte REPORT_CLIENT_TRANSFER_CLIENT_PERMEATE_CHANNEL_CONNECTION_SUCCESSFUL = 0X21; /** @@ -149,7 +179,7 @@ public class MessageType { * @see AbstractHandleReportClientTransferClientPermeateChannelInitSuccessfulTypeAdvanced * @see MessageType#DISTRIBUTE_CLIENT_TRANSFER_CLIENT_PERMEATE_CHANNEL_INIT_SUCCESSFUL */ - public static final byte REPORT_CLIENT_TRANSFER_CLIENT_PERMEATE_CHANNEL_INIT_SUCCESSFUL = 0X18; + public static final byte REPORT_CLIENT_TRANSFER_CLIENT_PERMEATE_CHANNEL_INIT_SUCCESSFUL = 0X22; /** * 上报客户端渗透客户端数据传输请求 * @@ -157,7 +187,7 @@ public class MessageType { * @see AbstractHandleReportClientTransferClientTypeAdvanced * @see MessageType#DISTRIBUTE_CLIENT_TRANSFER_CLIENT_REQUEST */ - public static final byte REPORT_CLIENT_TRANSFER_CLIENT_REQUEST = 0X19; + public static final byte REPORT_CLIENT_TRANSFER_CLIENT_REQUEST = 0X23; /** * 上报客户端渗透客户端数据传输结果 @@ -166,7 +196,7 @@ public class MessageType { * @see AbstractHandleReportClientTransferClientResponseTypeAdvanced * @see MessageType#DISTRIBUTE_CLIENT_TRANSFER_CLIENT_RESPONSE */ - public static final byte REPORT_CLIENT_TRANSFER_CLIENT_RESPONSE = 0X20; + public static final byte REPORT_CLIENT_TRANSFER_CLIENT_RESPONSE = 0X24; /** * 下发 客户端接收连接成功通知 @@ -277,13 +307,29 @@ public class MessageType { */ public static final byte DISTRIBUTE_CLIENT_PERMEATE_SERVER_CLOSE = -0X14; + + /** + * 下发 客户端渗透服务端通信通道关闭 + * + * @see MessageTypeEnums#DISTRIBUTE_CLIENT_PERMEATE_SERVER_TRANSFER_CLOSE + * @see AbstractHandleDistributeClientPermeateServerTransferCloseTypeAdvanced + */ + public static final byte DISTRIBUTE_CLIENT_PERMEATE_SERVER_TRANSFER_CLOSE = -0X15; + + /** + * 下发 客户端渗透服务端通信传输 + * + * @see MessageTypeEnums#DISTRIBUTE_CLIENT_PERMEATE_SERVER_TRANSFER + * @see AbstractHandleDistributeClientPermeateServerTransferTypeAdvanced + */ + public static final byte DISTRIBUTE_CLIENT_PERMEATE_SERVER_TRANSFER = -0X16; /** * 下发 客户端渗透客户端init信息 * * @see MessageTypeEnums#DISTRIBUTE_CLIENT_PERMEATE_CLIENT_INIT * @see AbstractHandleDistributeClientPermeateClientInitTypeAdvanced */ - public static final byte DISTRIBUTE_CLIENT_PERMEATE_CLIENT_INIT = -0X15; + public static final byte DISTRIBUTE_CLIENT_PERMEATE_CLIENT_INIT = -0X19; /** * 下发 客户端渗透客户端init close信息 @@ -291,7 +337,7 @@ public class MessageType { * @see MessageTypeEnums#DISTRIBUTE_CLIENT_PERMEATE_CLIENT_CLOSE * @see AbstractHandleDistributeClientPermeateClientCloseTypeAdvanced */ - public static final byte DISTRIBUTE_CLIENT_PERMEATE_CLIENT_CLOSE = -0X16; + public static final byte DISTRIBUTE_CLIENT_PERMEATE_CLIENT_CLOSE = -0X20; @@ -302,7 +348,7 @@ public class MessageType { * @see AbstractHandleDistributeClientTransferClientPermeateChannelConnectionSuccessfulTypeAdvanced * @see MessageType#REPORT_CLIENT_TRANSFER_CLIENT_PERMEATE_CHANNEL_CONNECTION_SUCCESSFUL */ - public static final byte DISTRIBUTE_CLIENT_TRANSFER_CLIENT_PERMEATE_CHANNEL_CONNECTION_SUCCESSFUL = -0X17; + public static final byte DISTRIBUTE_CLIENT_TRANSFER_CLIENT_PERMEATE_CHANNEL_CONNECTION_SUCCESSFUL = -0X21; /** @@ -312,7 +358,7 @@ public class MessageType { * @see AbstractHandleDistributeClientTransferClientPermeateChannelInitSuccessfulTypeAdvanced * @see MessageType#DISTRIBUTE_CLIENT_TRANSFER_CLIENT_PERMEATE_CHANNEL_INIT_SUCCESSFUL */ - public static final byte DISTRIBUTE_CLIENT_TRANSFER_CLIENT_PERMEATE_CHANNEL_INIT_SUCCESSFUL = -0X18; + public static final byte DISTRIBUTE_CLIENT_TRANSFER_CLIENT_PERMEATE_CHANNEL_INIT_SUCCESSFUL = -0X22; /** * 下发 客户端渗透客户端数据传输请求 @@ -321,7 +367,7 @@ public class MessageType { * @see AbstractHandleDistributeClientTransferClientRequestTypeAdvanced * @see MessageType#REPORT_CLIENT_TRANSFER_CLIENT_REQUEST */ - public static final byte DISTRIBUTE_CLIENT_TRANSFER_CLIENT_REQUEST = -0X19; + public static final byte DISTRIBUTE_CLIENT_TRANSFER_CLIENT_REQUEST = -0X23; /** * 下发客户端渗透客户端数据传输响应 * @@ -329,5 +375,5 @@ public class MessageType { * @see AbstractHandleDistributeClientTransferClientResponseTypeAdvanced * @see MessageType#REPORT_CLIENT_TRANSFER_CLIENT_RESPONSE */ - public static final byte DISTRIBUTE_CLIENT_TRANSFER_CLIENT_RESPONSE = -0X20; + public static final byte DISTRIBUTE_CLIENT_TRANSFER_CLIENT_RESPONSE = -0X24; } diff --git a/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/client/AbstractHandleDistributeClientPermeateServerTransferCloseTypeAdvanced.java b/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/client/AbstractHandleDistributeClientPermeateServerTransferCloseTypeAdvanced.java new file mode 100644 index 0000000..fed1092 --- /dev/null +++ b/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/client/AbstractHandleDistributeClientPermeateServerTransferCloseTypeAdvanced.java @@ -0,0 +1,28 @@ +package org.framework.lazy.cloud.network.heartbeat.common.advanced.client; + + +import org.framework.lazy.cloud.network.heartbeat.common.NettyProxyMsg; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.AbstractHandleChannelTypeAdvanced; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.HandleChannelTypeAdvanced; +import org.framework.lazy.cloud.network.heartbeat.common.enums.MessageTypeEnums; + + +/** + * 下发 客户端渗透服务端通信通道关闭 + * + * @see MessageTypeEnums#DISTRIBUTE_CLIENT_PERMEATE_SERVER_TRANSFER_CLOSE + */ +public abstract class AbstractHandleDistributeClientPermeateServerTransferCloseTypeAdvanced extends AbstractHandleChannelTypeAdvanced implements HandleChannelTypeAdvanced { + + + /** + * 是否支持当前类型 + * + * @param msg 通道数据 + * @return 布尔类型 是、否 + */ + @Override + public boolean doSupport(NettyProxyMsg msg) { + return MessageTypeEnums.DISTRIBUTE_CLIENT_PERMEATE_SERVER_TRANSFER_CLOSE.getTypeByte() == msg.getType(); + } +} diff --git a/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/client/AbstractHandleDistributeClientPermeateServerTransferTypeAdvanced.java b/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/client/AbstractHandleDistributeClientPermeateServerTransferTypeAdvanced.java new file mode 100644 index 0000000..ec6f004 --- /dev/null +++ b/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/client/AbstractHandleDistributeClientPermeateServerTransferTypeAdvanced.java @@ -0,0 +1,28 @@ +package org.framework.lazy.cloud.network.heartbeat.common.advanced.client; + + +import org.framework.lazy.cloud.network.heartbeat.common.NettyProxyMsg; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.AbstractHandleChannelTypeAdvanced; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.HandleChannelTypeAdvanced; +import org.framework.lazy.cloud.network.heartbeat.common.enums.MessageTypeEnums; + + +/** + * 下发 客户端渗透服务端通信传输 + * + * @see MessageTypeEnums#DISTRIBUTE_CLIENT_PERMEATE_SERVER_TRANSFER + */ +public abstract class AbstractHandleDistributeClientPermeateServerTransferTypeAdvanced extends AbstractHandleChannelTypeAdvanced implements HandleChannelTypeAdvanced { + + + /** + * 是否支持当前类型 + * + * @param msg 通道数据 + * @return 布尔类型 是、否 + */ + @Override + public boolean doSupport(NettyProxyMsg msg) { + return MessageTypeEnums.DISTRIBUTE_CLIENT_PERMEATE_SERVER_TRANSFER.getTypeByte() == msg.getType(); + } +} diff --git a/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/server/AbstractHandleReportClientPermeateServerTransferCloseTypeAdvanced.java b/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/server/AbstractHandleReportClientPermeateServerTransferCloseTypeAdvanced.java new file mode 100644 index 0000000..4390ba0 --- /dev/null +++ b/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/server/AbstractHandleReportClientPermeateServerTransferCloseTypeAdvanced.java @@ -0,0 +1,27 @@ +package org.framework.lazy.cloud.network.heartbeat.common.advanced.server; + + +import org.framework.lazy.cloud.network.heartbeat.common.NettyProxyMsg; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.AbstractHandleChannelTypeAdvanced; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.HandleChannelTypeAdvanced; +import org.framework.lazy.cloud.network.heartbeat.common.enums.MessageTypeEnums; + + +/** + * 上报 客户端渗透服务端通信通道关闭 + * REPORT_CLIENT_PERMEATE_SERVER_TRANSFER_CLOSE + */ +public abstract class AbstractHandleReportClientPermeateServerTransferCloseTypeAdvanced extends AbstractHandleChannelTypeAdvanced implements HandleChannelTypeAdvanced { + + + /** + * 是否支持当前类型 + * + * @param msg 通道数据 + * @return 布尔类型 是、否 + */ + @Override + public boolean doSupport(NettyProxyMsg msg) { + return MessageTypeEnums.REPORT_CLIENT_PERMEATE_SERVER_TRANSFER_CLOSE.getTypeByte() == msg.getType(); + } +} diff --git a/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/server/AbstractHandleReportClientPermeateServerTransferTypeAdvanced.java b/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/server/AbstractHandleReportClientPermeateServerTransferTypeAdvanced.java new file mode 100644 index 0000000..8f1d839 --- /dev/null +++ b/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/server/AbstractHandleReportClientPermeateServerTransferTypeAdvanced.java @@ -0,0 +1,27 @@ +package org.framework.lazy.cloud.network.heartbeat.common.advanced.server; + + +import org.framework.lazy.cloud.network.heartbeat.common.NettyProxyMsg; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.AbstractHandleChannelTypeAdvanced; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.HandleChannelTypeAdvanced; +import org.framework.lazy.cloud.network.heartbeat.common.enums.MessageTypeEnums; + + +/** + * 上报 客户端渗透服务端通信 + * REPORT_CLIENT_PERMEATE_SERVER_TRANSFER + */ +public abstract class AbstractHandleReportClientPermeateServerTransferTypeAdvanced extends AbstractHandleChannelTypeAdvanced implements HandleChannelTypeAdvanced { + + + /** + * 是否支持当前类型 + * + * @param msg 通道数据 + * @return 布尔类型 是、否 + */ + @Override + public boolean doSupport(NettyProxyMsg msg) { + return MessageTypeEnums.REPORT_CLIENT_PERMEATE_SERVER_TRANSFER.getTypeByte() == msg.getType(); + } +} 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 560ebb8..8b857d7 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 @@ -71,7 +71,21 @@ public enum MessageTypeEnums { * @see AbstractHandleReportClientPermeateServerCloseTypeAdvanced */ REPORT_CLIENT_PERMEATE_SERVER_CLOSE(MessageType.REPORT_CLIENT_PERMEATE_SERVER_CLOSE, "上报 客户端渗透服务端init close 信息"), - /** + + + /** + * 上报 客户端渗透服务端通信通道关闭 + * @see AbstractHandleReportClientPermeateServerTransferCloseTypeAdvanced + */ + REPORT_CLIENT_PERMEATE_SERVER_TRANSFER_CLOSE(MessageType.REPORT_CLIENT_PERMEATE_SERVER_TRANSFER_CLOSE, "上报 客户端渗透服务端通信通道关闭"), + + /** + * 上报 客户端渗透服务端通信传输 + * @see AbstractHandleReportClientPermeateServerTransferTypeAdvanced + */ + REPORT_CLIENT_PERMEATE_SERVER_TRANSFER(MessageType.REPORT_CLIENT_PERMEATE_SERVER_TRANSFER, "上报 客户端渗透服务端通信传输"), + + /** * @see AbstractHandleReportClientPermeateClientInitTypeAdvanced */ REPORT_CLIENT_PERMEATE_CLIENT_INIT(MessageType.REPORT_CLIENT_PERMEATE_CLIENT_INIT, "上报 客户端渗透客户端init信息"), @@ -161,11 +175,21 @@ public enum MessageTypeEnums { * @see AbstractHandleDistributeClientPermeateServerCloseTypeAdvanced */ DISTRIBUTE_CLIENT_PERMEATE_SERVER_CLOSE(MessageType.DISTRIBUTE_CLIENT_PERMEATE_SERVER_CLOSE, "下发 客户端渗透服务端init close信息"), - /** + /** + * @see AbstractHandleDistributeClientPermeateServerTransferCloseTypeAdvanced + */ + DISTRIBUTE_CLIENT_PERMEATE_SERVER_TRANSFER_CLOSE(MessageType.DISTRIBUTE_CLIENT_PERMEATE_SERVER_TRANSFER_CLOSE, "下发 客户端渗透服务端通信通道关闭"), + /** + * @see AbstractHandleDistributeClientPermeateServerTransferTypeAdvanced + */ + DISTRIBUTE_CLIENT_PERMEATE_SERVER_TRANSFER(MessageType.DISTRIBUTE_CLIENT_PERMEATE_SERVER_TRANSFER, "下发 客户端渗透服务端通信传输"), + + /** * @see AbstractHandleDistributeClientPermeateClientInitTypeAdvanced */ DISTRIBUTE_CLIENT_PERMEATE_CLIENT_INIT(MessageType.DISTRIBUTE_CLIENT_PERMEATE_CLIENT_INIT, "下发 客户端渗透客户端init信息"), + /** * @see AbstractHandleDistributeClientPermeateClientCloseTypeAdvanced */ diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/advanced/ServerHandleReportClientPermeateServerTransferCloseTypeAdvanced.java b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/advanced/ServerHandleReportClientPermeateServerTransferCloseTypeAdvanced.java new file mode 100644 index 0000000..6beb119 --- /dev/null +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/advanced/ServerHandleReportClientPermeateServerTransferCloseTypeAdvanced.java @@ -0,0 +1,33 @@ +package org.framework.lazy.cloud.network.heartbeat.server.netty.advanced; + +import io.netty.channel.Channel; +import lombok.extern.slf4j.Slf4j; +import org.framework.lazy.cloud.network.heartbeat.common.ChannelContext; +import org.framework.lazy.cloud.network.heartbeat.common.MessageType; +import org.framework.lazy.cloud.network.heartbeat.common.NettyProxyMsg; +import org.framework.lazy.cloud.network.heartbeat.common.NettyTransferChannelContext; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.server.AbstractHandleReportClientPermeateServerTransferCloseTypeAdvanced; +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; + +/** + * 上报 客户端渗透服务端通信通道关闭 + */ +@Slf4j +@Component +public class ServerHandleReportClientPermeateServerTransferCloseTypeAdvanced extends AbstractHandleReportClientPermeateServerTransferCloseTypeAdvanced { + /** + * 处理当前数据 + * + * @param channel 当前通道 + * @param nettyProxyMsg 通道数据 + */ + @Override + protected void doHandler(Channel channel, NettyProxyMsg nettyProxyMsg) { + // 关闭传输通信通道 + Channel nextChannel = ChannelAttributeKeyUtils.getNextChannel(channel); + nextChannel.close(); + channel.close(); + } +} diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/advanced/ServerHandleReportClientPermeateServerTransferTypeAdvanced.java b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/advanced/ServerHandleReportClientPermeateServerTransferTypeAdvanced.java new file mode 100644 index 0000000..741dcd4 --- /dev/null +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/advanced/ServerHandleReportClientPermeateServerTransferTypeAdvanced.java @@ -0,0 +1,63 @@ +package org.framework.lazy.cloud.network.heartbeat.server.netty.advanced; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.Channel; +import io.netty.channel.ChannelFuture; +import lombok.extern.slf4j.Slf4j; +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.ChannelFlowAdapter; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.server.AbstractHandleReportClientPermeateServerTransferTypeAdvanced; +import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelFlowEnum; +import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils; +import org.framework.lazy.cloud.network.heartbeat.server.netty.flow.ServerChannelFlow; +import org.springframework.stereotype.Component; + +/** + * 上报 客户端渗透服务端通信 + * REPORT_CLIENT_PERMEATE_SERVER_TRANSFER + */ +@Slf4j +@Component +public class ServerHandleReportClientPermeateServerTransferTypeAdvanced extends AbstractHandleReportClientPermeateServerTransferTypeAdvanced { + private final ChannelFlowAdapter channelFlowAdapter; + + public ServerHandleReportClientPermeateServerTransferTypeAdvanced(ChannelFlowAdapter channelFlowAdapter) { + this.channelFlowAdapter = channelFlowAdapter; + } + + /** + * 处理当前数据 + * + * @param channel 当前通道 + * @param msg 通道数据 + */ + @Override + protected void doHandler(Channel channel, NettyProxyMsg msg) { + String clientId = new String(msg.getClientId()); + Integer visitorPort = Integer.valueOf(new String(msg.getVisitorPort())); + byte[] visitorId = msg.getVisitorId(); +// log.info("访客ID:【{}】 访客端口:[{}] 接收到客户端:[{}]", new String(visitorId), visitorPort, clientId); +// log.debug("访客ID:【{}】接收到客户端:[{}] 返回数据大小:[{}] 内网穿透返回的数据:[{}]", new String(visitorId), clientId, msg.getData().length, new String(msg.getData())); + // 将数据转发访客通道 + Channel visitor = NettyRealIdContext.getReal(visitorId); + Channel nextChannel = ChannelAttributeKeyUtils.getNextChannel(channel); + if (nextChannel != null) { + ByteBuf buf = nextChannel.config().getAllocator().buffer(msg.getData().length); + buf.writeBytes(msg.getData()); + ChannelFuture channelFuture = nextChannel.writeAndFlush(buf); + boolean success = channelFuture.isSuccess(); + log.debug("visitor writerAndFlush status: {}", success); + // 记录出口数据 + ServerChannelFlow serverChannelFlow = ServerChannelFlow + .builder() + .channelFlowEnum(ChannelFlowEnum.OUT_FLOW) + .port(visitorPort) + .clientId(clientId) + .flow(msg.getData().length) + .build(); + channelFlowAdapter.asyncHandler(channel, serverChannelFlow); + } + log.debug("访客ID:【{}】接收到客户端:[{}] 发送真实数据成功", new String(visitorId), clientId); + } +} diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/advanced/ServerHandleReportHandleChannelTransferTypeAdvanced.java b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/advanced/ServerHandleReportHandleChannelTransferTypeAdvanced.java index 356b171..8eceedd 100644 --- a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/advanced/ServerHandleReportHandleChannelTransferTypeAdvanced.java +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/advanced/ServerHandleReportHandleChannelTransferTypeAdvanced.java @@ -19,7 +19,7 @@ import java.nio.charset.StandardCharsets; /** * 服务端处理客户端数据传输 - * REPORT_CLIENT_STAGING_CLOSED + * REPORT_CLIENT_TRANSFER */ @Slf4j @Component diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/filter/ClientPermeateServerRealFilter.java b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/filter/ClientPermeateServerRealFilter.java index 4262a00..cb7a99f 100644 --- a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/filter/ClientPermeateServerRealFilter.java +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/filter/ClientPermeateServerRealFilter.java @@ -5,8 +5,7 @@ import io.netty.channel.socket.SocketChannel; import org.framework.lazy.cloud.network.heartbeat.common.decoder.TransferDecoder; import org.framework.lazy.cloud.network.heartbeat.common.encoder.TransferEncoder; import org.framework.lazy.cloud.network.heartbeat.common.filter.DebugChannelInitializer; -import org.framework.lazy.cloud.network.heartbeat.server.netty.handler.ClientPermeateServerRealHandler; -import org.framework.lazy.cloud.network.heartbeat.server.netty.handler.PermeateClientRealHandler; +import org.framework.lazy.cloud.network.heartbeat.server.netty.handler.NettyClientPermeateServerRealHandler; /** * 客户端渗透服务端 @@ -24,7 +23,7 @@ public class ClientPermeateServerRealFilter extends DebugChannelInitializer { +public class NettyClientPermeateServerRealHandler extends SimpleChannelInboundHandler { @Override public void channelActive(ChannelHandlerContext ctx) throws Exception { @@ -42,7 +40,7 @@ public class ClientPermeateServerRealHandler extends SimpleChannelInboundHandler // 消息下发到客户端 NettyProxyMsg nettyMsg = new NettyProxyMsg(); - nettyMsg.setType(MessageType.DISTRIBUTE_CLIENT_TRANSFER); + nettyMsg.setType(MessageType.DISTRIBUTE_CLIENT_PERMEATE_SERVER_TRANSFER); nettyMsg.setData(bytes); nextChannel.writeAndFlush(nettyMsg); @@ -66,13 +64,6 @@ public class ClientPermeateServerRealHandler extends SimpleChannelInboundHandler public void channelWritabilityChanged(ChannelHandlerContext ctx) throws Exception { - // 获取访客的传输通道 - Channel nextChannel = ChannelAttributeKeyUtils.getNextChannel(ctx.channel()); - if (nextChannel != null) { - log.debug("transfer AUTO_READ:{} ",ctx.channel().isWritable()); - nextChannel.config().setOption(ChannelOption.AUTO_READ, ctx.channel().isWritable()); - } - } @Override diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/infrastructure/entity/LazyVisitorPortFlowDO.java b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/infrastructure/entity/LazyVisitorPortFlowDO.java index cd5e274..a0af1a4 100644 --- a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/infrastructure/entity/LazyVisitorPortFlowDO.java +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/infrastructure/entity/LazyVisitorPortFlowDO.java @@ -27,7 +27,7 @@ public class LazyVisitorPortFlowDO { * 客户端ID */ @Schema(description = "客户端ID", name = "clientId", example = "") - @LazyTableFieldUnique(name = "client_id", comment = "客户端ID", columnType = "varchar(50)") + @LazyTableFieldUnique(name = "client_id", comment = "客户端ID", columnType = "varchar(50)",notNull = true) private String clientId; /**