mirror of
https://gitee.com/wujiawei1207537021/wu-lazy-cloud-network.git
synced 2025-06-06 13:27:55 +08:00
【fix】新增本地socks代理服务端
This commit is contained in:
parent
24fe9e4bc9
commit
7af14b4251
@ -388,8 +388,8 @@ public class ClientAutoConfiguration {
|
|||||||
@Configuration
|
@Configuration
|
||||||
static class SocksProxyConfiguration {
|
static class SocksProxyConfiguration {
|
||||||
@Bean
|
@Bean
|
||||||
public NettySocketProtocolHandleSocketClientProxyServerTypeAdvanced nettySocketProtocolHandleSocketClientProxyServerTypeAdvanced() {
|
public NettySocketProtocolHandleSocketClientProxyServerStartTypeAdvanced nettySocketProtocolHandleSocketClientProxyServerTypeAdvanced() {
|
||||||
return new NettySocketProtocolHandleSocketClientProxyServerTypeAdvanced();
|
return new NettySocketProtocolHandleSocketClientProxyServerStartTypeAdvanced();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
|
@ -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<HandleChannelTypeAdvanced> handleChannelTypeAdvancedList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否是ssl
|
||||||
|
*/
|
||||||
|
private boolean isSsl;
|
||||||
|
/**
|
||||||
|
* 地址类型
|
||||||
|
*/
|
||||||
|
private Socks5AddressType socks5AddressType;
|
||||||
|
|
||||||
|
}
|
@ -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<NettyProxyMsg> {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理当前数据
|
||||||
|
*
|
||||||
|
* @param nettyChannelContext 当前通道
|
||||||
|
* @param nettyProxyMsg 通道数据
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected void doHandler(NettyChannelContext nettyChannelContext, NettyProxyMsg nettyProxyMsg) {
|
||||||
|
|
||||||
|
// 传输通道关闭
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -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<NettyProxyMsg> {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理当前数据
|
||||||
|
*
|
||||||
|
* @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);
|
||||||
|
}
|
||||||
|
}
|
@ -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<NettyProxyMsg> {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理当前数据
|
||||||
|
*
|
||||||
|
* @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(); // 数据传输通道关闭
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -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<NettyProxyMsg> {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理当前数据
|
||||||
|
*
|
||||||
|
* @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,本地通道已关闭!");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -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<NettyProxyMsg> {
|
||||||
|
/**
|
||||||
|
* 处理当前数据
|
||||||
|
*
|
||||||
|
* @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<HandleChannelTypeAdvanced> 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);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -1,6 +1,5 @@
|
|||||||
package org.framework.lazy.cloud.network.heartbeat.client.netty.proxy.socks.advanced;
|
package org.framework.lazy.cloud.network.heartbeat.client.netty.proxy.socks.advanced;
|
||||||
|
|
||||||
import io.netty.bootstrap.Bootstrap;
|
|
||||||
import io.netty.channel.*;
|
import io.netty.channel.*;
|
||||||
import io.netty.handler.codec.socksx.v5.Socks5AddressType;
|
import io.netty.handler.codec.socksx.v5.Socks5AddressType;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
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.NettyChannelContext;
|
||||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg;
|
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.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.framework.lazy.cloud.network.heartbeat.common.constant.ProxyMessageType;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import org.wu.framework.spring.utils.SpringContextHolder;
|
import org.wu.framework.spring.utils.SpringContextHolder;
|
||||||
@ -24,8 +23,8 @@ import java.util.List;
|
|||||||
*/
|
*/
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Component
|
@Component
|
||||||
public class NettySocketProtocolHandleSocketClientProxyServerTypeAdvanced
|
public class NettySocketProtocolHandleSocketClientProxyServerStartTypeAdvanced
|
||||||
extends AbstractHandleSocketClientProxyServerTypeAdvanced<NettyProxyMsg> {
|
extends AbstractHandleSocketClientProxyServerStartTypeAdvanced<NettyProxyMsg> {
|
||||||
/**
|
/**
|
||||||
* 处理当前数据
|
* 处理当前数据
|
||||||
*
|
*
|
@ -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);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
@ -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<MSG> extends AbstractHandleChannelTypeAdvanced<NettyProxyMsg> implements HandleChannelTypeAdvanced {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否支持当前类型
|
||||||
|
*
|
||||||
|
* @param nettyProxyMsg 通道数据
|
||||||
|
* @return 布尔类型 是、否
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected boolean doSupport(NettyProxyMsg nettyProxyMsg) {
|
||||||
|
return ProxyMessageTypeEnums.SOCKET_CLIENT_PROXY_CLIENT_.getTypeByte() == nettyProxyMsg.getType();
|
||||||
|
}
|
||||||
|
}
|
@ -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.advanced.payload.NettyProxyMsg;
|
||||||
import org.framework.lazy.cloud.network.heartbeat.common.enums.ProxyMessageTypeEnums;
|
import org.framework.lazy.cloud.network.heartbeat.common.enums.ProxyMessageTypeEnums;
|
||||||
|
|
||||||
public abstract class AbstractHandleSocketClientProxyServerTypeAdvanced<MSG> extends AbstractHandleChannelTypeAdvanced<NettyProxyMsg> implements HandleChannelTypeAdvanced {
|
public abstract class AbstractHandleSocketClientProxyServerStartTypeAdvanced<MSG> extends AbstractHandleChannelTypeAdvanced<NettyProxyMsg> implements HandleChannelTypeAdvanced {
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
@ -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<MSG> extends AbstractHandleChannelTypeAdvanced<NettyProxyMsg> implements HandleChannelTypeAdvanced {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否支持当前类型
|
||||||
|
*
|
||||||
|
* @param nettyProxyMsg 通道数据
|
||||||
|
* @return 布尔类型 是、否
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected boolean doSupport(NettyProxyMsg nettyProxyMsg) {
|
||||||
|
return ProxyMessageTypeEnums.SOCKS_DISTRIBUTE_CLIENT_PROXY_CLIENT_TRANSFER_CONNECTION_FAIL_.getTypeByte() == nettyProxyMsg.getType();
|
||||||
|
}
|
||||||
|
}
|
@ -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<MSG> extends AbstractHandleChannelTypeAdvanced<NettyProxyMsg> implements HandleChannelTypeAdvanced {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否支持当前类型
|
||||||
|
*
|
||||||
|
* @param nettyProxyMsg 通道数据
|
||||||
|
* @return 布尔类型 是、否
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected boolean doSupport(NettyProxyMsg nettyProxyMsg) {
|
||||||
|
return ProxyMessageTypeEnums.SOCKS_DISTRIBUTE_CLIENT_PROXY_CLIENT_TRANSFER_CONNECTION_SUCCESS_.getTypeByte() == nettyProxyMsg.getType();
|
||||||
|
}
|
||||||
|
}
|
@ -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<MSG> extends AbstractHandleChannelTypeAdvanced<NettyProxyMsg> implements HandleChannelTypeAdvanced {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否支持当前类型
|
||||||
|
*
|
||||||
|
* @param nettyProxyMsg 通道数据
|
||||||
|
* @return 布尔类型 是、否
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected boolean doSupport(NettyProxyMsg nettyProxyMsg) {
|
||||||
|
return ProxyMessageTypeEnums.SOCKS_DISTRIBUTE_CLIENT_PROXY_CLIENT_TRANSFER_CLOSE_.getTypeByte() == nettyProxyMsg.getType();
|
||||||
|
}
|
||||||
|
}
|
@ -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<MSG> extends AbstractHandleChannelTypeAdvanced<NettyProxyMsg> implements HandleChannelTypeAdvanced {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否支持当前类型
|
||||||
|
*
|
||||||
|
* @param nettyProxyMsg 通道数据
|
||||||
|
* @return 布尔类型 是、否
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected boolean doSupport(NettyProxyMsg nettyProxyMsg) {
|
||||||
|
return ProxyMessageTypeEnums.SOCKS_DISTRIBUTE_CLIENT_PROXY_CLIENT_TRANSFER_RESPONSE_.getTypeByte() == nettyProxyMsg.getType();
|
||||||
|
}
|
||||||
|
}
|
@ -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<MSG> extends AbstractHandleChannelTypeAdvanced<NettyProxyMsg> implements HandleChannelTypeAdvanced {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否支持当前类型
|
||||||
|
*
|
||||||
|
* @param nettyProxyMsg 通道数据
|
||||||
|
* @return 布尔类型 是、否
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected boolean doSupport(NettyProxyMsg nettyProxyMsg) {
|
||||||
|
return ProxyMessageTypeEnums.SOCKS_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_CONNECTION_.getTypeByte() == nettyProxyMsg.getType();
|
||||||
|
}
|
||||||
|
}
|
@ -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<MSG> extends AbstractHandleChannelTypeAdvanced<NettyProxyMsg> implements HandleChannelTypeAdvanced {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否支持当前类型
|
||||||
|
*
|
||||||
|
* @param nettyProxyMsg 通道数据
|
||||||
|
* @return 布尔类型 是、否
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected boolean doSupport(NettyProxyMsg nettyProxyMsg) {
|
||||||
|
return ProxyMessageTypeEnums.SOCKS_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_CLOSE_.getTypeByte() == nettyProxyMsg.getType();
|
||||||
|
}
|
||||||
|
}
|
@ -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<MSG> extends AbstractHandleChannelTypeAdvanced<NettyProxyMsg> implements HandleChannelTypeAdvanced {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否支持当前类型
|
||||||
|
*
|
||||||
|
* @param nettyProxyMsg 通道数据
|
||||||
|
* @return 布尔类型 是、否
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected boolean doSupport(NettyProxyMsg nettyProxyMsg) {
|
||||||
|
return ProxyMessageTypeEnums.SOCKS_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_REQUEST_.getTypeByte() == nettyProxyMsg.getType();
|
||||||
|
}
|
||||||
|
}
|
@ -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.client.*;
|
||||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.http.server.*;
|
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.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.*;
|
||||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.client.AbstractHandleSocksDistributeClientProxyServerConnectionTransferSuccessTypeAdvanced;
|
import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.server.*;
|
||||||
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.enums.ProxyMessageTypeEnums;
|
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;
|
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 客户端代理服务端
|
* socket 客户端代理服务端
|
||||||
*
|
*
|
||||||
* @see ProxyMessageTypeEnums#SOCKET_CLIENT_PROXY_SERVER_
|
* @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;
|
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 服务端代理客户端
|
* socket 服务端代理客户端
|
||||||
@ -224,7 +281,7 @@ public class ProxyMessageType {
|
|||||||
* @see ProxyMessageTypeEnums#SOCKET_SERVER_PROXY_CLIENT_
|
* @see ProxyMessageTypeEnums#SOCKET_SERVER_PROXY_CLIENT_
|
||||||
* @see AbstractHandleSocketServerProxyClientTypeAdvanced
|
* @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;
|
public static final byte HTTP_DISTRIBUTE_PROXY = -96;
|
||||||
|
@ -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.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.AbstractHandleSocketLocalProxyTypeAdvanced;
|
||||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.client.*;
|
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.*;
|
||||||
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.constant.ProxyMessageType;
|
import org.framework.lazy.cloud.network.heartbeat.common.constant.ProxyMessageType;
|
||||||
import org.framework.lazy.cloud.network.heartbeat.common.constant.TcpMessageType;
|
import org.framework.lazy.cloud.network.heartbeat.common.constant.TcpMessageType;
|
||||||
|
|
||||||
@ -161,14 +159,14 @@ public enum ProxyMessageTypeEnums {
|
|||||||
* socket 客户端代理客户端
|
* socket 客户端代理客户端
|
||||||
*
|
*
|
||||||
* @see ProxyMessageTypeEnums#SOCKET_CLIENT_PROXY_CLIENT_
|
* @see ProxyMessageTypeEnums#SOCKET_CLIENT_PROXY_CLIENT_
|
||||||
* @see AbstractHandleSocketClientProxyClietnTypeAdvanced
|
* @see AbstractHandleSocketClientProxyClientStartTypeAdvanced
|
||||||
*/
|
*/
|
||||||
SOCKET_CLIENT_PROXY_CLIENT_(ProxyMessageType.SOCKET_CLIENT_PROXY_CLIENT_, "socket 客户端代理客户端"),
|
SOCKET_CLIENT_PROXY_CLIENT_(ProxyMessageType.SOCKET_CLIENT_PROXY_CLIENT_, "socket 客户端代理客户端"),
|
||||||
/**
|
/**
|
||||||
* socket 客户端代理服务端
|
* socket 客户端代理服务端
|
||||||
*
|
*
|
||||||
* @see ProxyMessageTypeEnums#SOCKET_CLIENT_PROXY_SERVER_
|
* @see ProxyMessageTypeEnums#SOCKET_CLIENT_PROXY_SERVER_
|
||||||
* @see AbstractHandleSocketClientProxyServerTypeAdvanced
|
* @see AbstractHandleSocketClientProxyServerStartTypeAdvanced
|
||||||
*/
|
*/
|
||||||
SOCKET_CLIENT_PROXY_SERVER_(ProxyMessageType.SOCKET_CLIENT_PROXY_SERVER_, "socket 客户端代理服务端"),
|
SOCKET_CLIENT_PROXY_SERVER_(ProxyMessageType.SOCKET_CLIENT_PROXY_SERVER_, "socket 客户端代理服务端"),
|
||||||
|
|
||||||
@ -223,6 +221,57 @@ public enum ProxyMessageTypeEnums {
|
|||||||
* @see AbstractHandleSocksDistributeClientProxyServerTransferCloseTypeAdvanced
|
* @see AbstractHandleSocksDistributeClientProxyServerTransferCloseTypeAdvanced
|
||||||
*/
|
*/
|
||||||
SOCKS_DISTRIBUTE_CLIENT_PROXY_SERVER_TRANSFER_CLOSE_(ProxyMessageType.SOCKS_DISTRIBUTE_CLIENT_PROXY_SERVER_TRANSFER_CLOSE_, "socket 下发客户端代理服务端传输通道关闭"),
|
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 下发客户端代理客户端传输通道关闭"),
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -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<NettyProxyMsg> {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理当前数据
|
||||||
|
*
|
||||||
|
* @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<SocketChannel>() {
|
||||||
|
@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 下发 连接真实服务成功、客户端可以采集数据了
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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<NettyProxyMsg> {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理当前数据
|
||||||
|
*
|
||||||
|
* @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(); // 数据传输通道关闭
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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<NettyProxyMsg> {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理当前数据
|
||||||
|
*
|
||||||
|
* @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("当前目标通道已经关闭或者不存在");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user