diff --git a/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/config/ClientAutoConfiguration.java b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/config/ClientAutoConfiguration.java index f0a5cfb..2640c92 100644 --- a/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/config/ClientAutoConfiguration.java +++ b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/config/ClientAutoConfiguration.java @@ -388,8 +388,8 @@ public class ClientAutoConfiguration { @Configuration static class SocksProxyConfiguration { @Bean - public NettySocketProtocolHandleSocketClientProxyServerTypeAdvanced nettySocketProtocolHandleSocketClientProxyServerTypeAdvanced() { - return new NettySocketProtocolHandleSocketClientProxyServerTypeAdvanced(); + public NettySocketProtocolHandleSocketClientProxyServerStartTypeAdvanced nettySocketProtocolHandleSocketClientProxyServerTypeAdvanced() { + return new NettySocketProtocolHandleSocketClientProxyServerStartTypeAdvanced(); } @Bean diff --git a/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/socks/NettySocksClientProxyClient.java b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/socks/NettySocksClientProxyClient.java new file mode 100644 index 0000000..cc76724 --- /dev/null +++ b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/socks/NettySocksClientProxyClient.java @@ -0,0 +1,48 @@ +package org.framework.lazy.cloud.network.heartbeat.client.netty.proxy.socks; + +import io.netty.handler.codec.socksx.v5.Socks5AddressType; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.framework.lazy.cloud.network.heartbeat.client.config.NettyClientProperties; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.HandleChannelTypeAdvanced; + +import java.util.List; + + +/** + * 客户端代理服务端配置信息 + */ +@NoArgsConstructor +@Data +public class NettySocksClientProxyClient { + + /** + * 目标地址 + */ + private String targetIp; + + /** + * 目标端口 + */ + private Integer targetPort; + + /** + * 服务端地址信息 + */ + private NettyClientProperties nettyClientProperties; + + /** + * 通道处理器 + */ + private List handleChannelTypeAdvancedList; + + /** + * 是否是ssl + */ + private boolean isSsl; + /** + * 地址类型 + */ + private Socks5AddressType socks5AddressType; + +} diff --git a/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/socks/advanced/ClientHandleDistributeSocksClientProxyClientConnectionTransferFailAdvanced.java b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/socks/advanced/ClientHandleDistributeSocksClientProxyClientConnectionTransferFailAdvanced.java new file mode 100644 index 0000000..44c3896 --- /dev/null +++ b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/socks/advanced/ClientHandleDistributeSocksClientProxyClientConnectionTransferFailAdvanced.java @@ -0,0 +1,27 @@ +package org.framework.lazy.cloud.network.heartbeat.client.netty.proxy.socks.advanced; + +import lombok.extern.slf4j.Slf4j; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyChannelContext; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.client.AbstractHandleSocksDistributeClientProxyClientConnectionTransferFailTypeAdvanced; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.client.AbstractHandleSocksDistributeClientProxyServerConnectionTransferFailTypeAdvanced; + + +@Slf4j +public class ClientHandleDistributeSocksClientProxyClientConnectionTransferFailAdvanced extends + AbstractHandleSocksDistributeClientProxyClientConnectionTransferFailTypeAdvanced { + + + /** + * 处理当前数据 + * + * @param nettyChannelContext 当前通道 + * @param nettyProxyMsg 通道数据 + */ + @Override + protected void doHandler(NettyChannelContext nettyChannelContext, NettyProxyMsg nettyProxyMsg) { + + // 传输通道关闭 + + } +} diff --git a/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/socks/advanced/ClientHandleDistributeSocksClientProxyClientConnectionTransferSuccessfulAdvanced.java b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/socks/advanced/ClientHandleDistributeSocksClientProxyClientConnectionTransferSuccessfulAdvanced.java new file mode 100644 index 0000000..da34eb3 --- /dev/null +++ b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/socks/advanced/ClientHandleDistributeSocksClientProxyClientConnectionTransferSuccessfulAdvanced.java @@ -0,0 +1,52 @@ +package org.framework.lazy.cloud.network.heartbeat.client.netty.proxy.socks.advanced; + +import io.netty.channel.Channel; +import io.netty.handler.codec.socksx.v5.DefaultSocks5CommandResponse; +import io.netty.handler.codec.socksx.v5.Socks5AddressType; +import io.netty.handler.codec.socksx.v5.Socks5CommandRequestDecoder; +import io.netty.handler.codec.socksx.v5.Socks5CommandStatus; +import lombok.extern.slf4j.Slf4j; +import org.framework.lazy.cloud.network.heartbeat.client.netty.proxy.socks.handler.NettyClientProxyServerVisitorInboundHandler; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyChannelContext; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.client.AbstractHandleSocksDistributeClientProxyClientConnectionTransferSuccessTypeAdvanced; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.client.AbstractHandleSocksDistributeClientProxyServerConnectionTransferSuccessTypeAdvanced; +import org.framework.lazy.cloud.network.heartbeat.common.decoder.TransferDecoder; +import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils; +import org.framework.lazy.cloud.network.heartbeat.protocol.handler.NettySocks5CommandRequestHandler; + + +@Slf4j +public class ClientHandleDistributeSocksClientProxyClientConnectionTransferSuccessfulAdvanced extends + AbstractHandleSocksDistributeClientProxyClientConnectionTransferSuccessTypeAdvanced { + + + /** + * 处理当前数据 + * + * @param nettyChannelContext 当前通道 + * @param nettyProxyMsg 通道数据 + */ + @Override + protected void doHandler(NettyChannelContext nettyChannelContext, NettyProxyMsg nettyProxyMsg) { + + // 传输通道 + Channel transferChannel = nettyChannelContext.channel(); + + // 根据传输通道获取代理通道 + Channel nextChannel = ChannelAttributeKeyUtils.getNextChannel(transferChannel); + + Byte socks5AddressTypeByte = ChannelAttributeKeyUtils.getSocks5AddressType(nextChannel); + Socks5AddressType socks5AddressType = Socks5AddressType.valueOf(socks5AddressTypeByte); + //添加客户端转发请求到服务端的Handler + // TODO bug fix + nextChannel.pipeline().addLast(new TransferDecoder(Integer.MAX_VALUE, 1024 * 1024*10)); + // 请求数据开始上报 + nextChannel.pipeline().addLast(new NettyClientProxyServerVisitorInboundHandler(transferChannel)); + DefaultSocks5CommandResponse commandResponse = + new DefaultSocks5CommandResponse(Socks5CommandStatus.SUCCESS, socks5AddressType); + nextChannel.writeAndFlush(commandResponse); + nextChannel.pipeline().remove(NettySocks5CommandRequestHandler.class); + nextChannel.pipeline().remove(Socks5CommandRequestDecoder.class); + } +} diff --git a/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/socks/advanced/ClientHandleDistributeSocksClientProxyClientTransferCloseAdvanced.java b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/socks/advanced/ClientHandleDistributeSocksClientProxyClientTransferCloseAdvanced.java new file mode 100644 index 0000000..caecb38 --- /dev/null +++ b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/socks/advanced/ClientHandleDistributeSocksClientProxyClientTransferCloseAdvanced.java @@ -0,0 +1,32 @@ +package org.framework.lazy.cloud.network.heartbeat.client.netty.proxy.socks.advanced; + +import io.netty.channel.Channel; +import lombok.extern.slf4j.Slf4j; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyChannelContext; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.client.AbstractHandleSocksDistributeClientProxyClientTransferCloseTypeAdvanced; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.client.AbstractHandleSocksDistributeClientProxyServerTransferCloseTypeAdvanced; +import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils; + + +@Slf4j +public class ClientHandleDistributeSocksClientProxyClientTransferCloseAdvanced extends + AbstractHandleSocksDistributeClientProxyClientTransferCloseTypeAdvanced { + + + /** + * 处理当前数据 + * + * @param nettyChannelContext 当前通道 + * @param nettyProxyMsg 通道数据 + */ + @Override + protected void doHandler(NettyChannelContext nettyChannelContext, NettyProxyMsg nettyProxyMsg) { + Channel channel = nettyChannelContext.channel(); + // 关闭传输通道 + Channel proxyChannel = ChannelAttributeKeyUtils.getNextChannel(channel); + proxyChannel.close();// 真实通道关闭 + channel.close(); // 数据传输通道关闭 + + } +} diff --git a/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/socks/advanced/ClientHandleDistributeSocksClientProxyClientTransferTransferResponseAdvanced.java b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/socks/advanced/ClientHandleDistributeSocksClientProxyClientTransferTransferResponseAdvanced.java new file mode 100644 index 0000000..a8a7c51 --- /dev/null +++ b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/socks/advanced/ClientHandleDistributeSocksClientProxyClientTransferTransferResponseAdvanced.java @@ -0,0 +1,39 @@ +package org.framework.lazy.cloud.network.heartbeat.client.netty.proxy.socks.advanced; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.Channel; +import lombok.extern.slf4j.Slf4j; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyChannelContext; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.client.AbstractHandleSocksDistributeClientProxyClientTransferResponseTypeAdvanced; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.client.AbstractHandleSocksDistributeClientProxyServerTransferResponseTypeAdvanced; +import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils; +import org.wu.framework.core.utils.ObjectUtils; + + +@Slf4j +public class ClientHandleDistributeSocksClientProxyClientTransferTransferResponseAdvanced extends + AbstractHandleSocksDistributeClientProxyClientTransferResponseTypeAdvanced { + + + /** + * 处理当前数据 + * + * @param nettyChannelContext 当前通道 + * @param nettyProxyMsg 通道数据 + */ + @Override + protected void doHandler(NettyChannelContext nettyChannelContext, NettyProxyMsg nettyProxyMsg) { + // 数据直接下发 + Channel channel = nettyChannelContext.channel(); + Channel nextChannel = ChannelAttributeKeyUtils.getNextChannel(channel); + if(ObjectUtils.isNotEmpty(nextChannel)&&nextChannel.isActive()){ + ByteBuf buf = nextChannel.config().getAllocator().buffer(nettyProxyMsg.getData().length); + buf.writeBytes(nettyProxyMsg.getData()); + nextChannel.writeAndFlush(buf); + }else { + log.error("客户端代理服务端socks,本地通道已关闭!"); + } + + } +} diff --git a/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/socks/advanced/NettySocketProtocolHandleSocketClientProxyClientStartTypeAdvanced.java b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/socks/advanced/NettySocketProtocolHandleSocketClientProxyClientStartTypeAdvanced.java new file mode 100644 index 0000000..3b5c6c4 --- /dev/null +++ b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/socks/advanced/NettySocketProtocolHandleSocketClientProxyClientStartTypeAdvanced.java @@ -0,0 +1,62 @@ +package org.framework.lazy.cloud.network.heartbeat.client.netty.proxy.socks.advanced; + +import io.netty.channel.Channel; +import io.netty.handler.codec.socksx.v5.Socks5AddressType; +import lombok.extern.slf4j.Slf4j; +import org.framework.lazy.cloud.network.heartbeat.client.config.NettyClientProperties; +import org.framework.lazy.cloud.network.heartbeat.client.netty.proxy.socks.NettySocksClientProxyClient; +import org.framework.lazy.cloud.network.heartbeat.client.netty.proxy.socks.socket.NettySocksClientProxyClientSocket; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.HandleChannelTypeAdvanced; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyChannelContext; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettySocketChannelContext; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.client.AbstractHandleSocketClientProxyClientStartTypeAdvanced; +import org.springframework.stereotype.Component; +import org.wu.framework.spring.utils.SpringContextHolder; + +import java.util.ArrayList; +import java.util.List; + + +@Slf4j +@Component +public class NettySocketProtocolHandleSocketClientProxyClientStartTypeAdvanced + extends AbstractHandleSocketClientProxyClientStartTypeAdvanced { + /** + * 处理当前数据 + * + * @param nettyChannelContext 当前通道 + * @param nettyProxyMsg 通道数据 + */ + @Override + protected void doHandler(NettyChannelContext nettyChannelContext, NettyProxyMsg nettyProxyMsg) { + + + NettySocketChannelContext nettySocketChannelContext = (NettySocketChannelContext) nettyChannelContext; + Channel proxyChannel = nettySocketChannelContext.channel(); + String host = nettyProxyMsg.getTargetIpString(); + Integer port = Integer.parseInt(nettyProxyMsg.getTargetPortString()); + Socks5AddressType socks5AddressType = nettySocketChannelContext.getSocks5AddressType(); + + + List handleChannelTypeAdvancedList = new ArrayList<>(SpringContextHolder.getApplicationContext().getBeansOfType(HandleChannelTypeAdvanced.class).values()); + NettyClientProperties nettyClientProperties = SpringContextHolder.getBean(NettyClientProperties.class); + + + NettySocksClientProxyClient nettySocksClientProxyClient = new NettySocksClientProxyClient(); + nettySocksClientProxyClient.setSsl(false); + nettySocksClientProxyClient.setTargetIp(host); + nettySocksClientProxyClient.setTargetPort(Integer.parseInt(String.valueOf(port))); + nettySocksClientProxyClient.setSocks5AddressType(socks5AddressType); + + + nettySocksClientProxyClient.setHandleChannelTypeAdvancedList(handleChannelTypeAdvancedList); + nettySocksClientProxyClient.setNettyClientProperties(nettyClientProperties); + + // 创建连接 + NettySocksClientProxyClientSocket.buildTransferServer(nettySocksClientProxyClient, proxyChannel); + + + + } +} diff --git a/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/socks/advanced/NettySocketProtocolHandleSocketClientProxyServerTypeAdvanced.java b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/socks/advanced/NettySocketProtocolHandleSocketClientProxyServerStartTypeAdvanced.java similarity index 91% rename from wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/socks/advanced/NettySocketProtocolHandleSocketClientProxyServerTypeAdvanced.java rename to wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/socks/advanced/NettySocketProtocolHandleSocketClientProxyServerStartTypeAdvanced.java index 8550f97..893cac7 100644 --- a/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/socks/advanced/NettySocketProtocolHandleSocketClientProxyServerTypeAdvanced.java +++ b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/socks/advanced/NettySocketProtocolHandleSocketClientProxyServerStartTypeAdvanced.java @@ -1,6 +1,5 @@ package org.framework.lazy.cloud.network.heartbeat.client.netty.proxy.socks.advanced; -import io.netty.bootstrap.Bootstrap; import io.netty.channel.*; import io.netty.handler.codec.socksx.v5.Socks5AddressType; import lombok.extern.slf4j.Slf4j; @@ -11,7 +10,7 @@ import org.framework.lazy.cloud.network.heartbeat.common.advanced.HandleChannelT import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyChannelContext; import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg; import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettySocketChannelContext; -import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.client.AbstractHandleSocketClientProxyServerTypeAdvanced; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.client.AbstractHandleSocketClientProxyServerStartTypeAdvanced; import org.framework.lazy.cloud.network.heartbeat.common.constant.ProxyMessageType; import org.springframework.stereotype.Component; import org.wu.framework.spring.utils.SpringContextHolder; @@ -24,8 +23,8 @@ import java.util.List; */ @Slf4j @Component -public class NettySocketProtocolHandleSocketClientProxyServerTypeAdvanced - extends AbstractHandleSocketClientProxyServerTypeAdvanced { +public class NettySocketProtocolHandleSocketClientProxyServerStartTypeAdvanced + extends AbstractHandleSocketClientProxyServerStartTypeAdvanced { /** * 处理当前数据 * diff --git a/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/socks/socket/NettySocksClientProxyClientSocket.java b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/socks/socket/NettySocksClientProxyClientSocket.java new file mode 100644 index 0000000..502fa96 --- /dev/null +++ b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/socks/socket/NettySocksClientProxyClientSocket.java @@ -0,0 +1,99 @@ +package org.framework.lazy.cloud.network.heartbeat.client.netty.proxy.socks.socket; + + +import io.netty.bootstrap.Bootstrap; +import io.netty.channel.*; +import io.netty.channel.socket.nio.NioSocketChannel; +import io.netty.handler.codec.socksx.v5.Socks5AddressType; +import lombok.extern.slf4j.Slf4j; +import org.framework.lazy.cloud.network.heartbeat.client.config.NettyClientProperties; +import org.framework.lazy.cloud.network.heartbeat.client.netty.proxy.socks.NettySocksClientProxyClient; +import org.framework.lazy.cloud.network.heartbeat.client.netty.proxy.socks.NettySocksClientProxyServer; +import org.framework.lazy.cloud.network.heartbeat.client.netty.proxy.socks.filter.NettySocksClientProxyServerTransferFilter; +import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelTypeAdapter; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg; +import org.framework.lazy.cloud.network.heartbeat.common.constant.ProxyMessageType; +import org.framework.lazy.cloud.network.heartbeat.common.factory.EventLoopGroupFactory; +import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils; + +import java.util.concurrent.TimeUnit; + +/** + * 客户端代理服务端 + */ +@Slf4j +public class NettySocksClientProxyClientSocket { + + /** + * 连接服务端通信通道 + */ + public static void buildTransferServer(NettySocksClientProxyClient nettySocksClientProxyClient, Channel visitorChannel) { + + EventLoopGroup eventLoopGroup = EventLoopGroupFactory.createClientWorkGroup(); + Bootstrap bootstrap = new Bootstrap(); + bootstrap.group(eventLoopGroup) + .channel(NioSocketChannel.class) + .option(ChannelOption.SO_KEEPALIVE, true) + // 设置读缓冲区为2M + .option(ChannelOption.SO_RCVBUF, 2048 * 1024) + // 设置写缓冲区为1M + .option(ChannelOption.SO_SNDBUF, 1024 * 1024) + .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 1000 * 60)//连接超时时间设置为 60 秒 + .option(ChannelOption.WRITE_BUFFER_WATER_MARK, new WriteBufferWaterMark(1024 * 1024, 1024 * 1024 * 2)) + .handler(new NettySocksClientProxyServerTransferFilter(new ChannelTypeAdapter(nettySocksClientProxyClient.getHandleChannelTypeAdvancedList()))) + ; + NettyClientProperties nettyClientProperties = nettySocksClientProxyClient.getNettyClientProperties(); + String inetHost = nettyClientProperties.getInetHost(); + int inetPort = nettyClientProperties.getInetPort(); + // local client id + String clientId = nettyClientProperties.getClientId(); + + String targetIp = nettySocksClientProxyClient.getTargetIp(); + Integer targetPort = nettySocksClientProxyClient.getTargetPort(); + Socks5AddressType socks5AddressType = nettySocksClientProxyClient.getSocks5AddressType(); + byte socks5AddressTypeByteValue = socks5AddressType.byteValue(); + + String visitorId = ChannelAttributeKeyUtils.getVisitorId(visitorChannel); + + + + // 客户端链接服务端 + log.info("Client creates a new proxy channel to connect to server IP: {}, connecting to server port: {} with clientId:【{}】 & visitorId:【{}】", + inetHost, inetPort, clientId, visitorId); + ChannelFuture future = bootstrap.connect(inetHost, inetPort); + + // 使用的客户端ID:{} + future.addListener((ChannelFutureListener) futureListener -> { + Channel transferChannel = futureListener.channel(); + if (futureListener.isSuccess()) { + + NettyProxyMsg nettyProxyMsg = new NettyProxyMsg(); + nettyProxyMsg.setType(ProxyMessageType.SOCKS_REPORT_CLIENT_PROXY_SERVER_TRANSFER_CONNECTION_); + // other clientId + nettyProxyMsg.setClientTargetIp(targetIp); + nettyProxyMsg.setClientTargetPort(targetPort); + + nettyProxyMsg.setVisitorId(visitorId); + nettyProxyMsg.setData(new byte[]{socks5AddressTypeByteValue}); + transferChannel.writeAndFlush(nettyProxyMsg); + // 绑定客户端真实通信通道 + ChannelAttributeKeyUtils.buildVisitorId(transferChannel, visitorId); + ChannelAttributeKeyUtils.buildClientId(transferChannel, clientId); + // 传输通道 + ChannelAttributeKeyUtils.buildNextChannel(visitorChannel, transferChannel); + ChannelAttributeKeyUtils.buildNextChannel(transferChannel, visitorChannel); + + + } else { + log.info("无法连接到服务端...."); + eventLoopGroup.schedule(() -> { + try { + buildTransferServer(nettySocksClientProxyClient, visitorChannel); + } catch (Exception e) { + e.printStackTrace(); + } + }, 2, TimeUnit.SECONDS); + } + }); + } +} \ No newline at end of file diff --git a/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/proxy/socks/client/AbstractHandleSocketClientProxyClientStartTypeAdvanced.java b/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/proxy/socks/client/AbstractHandleSocketClientProxyClientStartTypeAdvanced.java new file mode 100644 index 0000000..cdd88fb --- /dev/null +++ b/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/proxy/socks/client/AbstractHandleSocketClientProxyClientStartTypeAdvanced.java @@ -0,0 +1,21 @@ +package org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.client; + +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.advanced.payload.NettyProxyMsg; +import org.framework.lazy.cloud.network.heartbeat.common.enums.ProxyMessageTypeEnums; + +public abstract class AbstractHandleSocketClientProxyClientStartTypeAdvanced extends AbstractHandleChannelTypeAdvanced implements HandleChannelTypeAdvanced { + + + /** + * 是否支持当前类型 + * + * @param nettyProxyMsg 通道数据 + * @return 布尔类型 是、否 + */ + @Override + protected boolean doSupport(NettyProxyMsg nettyProxyMsg) { + return ProxyMessageTypeEnums.SOCKET_CLIENT_PROXY_CLIENT_.getTypeByte() == nettyProxyMsg.getType(); + } +} diff --git a/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/proxy/socks/client/AbstractHandleSocketClientProxyServerTypeAdvanced.java b/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/proxy/socks/client/AbstractHandleSocketClientProxyServerStartTypeAdvanced.java similarity index 81% rename from wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/proxy/socks/client/AbstractHandleSocketClientProxyServerTypeAdvanced.java rename to wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/proxy/socks/client/AbstractHandleSocketClientProxyServerStartTypeAdvanced.java index 88bd194..dc70a01 100644 --- a/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/proxy/socks/client/AbstractHandleSocketClientProxyServerTypeAdvanced.java +++ b/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/proxy/socks/client/AbstractHandleSocketClientProxyServerStartTypeAdvanced.java @@ -5,7 +5,7 @@ import org.framework.lazy.cloud.network.heartbeat.common.advanced.HandleChannelT import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg; import org.framework.lazy.cloud.network.heartbeat.common.enums.ProxyMessageTypeEnums; -public abstract class AbstractHandleSocketClientProxyServerTypeAdvanced extends AbstractHandleChannelTypeAdvanced implements HandleChannelTypeAdvanced { +public abstract class AbstractHandleSocketClientProxyServerStartTypeAdvanced extends AbstractHandleChannelTypeAdvanced implements HandleChannelTypeAdvanced { /** diff --git a/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/proxy/socks/client/AbstractHandleSocksDistributeClientProxyClientConnectionTransferFailTypeAdvanced.java b/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/proxy/socks/client/AbstractHandleSocksDistributeClientProxyClientConnectionTransferFailTypeAdvanced.java new file mode 100644 index 0000000..810b200 --- /dev/null +++ b/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/proxy/socks/client/AbstractHandleSocksDistributeClientProxyClientConnectionTransferFailTypeAdvanced.java @@ -0,0 +1,21 @@ +package org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.client; + +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.advanced.payload.NettyProxyMsg; +import org.framework.lazy.cloud.network.heartbeat.common.enums.ProxyMessageTypeEnums; + +public abstract class AbstractHandleSocksDistributeClientProxyClientConnectionTransferFailTypeAdvanced extends AbstractHandleChannelTypeAdvanced implements HandleChannelTypeAdvanced { + + + /** + * 是否支持当前类型 + * + * @param nettyProxyMsg 通道数据 + * @return 布尔类型 是、否 + */ + @Override + protected boolean doSupport(NettyProxyMsg nettyProxyMsg) { + return ProxyMessageTypeEnums.SOCKS_DISTRIBUTE_CLIENT_PROXY_CLIENT_TRANSFER_CONNECTION_FAIL_.getTypeByte() == nettyProxyMsg.getType(); + } +} diff --git a/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/proxy/socks/client/AbstractHandleSocksDistributeClientProxyClientConnectionTransferSuccessTypeAdvanced.java b/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/proxy/socks/client/AbstractHandleSocksDistributeClientProxyClientConnectionTransferSuccessTypeAdvanced.java new file mode 100644 index 0000000..9bd423f --- /dev/null +++ b/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/proxy/socks/client/AbstractHandleSocksDistributeClientProxyClientConnectionTransferSuccessTypeAdvanced.java @@ -0,0 +1,21 @@ +package org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.client; + +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.advanced.payload.NettyProxyMsg; +import org.framework.lazy.cloud.network.heartbeat.common.enums.ProxyMessageTypeEnums; + +public abstract class AbstractHandleSocksDistributeClientProxyClientConnectionTransferSuccessTypeAdvanced extends AbstractHandleChannelTypeAdvanced implements HandleChannelTypeAdvanced { + + + /** + * 是否支持当前类型 + * + * @param nettyProxyMsg 通道数据 + * @return 布尔类型 是、否 + */ + @Override + protected boolean doSupport(NettyProxyMsg nettyProxyMsg) { + return ProxyMessageTypeEnums.SOCKS_DISTRIBUTE_CLIENT_PROXY_CLIENT_TRANSFER_CONNECTION_SUCCESS_.getTypeByte() == nettyProxyMsg.getType(); + } +} diff --git a/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/proxy/socks/client/AbstractHandleSocksDistributeClientProxyClientTransferCloseTypeAdvanced.java b/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/proxy/socks/client/AbstractHandleSocksDistributeClientProxyClientTransferCloseTypeAdvanced.java new file mode 100644 index 0000000..05d0d18 --- /dev/null +++ b/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/proxy/socks/client/AbstractHandleSocksDistributeClientProxyClientTransferCloseTypeAdvanced.java @@ -0,0 +1,21 @@ +package org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.client; + +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.advanced.payload.NettyProxyMsg; +import org.framework.lazy.cloud.network.heartbeat.common.enums.ProxyMessageTypeEnums; + +public abstract class AbstractHandleSocksDistributeClientProxyClientTransferCloseTypeAdvanced extends AbstractHandleChannelTypeAdvanced implements HandleChannelTypeAdvanced { + + + /** + * 是否支持当前类型 + * + * @param nettyProxyMsg 通道数据 + * @return 布尔类型 是、否 + */ + @Override + protected boolean doSupport(NettyProxyMsg nettyProxyMsg) { + return ProxyMessageTypeEnums.SOCKS_DISTRIBUTE_CLIENT_PROXY_CLIENT_TRANSFER_CLOSE_.getTypeByte() == nettyProxyMsg.getType(); + } +} diff --git a/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/proxy/socks/client/AbstractHandleSocksDistributeClientProxyClientTransferResponseTypeAdvanced.java b/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/proxy/socks/client/AbstractHandleSocksDistributeClientProxyClientTransferResponseTypeAdvanced.java new file mode 100644 index 0000000..359765c --- /dev/null +++ b/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/proxy/socks/client/AbstractHandleSocksDistributeClientProxyClientTransferResponseTypeAdvanced.java @@ -0,0 +1,21 @@ +package org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.client; + +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.advanced.payload.NettyProxyMsg; +import org.framework.lazy.cloud.network.heartbeat.common.enums.ProxyMessageTypeEnums; + +public abstract class AbstractHandleSocksDistributeClientProxyClientTransferResponseTypeAdvanced extends AbstractHandleChannelTypeAdvanced implements HandleChannelTypeAdvanced { + + + /** + * 是否支持当前类型 + * + * @param nettyProxyMsg 通道数据 + * @return 布尔类型 是、否 + */ + @Override + protected boolean doSupport(NettyProxyMsg nettyProxyMsg) { + return ProxyMessageTypeEnums.SOCKS_DISTRIBUTE_CLIENT_PROXY_CLIENT_TRANSFER_RESPONSE_.getTypeByte() == nettyProxyMsg.getType(); + } +} \ No newline at end of file diff --git a/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/proxy/socks/server/AbstractHandleSocksReportClientProxyClientConnectionTransferTypeAdvanced.java b/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/proxy/socks/server/AbstractHandleSocksReportClientProxyClientConnectionTransferTypeAdvanced.java new file mode 100644 index 0000000..c85220d --- /dev/null +++ b/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/proxy/socks/server/AbstractHandleSocksReportClientProxyClientConnectionTransferTypeAdvanced.java @@ -0,0 +1,21 @@ +package org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.server; + +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.advanced.payload.NettyProxyMsg; +import org.framework.lazy.cloud.network.heartbeat.common.enums.ProxyMessageTypeEnums; + +public abstract class AbstractHandleSocksReportClientProxyClientConnectionTransferTypeAdvanced extends AbstractHandleChannelTypeAdvanced implements HandleChannelTypeAdvanced { + + + /** + * 是否支持当前类型 + * + * @param nettyProxyMsg 通道数据 + * @return 布尔类型 是、否 + */ + @Override + protected boolean doSupport(NettyProxyMsg nettyProxyMsg) { + return ProxyMessageTypeEnums.SOCKS_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_CONNECTION_.getTypeByte() == nettyProxyMsg.getType(); + } +} \ No newline at end of file diff --git a/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/proxy/socks/server/AbstractHandleSocksReportClientProxyClientTransferCloseTypeAdvanced.java b/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/proxy/socks/server/AbstractHandleSocksReportClientProxyClientTransferCloseTypeAdvanced.java new file mode 100644 index 0000000..f6bbd0a --- /dev/null +++ b/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/proxy/socks/server/AbstractHandleSocksReportClientProxyClientTransferCloseTypeAdvanced.java @@ -0,0 +1,21 @@ +package org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.server; + +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.advanced.payload.NettyProxyMsg; +import org.framework.lazy.cloud.network.heartbeat.common.enums.ProxyMessageTypeEnums; + +public abstract class AbstractHandleSocksReportClientProxyClientTransferCloseTypeAdvanced extends AbstractHandleChannelTypeAdvanced implements HandleChannelTypeAdvanced { + + + /** + * 是否支持当前类型 + * + * @param nettyProxyMsg 通道数据 + * @return 布尔类型 是、否 + */ + @Override + protected boolean doSupport(NettyProxyMsg nettyProxyMsg) { + return ProxyMessageTypeEnums.SOCKS_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_CLOSE_.getTypeByte() == nettyProxyMsg.getType(); + } +} \ No newline at end of file diff --git a/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/proxy/socks/server/AbstractHandleSocksReportClientProxyClientTransferRequestTypeAdvanced.java b/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/proxy/socks/server/AbstractHandleSocksReportClientProxyClientTransferRequestTypeAdvanced.java new file mode 100644 index 0000000..f0c3d86 --- /dev/null +++ b/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/proxy/socks/server/AbstractHandleSocksReportClientProxyClientTransferRequestTypeAdvanced.java @@ -0,0 +1,21 @@ +package org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.server; + +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.advanced.payload.NettyProxyMsg; +import org.framework.lazy.cloud.network.heartbeat.common.enums.ProxyMessageTypeEnums; + +public abstract class AbstractHandleSocksReportClientProxyClientTransferRequestTypeAdvanced extends AbstractHandleChannelTypeAdvanced implements HandleChannelTypeAdvanced { + + + /** + * 是否支持当前类型 + * + * @param nettyProxyMsg 通道数据 + * @return 布尔类型 是、否 + */ + @Override + protected boolean doSupport(NettyProxyMsg nettyProxyMsg) { + return ProxyMessageTypeEnums.SOCKS_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_REQUEST_.getTypeByte() == nettyProxyMsg.getType(); + } +} \ No newline at end of file diff --git a/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/constant/ProxyMessageType.java b/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/constant/ProxyMessageType.java index c9f2c7f..c27c4db 100644 --- a/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/constant/ProxyMessageType.java +++ b/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/constant/ProxyMessageType.java @@ -6,13 +6,8 @@ import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.http.Abs import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.http.client.*; import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.http.server.*; import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.AbstractHandleSocketLocalProxyTypeAdvanced; -import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.client.AbstractHandleSocketClientProxyServerTypeAdvanced; -import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.client.AbstractHandleSocksDistributeClientProxyServerConnectionTransferSuccessTypeAdvanced; -import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.client.AbstractHandleSocksDistributeClientProxyServerTransferResponseTypeAdvanced; -import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.client.AbstractHandleSocksDistributeClientProxyServerTransferCloseTypeAdvanced; -import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.server.AbstractHandleSocksReportClientProxyServerConnectionTransferTypeAdvanced; -import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.server.AbstractHandleSocksReportClientProxyServerTransferRequestTypeAdvanced; -import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.server.AbstractHandleSocksReportClientProxyServerTransferCloseTypeAdvanced; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.client.*; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.server.*; import org.framework.lazy.cloud.network.heartbeat.common.enums.ProxyMessageTypeEnums; /** @@ -142,20 +137,14 @@ public class ProxyMessageType { public static final byte SOCKET_LOCAL_PROXY = HTTP_REPORT_SERVER_PROXY_CLIENT_TRANSFER_CLOSE_ + 1; - /** - * socket 客户端代理客户端 - * - * @see ProxyMessageTypeEnums#SOCKET_CLIENT_PROXY_CLIENT_ - * @see AbstractHandleSocketClientProxyClietnTypeAdvanced - */ - public static final byte SOCKET_CLIENT_PROXY_CLIENT_ = SOCKET_LOCAL_PROXY + 1; + /** * socket 客户端代理服务端 * * @see ProxyMessageTypeEnums#SOCKET_CLIENT_PROXY_SERVER_ - * @see AbstractHandleSocketClientProxyServerTypeAdvanced + * @see AbstractHandleSocketClientProxyServerStartTypeAdvanced */ - public static final byte SOCKET_CLIENT_PROXY_SERVER_ = SOCKET_CLIENT_PROXY_CLIENT_ + 1; + public static final byte SOCKET_CLIENT_PROXY_SERVER_ = SOCKET_LOCAL_PROXY + 1; /** @@ -217,6 +206,74 @@ public class ProxyMessageType { */ public static final byte SOCKS_DISTRIBUTE_CLIENT_PROXY_SERVER_TRANSFER_CLOSE_ = SOCKS_REPORT_CLIENT_PROXY_SERVER_TRANSFER_CLOSE_ + 1; + /** + * socket 客户端代理客户端 + * + * @see ProxyMessageTypeEnums#SOCKET_CLIENT_PROXY_CLIENT_ + * @see AbstractHandleSocketClientProxyClientStartTypeAdvanced + */ + public static final byte SOCKET_CLIENT_PROXY_CLIENT_ = SOCKS_DISTRIBUTE_CLIENT_PROXY_SERVER_TRANSFER_CLOSE_ + 1; + + + /** + * socket 上报客户端代理客户端传输通道连接成功 + * + * @see ProxyMessageTypeEnums#SOCKS_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_CONNECTION_ + * @see AbstractHandleSocksReportClientProxyClientConnectionTransferTypeAdvanced + */ + public static final byte SOCKS_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_CONNECTION_ = SOCKET_CLIENT_PROXY_CLIENT_ + 1; + + /** + * socket 下发客户端代理客户端传输通道连接成功 + * + * @see ProxyMessageTypeEnums#SOCKS_DISTRIBUTE_CLIENT_PROXY_CLIENT_TRANSFER_CONNECTION_SUCCESS_ + * @see AbstractHandleSocksDistributeClientProxyClientConnectionTransferSuccessTypeAdvanced + */ + public static final byte SOCKS_DISTRIBUTE_CLIENT_PROXY_CLIENT_TRANSFER_CONNECTION_SUCCESS_ = SOCKS_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_CONNECTION_ + 1; + + + /** + * socket 下发客户端代理客户端传输通道连接失败 + * + * @see ProxyMessageTypeEnums#SOCKS_DISTRIBUTE_CLIENT_PROXY_CLIENT_TRANSFER_CONNECTION_FAIL_ + * @see AbstractHandleSocksDistributeClientProxyClientConnectionTransferSuccessTypeAdvanced + */ + public static final byte SOCKS_DISTRIBUTE_CLIENT_PROXY_CLIENT_TRANSFER_CONNECTION_FAIL_ = SOCKS_DISTRIBUTE_CLIENT_PROXY_CLIENT_TRANSFER_CONNECTION_SUCCESS_ + 1; + + + /** + * socket 上报客户端代理客户端请求 + * + * @see ProxyMessageTypeEnums#SOCKS_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_REQUEST_ + * @see AbstractHandleSocksReportClientProxyClientTransferRequestTypeAdvanced + */ + public static final byte SOCKS_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_REQUEST_ = SOCKS_DISTRIBUTE_CLIENT_PROXY_CLIENT_TRANSFER_CONNECTION_FAIL_ + 1; + + + /** + * socket 下发客户端代理客户端数据返回 + * + * @see ProxyMessageTypeEnums#SOCKS_DISTRIBUTE_CLIENT_PROXY_CLIENT_TRANSFER_RESPONSE_ + * @see AbstractHandleSocksDistributeClientProxyClientTransferResponseTypeAdvanced + */ + public static final byte SOCKS_DISTRIBUTE_CLIENT_PROXY_CLIENT_TRANSFER_RESPONSE_ = SOCKS_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_REQUEST_ + 1; + + /** + * socket 上报客户端代理客户端传输通道关闭 + * + * @see ProxyMessageTypeEnums#SOCKS_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_CLOSE_ + * @see AbstractHandleSocksReportClientProxyClientTransferCloseTypeAdvanced + */ + public static final byte SOCKS_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_CLOSE_ = SOCKS_DISTRIBUTE_CLIENT_PROXY_CLIENT_TRANSFER_RESPONSE_ + 1; + + /** + * socket 下发客户端代理客户端传输通道关闭 + * + * @see ProxyMessageTypeEnums#SOCKS_DISTRIBUTE_CLIENT_PROXY_CLIENT_TRANSFER_CLOSE_ + * @see AbstractHandleSocksDistributeClientProxyClientTransferCloseTypeAdvanced + */ + public static final byte SOCKS_DISTRIBUTE_CLIENT_PROXY_CLIENT_TRANSFER_CLOSE_ = SOCKS_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_CLOSE_ + 1; + /** * socket 服务端代理客户端 @@ -224,7 +281,7 @@ public class ProxyMessageType { * @see ProxyMessageTypeEnums#SOCKET_SERVER_PROXY_CLIENT_ * @see AbstractHandleSocketServerProxyClientTypeAdvanced */ - public static final byte SOCKET_SERVER_PROXY_CLIENT_ = SOCKS_DISTRIBUTE_CLIENT_PROXY_SERVER_TRANSFER_CLOSE_ + 1; + public static final byte SOCKET_SERVER_PROXY_CLIENT_ = SOCKS_DISTRIBUTE_CLIENT_PROXY_CLIENT_TRANSFER_CLOSE_ + 1; public static final byte HTTP_DISTRIBUTE_PROXY = -96; diff --git a/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/enums/ProxyMessageTypeEnums.java b/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/enums/ProxyMessageTypeEnums.java index 2a55483..455a206 100644 --- a/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/enums/ProxyMessageTypeEnums.java +++ b/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/enums/ProxyMessageTypeEnums.java @@ -9,9 +9,7 @@ import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.http.cli import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.http.server.*; import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.AbstractHandleSocketLocalProxyTypeAdvanced; import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.client.*; -import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.server.AbstractHandleSocksReportClientProxyServerConnectionTransferTypeAdvanced; -import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.server.AbstractHandleSocksReportClientProxyServerTransferRequestTypeAdvanced; -import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.server.AbstractHandleSocksReportClientProxyServerTransferCloseTypeAdvanced; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.server.*; import org.framework.lazy.cloud.network.heartbeat.common.constant.ProxyMessageType; import org.framework.lazy.cloud.network.heartbeat.common.constant.TcpMessageType; @@ -161,14 +159,14 @@ public enum ProxyMessageTypeEnums { * socket 客户端代理客户端 * * @see ProxyMessageTypeEnums#SOCKET_CLIENT_PROXY_CLIENT_ - * @see AbstractHandleSocketClientProxyClietnTypeAdvanced + * @see AbstractHandleSocketClientProxyClientStartTypeAdvanced */ SOCKET_CLIENT_PROXY_CLIENT_(ProxyMessageType.SOCKET_CLIENT_PROXY_CLIENT_, "socket 客户端代理客户端"), /** * socket 客户端代理服务端 * * @see ProxyMessageTypeEnums#SOCKET_CLIENT_PROXY_SERVER_ - * @see AbstractHandleSocketClientProxyServerTypeAdvanced + * @see AbstractHandleSocketClientProxyServerStartTypeAdvanced */ SOCKET_CLIENT_PROXY_SERVER_(ProxyMessageType.SOCKET_CLIENT_PROXY_SERVER_, "socket 客户端代理服务端"), @@ -223,6 +221,57 @@ public enum ProxyMessageTypeEnums { * @see AbstractHandleSocksDistributeClientProxyServerTransferCloseTypeAdvanced */ SOCKS_DISTRIBUTE_CLIENT_PROXY_SERVER_TRANSFER_CLOSE_(ProxyMessageType.SOCKS_DISTRIBUTE_CLIENT_PROXY_SERVER_TRANSFER_CLOSE_, "socket 下发客户端代理服务端传输通道关闭"), + /** + * socket 上报客户端代理客户端传输通道连接成功 + * + * @see ProxyMessageTypeEnums#SOCKS_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_CONNECTION_ + * @see AbstractHandleSocksReportClientProxyClientConnectionTransferTypeAdvanced + */ + SOCKS_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_CONNECTION_(ProxyMessageType.SOCKS_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_CONNECTION_, "socket 上报客户端代理客户端传输通道连接成功"), + + /** + * socket 下发客户端代理客户端传输通道连接成功 + * + * @see ProxyMessageTypeEnums#SOCKS_DISTRIBUTE_CLIENT_PROXY_CLIENT_TRANSFER_CONNECTION_SUCCESS_ + * @see AbstractHandleSocksDistributeClientProxyClientConnectionTransferSuccessTypeAdvanced + */ + SOCKS_DISTRIBUTE_CLIENT_PROXY_CLIENT_TRANSFER_CONNECTION_SUCCESS_(ProxyMessageType.SOCKS_DISTRIBUTE_CLIENT_PROXY_CLIENT_TRANSFER_CONNECTION_SUCCESS_, "socket 下发客户端代理客户端传输通道连接成功"), + /** + * socket 下发客户端代理客户端传输通道连接失败 + * + * @see ProxyMessageTypeEnums#SOCKS_DISTRIBUTE_CLIENT_PROXY_CLIENT_TRANSFER_CONNECTION_FAIL_ + * @see AbstractHandleSocksDistributeClientProxyClientConnectionTransferSuccessTypeAdvanced + */ + SOCKS_DISTRIBUTE_CLIENT_PROXY_CLIENT_TRANSFER_CONNECTION_FAIL_(ProxyMessageType.SOCKS_DISTRIBUTE_CLIENT_PROXY_CLIENT_TRANSFER_CONNECTION_FAIL_, "socket 下发客户端代理客户端传输通道连接失败"), + + /** + * socket 上报客户端代理客户端请求 + * + * @see ProxyMessageTypeEnums#SOCKS_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_REQUEST_ + * @see AbstractHandleSocksReportClientProxyClientTransferRequestTypeAdvanced + */ + SOCKS_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_REQUEST_(ProxyMessageType.SOCKS_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_REQUEST_, "socket 上报客户端代理客户端请求"), + /** + * socket 下发客户端代理客户端数据返回 + * + * @see ProxyMessageTypeEnums#SOCKS_DISTRIBUTE_CLIENT_PROXY_CLIENT_TRANSFER_RESPONSE_ + * @see AbstractHandleSocksDistributeClientProxyClientTransferResponseTypeAdvanced + */ + SOCKS_DISTRIBUTE_CLIENT_PROXY_CLIENT_TRANSFER_RESPONSE_(ProxyMessageType.SOCKS_DISTRIBUTE_CLIENT_PROXY_CLIENT_TRANSFER_RESPONSE_, "socket 下发客户端代理客户端数据返回"), + /** + * socket 上报客户端代理客户端传输通道关闭 + * + * @see ProxyMessageTypeEnums#SOCKS_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_CLOSE_ + * @see AbstractHandleSocksReportClientProxyClientTransferCloseTypeAdvanced + */ + SOCKS_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_CLOSE_(ProxyMessageType.SOCKS_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_CLOSE_, "socket 上报客户端代理客户端传输通道关闭"), + /** + * socket 下发客户端代理客户端传输通道关闭 + * + * @see ProxyMessageTypeEnums#SOCKS_DISTRIBUTE_CLIENT_PROXY_CLIENT_TRANSFER_CLOSE_ + * @see AbstractHandleSocksDistributeClientProxyClientTransferCloseTypeAdvanced + */ + SOCKS_DISTRIBUTE_CLIENT_PROXY_CLIENT_TRANSFER_CLOSE_(ProxyMessageType.SOCKS_DISTRIBUTE_CLIENT_PROXY_CLIENT_TRANSFER_CLOSE_, "socket 下发客户端代理客户端传输通道关闭"), /** diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/proxy/socks/advanced/ServerHandleSocksReportClientProxyClientConnectTransferTypeAdvanced.java b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/proxy/socks/advanced/ServerHandleSocksReportClientProxyClientConnectTransferTypeAdvanced.java new file mode 100644 index 0000000..50536f7 --- /dev/null +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/proxy/socks/advanced/ServerHandleSocksReportClientProxyClientConnectTransferTypeAdvanced.java @@ -0,0 +1,102 @@ +package org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.socks.advanced; + + +import io.netty.bootstrap.Bootstrap; +import io.netty.channel.*; +import io.netty.channel.socket.SocketChannel; +import io.netty.channel.socket.nio.NioSocketChannel; +import io.netty.handler.codec.socksx.v5.DefaultSocks5CommandResponse; +import io.netty.handler.codec.socksx.v5.Socks5AddressType; +import io.netty.handler.codec.socksx.v5.Socks5CommandStatus; +import lombok.extern.slf4j.Slf4j; +import org.framework.lazy.cloud.network.heartbeat.common.NettyTransferChannelContext; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyChannelContext; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.server.AbstractHandleSocksReportClientProxyClientConnectionTransferTypeAdvanced; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.server.AbstractHandleSocksReportClientProxyServerConnectionTransferTypeAdvanced; +import org.framework.lazy.cloud.network.heartbeat.common.constant.ProxyMessageType; +import org.framework.lazy.cloud.network.heartbeat.common.decoder.TransferDecoder; +import org.framework.lazy.cloud.network.heartbeat.common.factory.EventLoopGroupFactory; +import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils; +import org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.socks.handler.NettySocksClientProxyServerRealHandler; +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.context.annotation.Role; +import org.springframework.stereotype.Component; + +import java.net.InetSocketAddress; + + +@Role(BeanDefinition.ROLE_INFRASTRUCTURE) +@Slf4j +@Component +public class ServerHandleSocksReportClientProxyClientConnectTransferTypeAdvanced + extends AbstractHandleSocksReportClientProxyClientConnectionTransferTypeAdvanced { + + + /** + * 处理当前数据 + * + * @param nettyChannelContext 当前通道 + * @param nettyProxyMsg 通道数据 + */ + @Override + public void doHandler(NettyChannelContext nettyChannelContext, NettyProxyMsg nettyProxyMsg) { + Channel transferChannel = nettyChannelContext.channel(); + + + String host = nettyProxyMsg.getTargetIpString(); + Integer port = Integer.parseInt(nettyProxyMsg.getTargetPortString()); + byte[] data = nettyProxyMsg.getData(); + byte[] visitorId = nettyProxyMsg.getVisitorId(); + byte[] clientId = nettyProxyMsg.getClientId(); + String msgVisitorId = new String(visitorId); + ChannelAttributeKeyUtils.buildClientId(transferChannel, clientId); + ChannelAttributeKeyUtils.buildVisitorId(transferChannel, msgVisitorId); + + NettyTransferChannelContext.pushVisitor(transferChannel, msgVisitorId); + Socks5AddressType socks5AddressType = Socks5AddressType.valueOf(data[0]); + + // 创建真实代理链接 + EventLoopGroup group = EventLoopGroupFactory.createClientWorkGroup(); + Bootstrap b = new Bootstrap(); + b.group(group) + .channel(NioSocketChannel.class) + .option(ChannelOption.TCP_NODELAY, true) + .handler(new ChannelInitializer() { + @Override + protected void initChannel(SocketChannel ch) { + ch.pipeline().addLast(new TransferDecoder(Integer.MAX_VALUE, 1024 * 1024 * 10)); + ch.pipeline().addLast(new NettySocksClientProxyServerRealHandler()); + } + }); + log.info("准备连接目标服务器,ip = {},port = {}", host, port); + ChannelFuture f = b.connect(new InetSocketAddress(host, port)); + f.addListener((ChannelFutureListener) future -> { + Channel realChannel = future.channel(); + if (future.isSuccess()) { + + log.info("目标服务器连接成功"); + // 通道相互绑定 + ChannelAttributeKeyUtils.buildNextChannel(transferChannel, realChannel); + ChannelAttributeKeyUtils.buildNextChannel(realChannel, transferChannel); + + // 传输通道连接成功下发 + NettyProxyMsg transferNettyProxyMsg = new NettyProxyMsg(); + + transferNettyProxyMsg.setType(ProxyMessageType.SOCKS_DISTRIBUTE_CLIENT_PROXY_SERVER_TRANSFER_CONNECTION_SUCCESS_); + transferChannel.writeAndFlush(transferNettyProxyMsg); + + } else { + log.error("连接目标服务器失败,address={},port={}", host, port); + DefaultSocks5CommandResponse commandResponse = new DefaultSocks5CommandResponse(Socks5CommandStatus.FAILURE, socks5AddressType); + transferChannel.writeAndFlush(commandResponse); + realChannel.close(); + } + + }); + + // TODO 下发 连接真实服务成功、客户端可以采集数据了 + + } + +} diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/proxy/socks/advanced/ServerHandleSocksReportClientProxyClientTransferCloseTypeAdvanced.java b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/proxy/socks/advanced/ServerHandleSocksReportClientProxyClientTransferCloseTypeAdvanced.java new file mode 100644 index 0000000..b4390e4 --- /dev/null +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/proxy/socks/advanced/ServerHandleSocksReportClientProxyClientTransferCloseTypeAdvanced.java @@ -0,0 +1,40 @@ +package org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.socks.advanced; + + +import io.netty.channel.Channel; +import lombok.extern.slf4j.Slf4j; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyChannelContext; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.server.AbstractHandleSocksReportClientProxyClientTransferCloseTypeAdvanced; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.server.AbstractHandleSocksReportClientProxyServerTransferCloseTypeAdvanced; +import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils; +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.context.annotation.Role; +import org.springframework.stereotype.Component; + + +@Role(BeanDefinition.ROLE_INFRASTRUCTURE) +@Slf4j +@Component +public class ServerHandleSocksReportClientProxyClientTransferCloseTypeAdvanced + extends AbstractHandleSocksReportClientProxyClientTransferCloseTypeAdvanced { + + + /** + * 处理当前数据 + * + * @param nettyChannelContext 当前通道 + * @param nettyProxyMsg 通道数据 + */ + @Override + public void doHandler(NettyChannelContext nettyChannelContext, NettyProxyMsg nettyProxyMsg) { + Channel channel = nettyChannelContext.channel(); + // 关闭传输通道 + Channel realChannel = ChannelAttributeKeyUtils.getNextChannel(channel); + realChannel.close();// 真实通道关闭 + channel.close(); // 数据传输通道关闭 + + + } + +} diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/proxy/socks/advanced/ServerHandleSocksReportClientProxyClientTransferRequestTypeAdvanced.java b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/proxy/socks/advanced/ServerHandleSocksReportClientProxyClientTransferRequestTypeAdvanced.java new file mode 100644 index 0000000..da11782 --- /dev/null +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/proxy/socks/advanced/ServerHandleSocksReportClientProxyClientTransferRequestTypeAdvanced.java @@ -0,0 +1,49 @@ +package org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.socks.advanced; + + +import io.netty.buffer.ByteBuf; +import io.netty.channel.Channel; +import lombok.extern.slf4j.Slf4j; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyChannelContext; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.server.AbstractHandleSocksReportClientProxyClientTransferRequestTypeAdvanced; +import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.server.AbstractHandleSocksReportClientProxyServerTransferRequestTypeAdvanced; +import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils; +import org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.socks.handler.NettySocksClientProxyServerRealHandler; +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.context.annotation.Role; +import org.springframework.stereotype.Component; +import org.wu.framework.core.utils.ObjectUtils; + + +@Role(BeanDefinition.ROLE_INFRASTRUCTURE) +@Slf4j +@Component +public class ServerHandleSocksReportClientProxyClientTransferRequestTypeAdvanced + extends AbstractHandleSocksReportClientProxyClientTransferRequestTypeAdvanced { + + + /** + * 处理当前数据 + * + * @param nettyChannelContext 当前通道 + * @param nettyProxyMsg 通道数据 + * @see NettySocksClientProxyServerRealHandler + */ + @Override + public void doHandler(NettyChannelContext nettyChannelContext, NettyProxyMsg nettyProxyMsg) { + Channel transferChannel = nettyChannelContext.channel(); + // 目标通道 + Channel nextChannel = ChannelAttributeKeyUtils.getNextChannel(transferChannel); + // 目标数据发送 + if (ObjectUtils.isNotEmpty(nextChannel) && nextChannel.isActive()) { + ByteBuf buf = nextChannel.config().getAllocator().buffer(nettyProxyMsg.getData().length); + buf.writeBytes(nettyProxyMsg.getData()); + nextChannel.writeAndFlush(buf); + } else { + log.error("当前目标通道已经关闭或者不存在"); + } + + } + +}