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 f544c65..2a4a7fa 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 @@ -2,13 +2,13 @@ package org.framework.lazy.cloud.network.heartbeat.client.config; import org.framework.lazy.cloud.network.heartbeat.client.netty.advanced.*; -import org.framework.lazy.cloud.network.heartbeat.client.netty.advanced.*; +import org.framework.lazy.cloud.network.heartbeat.client.netty.event.ClientChangeEvent; +import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelFlowAdapter; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.HandleChannelTypeAdvanced; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Role; -import org.framework.lazy.cloud.network.heartbeat.client.netty.event.ClientChangeEvent; -import org.framework.lazy.cloud.network.heartbeat.common.advanced.HandleChannelTypeAdvanced; import java.util.List; @@ -55,6 +55,7 @@ public class HeartbeatClientConfiguration { return new ClientHandleDistributeClientTransferServerPermeateChannelConnectionSuccessfulTypeAdvanced(); } + @Bean public ClientHandleDistributeSingleClientRealCloseVisitorTypeAdvanced handleDistributeSingleClientRealCloseVisitorTypeAdvanced() { return new ClientHandleDistributeSingleClientRealCloseVisitorTypeAdvanced(); @@ -90,10 +91,20 @@ public class HeartbeatClientConfiguration { return new HandleDistributeStagingOpenedTypeAdvanced(); } + /** + * 处理 客户端渗透服务端init信息 + * + * @return ClientHandleDistributeClientPermeateServerInitTypeAdvanced + */ + @Bean + public ClientHandleDistributeClientPermeateServerInitTypeAdvanced clientHandleDistributeClientPermeateServerInitTypeAdvanced(NettyClientProperties nettyClientProperties) { + return new ClientHandleDistributeClientPermeateServerInitTypeAdvanced(nettyClientProperties); + } @Bean public ClientHandleDistributeSingleClientRealConnectTypeAdvanced clientHandleDistributeSingleClientRealConnectTypeAdvanced(NettyClientProperties nettyClientProperties, List handleChannelTypeAdvancedList) { return new ClientHandleDistributeSingleClientRealConnectTypeAdvanced(nettyClientProperties, handleChannelTypeAdvancedList); } + } diff --git a/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/advanced/ClientHandleDistributeClientPermeateServerInitTypeAdvanced.java b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/advanced/ClientHandleDistributeClientPermeateServerInitTypeAdvanced.java new file mode 100644 index 0000000..0e6c2f6 --- /dev/null +++ b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/advanced/ClientHandleDistributeClientPermeateServerInitTypeAdvanced.java @@ -0,0 +1,68 @@ +package org.framework.lazy.cloud.network.heartbeat.client.netty.advanced; + + +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.client.netty.socket.NettyClientPermeateServerVisitorSocket; +import org.framework.lazy.cloud.network.heartbeat.common.NettyProxyMsg; +import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelFlowAdapter; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.HandleChannelTypeAdvanced; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.client.AbstractHandleDistributeClientPermeateServerInitTypeAdvanced; +import org.framework.lazy.cloud.network.heartbeat.common.enums.MessageTypeEnums; +import org.wu.framework.inner.lazy.orm.spring.SpringConnectionHandler; +import org.wu.framework.spring.utils.SpringContextHolder; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + + +/** + * 客户端渗透服务端init信息 + * + * @see MessageTypeEnums#DISTRIBUTE_CLIENT_PERMEATE_SERVER_INIT + */ +@Slf4j +public class ClientHandleDistributeClientPermeateServerInitTypeAdvanced extends AbstractHandleDistributeClientPermeateServerInitTypeAdvanced { + + private final NettyClientProperties nettyClientProperties; + + public ClientHandleDistributeClientPermeateServerInitTypeAdvanced(NettyClientProperties nettyClientProperties) { + this.nettyClientProperties = nettyClientProperties; + } + + /** + * 处理当前数据 + * + * @param channel 当前通道 + * @param nettyProxyMsg 通道数据 + */ + @Override + public void doHandler(Channel channel, NettyProxyMsg nettyProxyMsg) { + // 初始化 客户端渗透服务端socket + byte[] clientIdBytes = nettyProxyMsg.getClientId(); + byte[] visitorPort = nettyProxyMsg.getVisitorPort(); + byte[] clientTargetIp = nettyProxyMsg.getClientTargetIp(); + byte[] clientTargetPort = nettyProxyMsg.getClientTargetPort(); + + List handleChannelTypeAdvancedList = new ArrayList<>(SpringContextHolder.getApplicationContext().getBeansOfType(HandleChannelTypeAdvanced.class).values()); +// ChannelFlowAdapter channelFlowAdapter = SpringContextHolder.getBean(ChannelFlowAdapter.class); + NettyClientPermeateServerVisitorSocket nettyClientPermeateServerVisitorSocket = NettyClientPermeateServerVisitorSocket.NettyVisitorSocketBuilder.builder() + .builderClientId(new String(clientIdBytes)) + .builderClientTargetIp(new String(clientTargetIp)) + .builderClientTargetPort(Integer.parseInt(new String(clientTargetPort))) + .builderVisitorPort(Integer.parseInt(new String(visitorPort))) + .builderNettyClientProperties(nettyClientProperties) +// .builderChannelFlowAdapter(channelFlowAdapter) + .builderHandleChannelTypeAdvancedList(handleChannelTypeAdvancedList) + + .build(); + try { + nettyClientPermeateServerVisitorSocket.start(); + } catch (Exception e) { + e.printStackTrace(); + } + } + +} diff --git a/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/advanced/ClientHandleDistributeClientTransferServerPermeateChannelConnectionSuccessfulTypeAdvanced.java b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/advanced/ClientHandleDistributeClientTransferServerPermeateChannelConnectionSuccessfulTypeAdvanced.java index 84669df..c2ae8b9 100644 --- a/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/advanced/ClientHandleDistributeClientTransferServerPermeateChannelConnectionSuccessfulTypeAdvanced.java +++ b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/advanced/ClientHandleDistributeClientTransferServerPermeateChannelConnectionSuccessfulTypeAdvanced.java @@ -10,6 +10,7 @@ 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.advanced.client.AbstractHandleDistributeClientTransferServerPermeateChannelConnectionSuccessfulTypeAdvanced; import org.framework.lazy.cloud.network.heartbeat.common.enums.MessageTypeEnums; +import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils; /** @@ -36,7 +37,8 @@ public class ClientHandleDistributeClientTransferServerPermeateChannelConnection byte[] msgVisitorId = nettyProxyMsg.getVisitorId(); String visitorId = new String(msgVisitorId); Channel visitor = NettyRealIdContext.getReal(visitorId); - visitor.config().setOption(ChannelOption.AUTO_READ, true); + Channel nextChannel = ChannelAttributeKeyUtils.getNextChannel(channel); + nextChannel.config().setOption(ChannelOption.AUTO_READ, true); } 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 4c7b65c..57dbdb5 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 @@ -23,14 +23,10 @@ import java.util.UUID; @Slf4j public class NettyClientPermeateServerVisitorHandler extends SimpleChannelInboundHandler { private final InternalNetworkPermeateServerVisitor internalNetworkPermeateServerVisitor; -// private final ChannelFlowAdapter channelFlowAdapter;// 流量适配器 // private final NettyChannelPool nettyChannelPool = new DefaultNettyChannelPool(10); public NettyClientPermeateServerVisitorHandler(InternalNetworkPermeateServerVisitor internalNetworkPermeateServerVisitor) { this.internalNetworkPermeateServerVisitor = internalNetworkPermeateServerVisitor; - -// this.channelFlowAdapter = channelFlowAdapter; - } /** @@ -59,7 +55,7 @@ public class NettyClientPermeateServerVisitorHandler extends SimpleChannelInboun // Channel transferChannel = nettyChannelPool.availableChannel(visitorId); // 创建访客连接服务端通道 NettyClientTransferServerSocket.buildTransferServer(internalNetworkPermeateServerVisitor); - log.info("服务端访客端口连接成功了"); + log.info("客户端渗透服务端访客端口连接成功了"); super.channelActive(ctx); } @@ -74,12 +70,14 @@ public class NettyClientPermeateServerVisitorHandler extends SimpleChannelInboun byte[] bytes = new byte[buf.readableBytes()]; buf.readBytes(bytes); // 获取客户端通道,而后进行数据下发 - log.debug("【服务端】访客端口成功接收数据:{}", new String(bytes)); + log.debug("【客户端渗透服务端】访客端口成功接收数据:{}", new String(bytes)); // 使用访客的通信通道 + Integer visitorPort = internalNetworkPermeateServerVisitor.getVisitorPort(); NettyProxyMsg nettyProxyMsg = new NettyProxyMsg(); nettyProxyMsg.setType(MessageType.REPORT_CLIENT_TRANSFER); nettyProxyMsg.setVisitorId(visitorId); + nettyProxyMsg.setVisitorPort(visitorPort); nettyProxyMsg.setData(bytes); nextChannel.writeAndFlush(nettyProxyMsg); // 处理访客流量 @@ -91,7 +89,7 @@ public class NettyClientPermeateServerVisitorHandler extends SimpleChannelInboun // .flow(bytes.length) // .build(); // channelFlowAdapter.asyncHandler(visitorChannel, serverChannelFlow); - log.debug("服务端访客端口成功发送数据了"); + log.debug("【客户端渗透服务端】访客端口成功发送数据了"); } @Override @@ -119,7 +117,7 @@ public class NettyClientPermeateServerVisitorHandler extends SimpleChannelInboun // 关闭 访客通信通道、访客真实通道 NettyRealIdContext.clear(visitorId); NettyCommunicationIdContext.clear(visitorId); - log.warn("服务端访客端口断开连接"); + log.warn("【客户端渗透服务端】访客端口断开连接"); super.channelInactive(ctx); } @@ -167,13 +165,14 @@ public class NettyClientPermeateServerVisitorHandler extends SimpleChannelInboun String visitorId = ChannelAttributeKeyUtils.getVisitorId(channel); // 使用通信通道 下发关闭访客 Channel visitorChannel = NettyCommunicationIdContext.getVisitor(visitorId); - if (visitorChannel != null) { + Channel nextChannel = ChannelAttributeKeyUtils.getNextChannel(ctx.channel()); + if (nextChannel != null) { // 下发关闭访客 NettyProxyMsg closeRealClient = new NettyProxyMsg(); closeRealClient.setType(MessageType.DISTRIBUTE_SINGLE_CLIENT_REAL_CONNECT_AUTO_READ); closeRealClient.setClientId(clientId); closeRealClient.setVisitorId(visitorId); - visitorChannel.writeAndFlush(closeRealClient); + nextChannel.writeAndFlush(closeRealClient); } ctx.close(); diff --git a/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/socket/NettyClientPermeateServerVisitorSocket.java b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/socket/NettyClientPermeateServerVisitorSocket.java index 75de2a7..3e664fb 100644 --- a/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/socket/NettyClientPermeateServerVisitorSocket.java +++ b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/socket/NettyClientPermeateServerVisitorSocket.java @@ -12,8 +12,10 @@ import org.framework.lazy.cloud.network.heartbeat.client.netty.filter.NettyClien import org.framework.lazy.cloud.network.heartbeat.common.NettyClientVisitorContext; import org.framework.lazy.cloud.network.heartbeat.common.NettyVisitorPortContext; import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelFlowAdapter; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.HandleChannelTypeAdvanced; import java.io.IOException; +import java.util.List; /** * 内网穿透 客户端渗透服务端通道 @@ -143,6 +145,11 @@ public class NettyClientPermeateServerVisitorSocket { */ private NettyClientProperties nettyClientProperties; + /** + * 处理器 + */ + private List handleChannelTypeAdvancedList; + public static NettyVisitorSocketBuilder builder() { return new NettyVisitorSocketBuilder(); } @@ -200,6 +207,15 @@ public class NettyClientPermeateServerVisitorSocket { public NettyVisitorSocketBuilder builderChannelFlowAdapter(ChannelFlowAdapter channelFlowAdapter) { this.channelFlowAdapter = channelFlowAdapter; return this; + } /** + * 绑定流量适配器 + * + * @param handleChannelTypeAdvancedList 流量适配器 + * @return 当前对象 + */ + public NettyVisitorSocketBuilder builderHandleChannelTypeAdvancedList(List handleChannelTypeAdvancedList) { + this.handleChannelTypeAdvancedList = handleChannelTypeAdvancedList; + return this; } /** * 服务端地址信息 @@ -238,6 +254,9 @@ public class NettyClientPermeateServerVisitorSocket { internalNetworkPermeateServerVisitor.setTargetIp(clientTargetIp); internalNetworkPermeateServerVisitor.setTargetPort(clientTargetPort); internalNetworkPermeateServerVisitor.setVisitorPort(visitorPort); + internalNetworkPermeateServerVisitor.setNettyClientProperties(nettyClientProperties); + internalNetworkPermeateServerVisitor.setChannelFlowAdapter(channelFlowAdapter); + internalNetworkPermeateServerVisitor.setHandleChannelTypeAdvancedList(handleChannelTypeAdvancedList); NettyClientPermeateServerVisitorFilter visitorFilter = new NettyClientPermeateServerVisitorFilter(internalNetworkPermeateServerVisitor); 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 0601331..5440683 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 @@ -105,6 +105,14 @@ public class MessageType { */ public static final byte REPORT_CLIENT_TRANSFER_SERVER_PERMEATE_CHANNEL_CONNECTION_SUCCESSFUL = 0X12; + /** + * 上报 客户端渗透服务端init信息 + * + * @see MessageTypeEnums#REPORT_CLIENT_PERMEATE_SERVER_INIT + * @see AbstractHandleReportClientPermeateServerInitTypeAdvanced + */ + public static final byte REPORT_CLIENT_PERMEATE_SERVER_INIT = 0X13; + /** * 下发 客户端接收连接成功通知 * @@ -197,4 +205,12 @@ public class MessageType { * @see AbstractHandleDistributeClientTransferServerPermeateChannelConnectionSuccessfulTypeAdvanced */ public static final byte DISTRIBUTE_CLIENT_TRANSFER_SERVER_PERMEATE_CHANNEL_CONNECTION_SUCCESSFUL = -0X12; + + /** + * 下发 客户端渗透服务端init信息 + * + * @see MessageTypeEnums#DISTRIBUTE_CLIENT_PERMEATE_SERVER_INIT + * @see AbstractHandleDistributeClientPermeateServerInitTypeAdvanced + */ + public static final byte DISTRIBUTE_CLIENT_PERMEATE_SERVER_INIT = -0X13; } diff --git a/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/client/AbstractHandleDistributeClientPermeateServerInitTypeAdvanced.java b/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/client/AbstractHandleDistributeClientPermeateServerInitTypeAdvanced.java new file mode 100644 index 0000000..fff601e --- /dev/null +++ b/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/client/AbstractHandleDistributeClientPermeateServerInitTypeAdvanced.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; + + +/** + * 下发 客户端渗透服务端init信息 + * + * @see MessageTypeEnums#DISTRIBUTE_CLIENT_PERMEATE_SERVER_INIT + */ +public abstract class AbstractHandleDistributeClientPermeateServerInitTypeAdvanced extends AbstractHandleChannelTypeAdvanced implements HandleChannelTypeAdvanced { + + + /** + * 是否支持当前类型 + * + * @param msg 通道数据 + * @return 布尔类型 是、否 + */ + @Override + public boolean doSupport(NettyProxyMsg msg) { + return MessageTypeEnums.DISTRIBUTE_CLIENT_PERMEATE_SERVER_INIT.getTypeByte() == msg.getType(); + } +} diff --git a/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/server/AbstractHandleReportClientPermeateServerInitTypeAdvanced.java b/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/server/AbstractHandleReportClientPermeateServerInitTypeAdvanced.java new file mode 100644 index 0000000..64ed9c5 --- /dev/null +++ b/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/server/AbstractHandleReportClientPermeateServerInitTypeAdvanced.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; + + +/** + * 上报 客户端渗透服务端init信息 + * REPORT_CLIENT_PERMEATE_SERVER_INIT + */ +public abstract class AbstractHandleReportClientPermeateServerInitTypeAdvanced extends AbstractHandleChannelTypeAdvanced implements HandleChannelTypeAdvanced { + + + /** + * 是否支持当前类型 + * + * @param msg 通道数据 + * @return 布尔类型 是、否 + */ + @Override + public boolean doSupport(NettyProxyMsg msg) { + return MessageTypeEnums.REPORT_CLIENT_PERMEATE_SERVER_INIT.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 7d4c0bb..cce44c6 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 @@ -2,10 +2,8 @@ package org.framework.lazy.cloud.network.heartbeat.common.enums; import lombok.AllArgsConstructor; import lombok.Getter; -import org.framework.lazy.cloud.network.heartbeat.common.advanced.AbstractHandleChannelHeartbeatTypeAdvanced; -import org.framework.lazy.cloud.network.heartbeat.common.advanced.client.*; -import org.framework.lazy.cloud.network.heartbeat.common.advanced.server.*; import org.framework.lazy.cloud.network.heartbeat.common.MessageType; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.AbstractHandleChannelHeartbeatTypeAdvanced; import org.framework.lazy.cloud.network.heartbeat.common.advanced.client.*; import org.framework.lazy.cloud.network.heartbeat.common.advanced.server.*; @@ -64,10 +62,13 @@ public enum MessageTypeEnums { * @see AbstractHandleReportClientTransferServerPermeateChannelConnectionSuccessfulTypeAdvanced */ REPORT_CLIENT_TRANSFER_SERVER_PERMEATE_CHANNEL_CONNECTION_SUCCESSFUL(MessageType.REPORT_CLIENT_TRANSFER_SERVER_PERMEATE_CHANNEL_CONNECTION_SUCCESSFUL, "上报 客户端渗透服务端数据传输通道连接成功"), + /** + * @see AbstractHandleReportClientPermeateServerInitTypeAdvanced + */ + REPORT_CLIENT_PERMEATE_SERVER_INIT(MessageType.REPORT_CLIENT_PERMEATE_SERVER_INIT, "上报 客户端渗透服务端init信息"), /** * @see AbstractHandleDistributeConnectSuccessNotificationTypeAdvancedHandle */ - DISTRIBUTE_CLIENT_CONNECTION_SUCCESS_NOTIFICATION(MessageType.DISTRIBUTE_CLIENT_CONNECTION_SUCCESS_NOTIFICATION, "下发 客户端接收连接成功通知"), @@ -116,6 +117,10 @@ public enum MessageTypeEnums { * @see AbstractHandleDistributeClientTransferServerPermeateChannelConnectionSuccessfulTypeAdvanced */ DISTRIBUTE_CLIENT_TRANSFER_SERVER_PERMEATE_CHANNEL_CONNECTION_SUCCESSFUL(MessageType.DISTRIBUTE_CLIENT_TRANSFER_SERVER_PERMEATE_CHANNEL_CONNECTION_SUCCESSFUL, "下发 客户端渗透服务端数据传输通道连接成功"), + /** + * @see AbstractHandleDistributeClientPermeateServerInitTypeAdvanced + */ + DISTRIBUTE_CLIENT_PERMEATE_SERVER_INIT(MessageType.DISTRIBUTE_CLIENT_PERMEATE_SERVER_INIT, "下发 客户端渗透服务端init信息"), ; private final byte typeByte; diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/config/HeartbeatServerConfiguration.java b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/config/HeartbeatServerConfiguration.java index 920b50a..c365ecc 100644 --- a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/config/HeartbeatServerConfiguration.java +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/config/HeartbeatServerConfiguration.java @@ -1,16 +1,15 @@ package org.framework.lazy.cloud.network.heartbeat.server.config; +import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelFlowAdapter; import org.framework.lazy.cloud.network.heartbeat.server.netty.advanced.*; import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.LazyClientStatsChangeApplication; +import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.LazyInternalNetworkClientPermeateServerMappingApplication; import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.LazyInternalNetworkPenetrationMappingApplication; import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.LazyNettyClientBlacklistApplication; -import org.framework.lazy.cloud.network.heartbeat.server.netty.advanced.*; - import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Role; -import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelFlowAdapter; @Role(BeanDefinition.ROLE_INFRASTRUCTURE) @@ -43,8 +42,12 @@ public class HeartbeatServerConfiguration { public ServerHandleClientConnectSuccessTypeAdvanced serverReportConnectSuccessTypeAdvanced( LazyClientStatsChangeApplication lazyClientStatsChangeApplication, LazyNettyClientBlacklistApplication lazyNettyClientBlacklistApplication, - LazyInternalNetworkPenetrationMappingApplication lazyInternalNetworkPenetrationMappingApplication) { - return new ServerHandleClientConnectSuccessTypeAdvanced(lazyClientStatsChangeApplication, lazyNettyClientBlacklistApplication, lazyInternalNetworkPenetrationMappingApplication); + LazyInternalNetworkPenetrationMappingApplication lazyInternalNetworkPenetrationMappingApplication, + LazyInternalNetworkClientPermeateServerMappingApplication lazyInternalNetworkClientPermeateServerMappingApplication) { + return new ServerHandleClientConnectSuccessTypeAdvanced(lazyClientStatsChangeApplication, + lazyNettyClientBlacklistApplication, + lazyInternalNetworkPenetrationMappingApplication, + lazyInternalNetworkClientPermeateServerMappingApplication); } /** diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/advanced/ServerHandleClientConnectSuccessTypeAdvanced.java b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/advanced/ServerHandleClientConnectSuccessTypeAdvanced.java index 4dfef04..d12a1d7 100644 --- a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/advanced/ServerHandleClientConnectSuccessTypeAdvanced.java +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/advanced/ServerHandleClientConnectSuccessTypeAdvanced.java @@ -4,16 +4,19 @@ package org.framework.lazy.cloud.network.heartbeat.server.netty.advanced; import com.alibaba.fastjson.JSON; import io.netty.channel.Channel; import lombok.extern.slf4j.Slf4j; -import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.LazyClientStatsChangeApplication; -import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.LazyInternalNetworkPenetrationMappingApplication; -import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.LazyNettyClientBlacklistApplication; -import org.springframework.stereotype.Component; 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.advanced.server.AbstractHandleClientConnectSuccessTypeAdvanced; import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils; +import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.LazyClientStatsChangeApplication; +import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.LazyInternalNetworkClientPermeateServerMappingApplication; +import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.LazyInternalNetworkPenetrationMappingApplication; +import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.LazyNettyClientBlacklistApplication; +import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.internal.network.client.permeate.server.mapping.LazyInternalNetworkClientPermeateServerMappingQueryListCommand; +import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.dto.LazyInternalNetworkClientPermeateServerMappingDTO; import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.netty.client.blacklist.LazyNettyClientBlacklist; +import org.springframework.stereotype.Component; import java.nio.charset.StandardCharsets; import java.util.List; @@ -30,11 +33,13 @@ public class ServerHandleClientConnectSuccessTypeAdvanced extends AbstractHandle private final LazyClientStatsChangeApplication lazyClientStatsChangeApplication; private final LazyNettyClientBlacklistApplication lazyNettyClientBlacklistApplication; private final LazyInternalNetworkPenetrationMappingApplication lazyInternalNetworkPenetrationMappingApplication; + private final LazyInternalNetworkClientPermeateServerMappingApplication lazyInternalNetworkClientPermeateServerMappingApplication; - public ServerHandleClientConnectSuccessTypeAdvanced(LazyClientStatsChangeApplication lazyClientStatsChangeApplication, LazyNettyClientBlacklistApplication lazyNettyClientBlacklistApplication, LazyInternalNetworkPenetrationMappingApplication lazyInternalNetworkPenetrationMappingApplication) { + public ServerHandleClientConnectSuccessTypeAdvanced(LazyClientStatsChangeApplication lazyClientStatsChangeApplication, LazyNettyClientBlacklistApplication lazyNettyClientBlacklistApplication, LazyInternalNetworkPenetrationMappingApplication lazyInternalNetworkPenetrationMappingApplication, LazyInternalNetworkClientPermeateServerMappingApplication lazyInternalNetworkClientPermeateServerMappingApplication) { this.lazyClientStatsChangeApplication = lazyClientStatsChangeApplication; this.lazyNettyClientBlacklistApplication = lazyNettyClientBlacklistApplication; this.lazyInternalNetworkPenetrationMappingApplication = lazyInternalNetworkPenetrationMappingApplication; + this.lazyInternalNetworkClientPermeateServerMappingApplication = lazyInternalNetworkClientPermeateServerMappingApplication; } @@ -94,6 +99,28 @@ public class ServerHandleClientConnectSuccessTypeAdvanced extends AbstractHandle } }); + // 查询客户端渗透服务端信息 + LazyInternalNetworkClientPermeateServerMappingQueryListCommand lazyInternalNetworkClientPermeateServerMappingQueryListCommand = new LazyInternalNetworkClientPermeateServerMappingQueryListCommand(); + lazyInternalNetworkClientPermeateServerMappingQueryListCommand.setClientId(clientId); + lazyInternalNetworkClientPermeateServerMappingQueryListCommand.setIsDeleted(false); + lazyInternalNetworkClientPermeateServerMappingApplication.findList(lazyInternalNetworkClientPermeateServerMappingQueryListCommand) + .accept(lazyInternalNetworkClientPermeateServerMappingDTOS -> { + for (LazyInternalNetworkClientPermeateServerMappingDTO lazyInternalNetworkClientPermeateServerMappingDTO : lazyInternalNetworkClientPermeateServerMappingDTOS) { + + String permeateTargetIp = lazyInternalNetworkClientPermeateServerMappingDTO.getPermeateTargetIp(); + Integer permeateTargetPort = lazyInternalNetworkClientPermeateServerMappingDTO.getPermeateTargetPort(); + Integer visitorPort = lazyInternalNetworkClientPermeateServerMappingDTO.getVisitorPort(); + NettyProxyMsg nettyMsg = new NettyProxyMsg(); + nettyMsg.setType(MessageType.DISTRIBUTE_CLIENT_PERMEATE_SERVER_INIT); + nettyMsg.setClientTargetIp(permeateTargetIp); + nettyMsg.setClientTargetPort(permeateTargetPort); + nettyMsg.setVisitorPort(visitorPort); + newChannel.writeAndFlush(nettyMsg); + } + }); + + + // 查询客户端渗透客户端信息 } diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/application/impl/LazyInternalNetworkClientPermeateServerMappingApplicationImpl.java b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/application/impl/LazyInternalNetworkClientPermeateServerMappingApplicationImpl.java index f0140cc..27ec58f 100644 --- a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/application/impl/LazyInternalNetworkClientPermeateServerMappingApplicationImpl.java +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/application/impl/LazyInternalNetworkClientPermeateServerMappingApplicationImpl.java @@ -1,5 +1,10 @@ package org.framework.lazy.cloud.network.heartbeat.server.standalone.application.impl; +import io.netty.channel.Channel; +import org.framework.lazy.cloud.network.heartbeat.client.netty.event.ClientChangeEvent; +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.server.properties.ServerNodeProperties; import org.wu.framework.database.lazy.web.plus.stereotype.LazyApplication; import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.LazyInternalNetworkClientPermeateServerMappingApplication; @@ -51,6 +56,21 @@ public class LazyInternalNetworkClientPermeateServerMappingApplicationImpl imple LazyInternalNetworkClientPermeateServerMapping lazyInternalNetworkClientPermeateServerMapping = LazyInternalNetworkClientPermeateServerMappingDTOAssembler.INSTANCE.toLazyInternalNetworkClientPermeateServerMapping(lazyInternalNetworkClientPermeateServerMappingStoryCommand); String serverId = serverNodeProperties.getNodeId(); lazyInternalNetworkClientPermeateServerMapping.setServerId(serverId); + // 发送客户端初始化渗透 + String clientId = lazyInternalNetworkClientPermeateServerMapping.getClientId(); + ChannelContext.ClientChannel clientChannel = ChannelContext.get(clientId); + if(clientChannel!=null && clientChannel.getChannel()!=null&&clientChannel.getChannel().isActive()){ + Channel channel = clientChannel.getChannel(); + String permeateTargetIp = lazyInternalNetworkClientPermeateServerMapping.getPermeateTargetIp(); + Integer permeateTargetPort = lazyInternalNetworkClientPermeateServerMapping.getPermeateTargetPort(); + Integer visitorPort = lazyInternalNetworkClientPermeateServerMapping.getVisitorPort(); + NettyProxyMsg nettyMsg = new NettyProxyMsg(); + nettyMsg.setType(MessageType.DISTRIBUTE_CLIENT_PERMEATE_SERVER_INIT); + nettyMsg.setClientTargetIp(permeateTargetIp); + nettyMsg.setClientTargetPort(permeateTargetPort); + nettyMsg.setVisitorPort(visitorPort); + channel.writeAndFlush(nettyMsg); + } return lazyInternalNetworkClientPermeateServerMappingRepository.story(lazyInternalNetworkClientPermeateServerMapping); } /**