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
f8a9ca4264
commit
5eba201979
@ -11,6 +11,7 @@ import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyC
|
|||||||
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.AbstractHandleSocketClientProxyClientStartTypeAdvanced;
|
import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.client.AbstractHandleSocketClientProxyClientStartTypeAdvanced;
|
||||||
|
import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import org.wu.framework.spring.utils.SpringContextHolder;
|
import org.wu.framework.spring.utils.SpringContextHolder;
|
||||||
|
|
||||||
@ -37,6 +38,9 @@ public class ClientHandleNettySocketProtocolHandleSocketClientProxyClientStartTy
|
|||||||
String host = nettyProxyMsg.getTargetIpString();
|
String host = nettyProxyMsg.getTargetIpString();
|
||||||
Integer port = Integer.parseInt(nettyProxyMsg.getTargetPortString());
|
Integer port = Integer.parseInt(nettyProxyMsg.getTargetPortString());
|
||||||
byte[] clientId = nettyProxyMsg.getClientId();
|
byte[] clientId = nettyProxyMsg.getClientId();
|
||||||
|
byte[] visitorId = nettyProxyMsg.getVisitorId();
|
||||||
|
|
||||||
|
ChannelAttributeKeyUtils.buildVisitorId(proxyChannel, visitorId);
|
||||||
Socks5AddressType socks5AddressType = nettySocketChannelContext.getSocks5AddressType();
|
Socks5AddressType socks5AddressType = nettySocketChannelContext.getSocks5AddressType();
|
||||||
|
|
||||||
|
|
||||||
|
@ -0,0 +1,44 @@
|
|||||||
|
package org.framework.lazy.cloud.network.heartbeat.client.netty.proxy.socks.filter;
|
||||||
|
|
||||||
|
import io.netty.channel.Channel;
|
||||||
|
import io.netty.channel.ChannelHandlerContext;
|
||||||
|
import io.netty.channel.ChannelPipeline;
|
||||||
|
import io.netty.channel.socket.SocketChannel;
|
||||||
|
import io.netty.handler.timeout.IdleStateHandler;
|
||||||
|
import org.framework.lazy.cloud.network.heartbeat.client.netty.proxy.socks.handler.NettySocksClientProxyClientVisitorTransferHandler;
|
||||||
|
import org.framework.lazy.cloud.network.heartbeat.client.netty.proxy.socks.handler.NettySocksClientProxyServerTransferHandler;
|
||||||
|
import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelTypeAdapter;
|
||||||
|
import org.framework.lazy.cloud.network.heartbeat.common.decoder.NettyProxyMsgDecoder;
|
||||||
|
import org.framework.lazy.cloud.network.heartbeat.common.encoder.NettyProxyMsgEncoder;
|
||||||
|
import org.framework.lazy.cloud.network.heartbeat.common.filter.DebugChannelInitializer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* netty 客户端代理服务端数据传输通道
|
||||||
|
*/
|
||||||
|
public class NettySocksClientProxyClientVisitorTransferFilter extends DebugChannelInitializer<SocketChannel> {
|
||||||
|
private final ChannelTypeAdapter channelTypeAdapter;
|
||||||
|
|
||||||
|
public NettySocksClientProxyClientVisitorTransferFilter(ChannelTypeAdapter channelTypeAdapter) {
|
||||||
|
this.channelTypeAdapter = channelTypeAdapter;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method will be called once the {@link Channel} was registered. After the method returns this instance
|
||||||
|
* will be removed from the {@link ChannelPipeline} of the {@link Channel}.
|
||||||
|
*
|
||||||
|
* @param ch the {@link Channel} which was registered.
|
||||||
|
* @throws Exception is thrown if an error occurs. In that case it will be handled by
|
||||||
|
* {@link #exceptionCaught(ChannelHandlerContext, Throwable)} which will by default connectionClose
|
||||||
|
* the {@link Channel}.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected void initChannel0(SocketChannel ch) throws Exception {
|
||||||
|
ChannelPipeline pipeline = ch.pipeline();
|
||||||
|
// 解码、编码
|
||||||
|
pipeline.addLast(new IdleStateHandler(0, 4, 0));
|
||||||
|
|
||||||
|
pipeline.addLast(new NettyProxyMsgDecoder(Integer.MAX_VALUE, 0, 4, -4, 0));
|
||||||
|
pipeline.addLast(new NettyProxyMsgEncoder());
|
||||||
|
pipeline.addLast(new NettySocksClientProxyClientVisitorTransferHandler(channelTypeAdapter));
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,67 @@
|
|||||||
|
package org.framework.lazy.cloud.network.heartbeat.client.netty.proxy.socks.handler;
|
||||||
|
|
||||||
|
|
||||||
|
import io.netty.channel.Channel;
|
||||||
|
import io.netty.channel.ChannelHandlerContext;
|
||||||
|
import io.netty.channel.SimpleChannelInboundHandler;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
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.utils.ChannelAttributeKeyUtils;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 客户端访客通信通道 处理器
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
public class NettySocksClientProxyClientVisitorTransferHandler extends SimpleChannelInboundHandler<NettyProxyMsg> {
|
||||||
|
private final ChannelTypeAdapter channelTypeAdapter;
|
||||||
|
|
||||||
|
public NettySocksClientProxyClientVisitorTransferHandler(ChannelTypeAdapter channelTypeAdapter) {
|
||||||
|
this.channelTypeAdapter = channelTypeAdapter;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void channelActive(ChannelHandlerContext ctx) throws Exception {
|
||||||
|
super.channelActive(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void channelRead0(ChannelHandlerContext ctx, NettyProxyMsg nettyProxyMsg) throws Exception {
|
||||||
|
channelTypeAdapter.handler(ctx, nettyProxyMsg);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void channelInactive(ChannelHandlerContext ctx) throws Exception {
|
||||||
|
Channel channel = ctx.channel();
|
||||||
|
String visitorId = ChannelAttributeKeyUtils.getVisitorId(channel);
|
||||||
|
// 关闭访客
|
||||||
|
if (channel.isActive()) {
|
||||||
|
// 上报关闭这个客户端的访客通道
|
||||||
|
NettyProxyMsg closeVisitorMsg = new NettyProxyMsg();
|
||||||
|
closeVisitorMsg.setType(ProxyMessageType.SOCKS_REPORT_CLIENT_PROXY_CLIENT_TRANSFER_CLOSE_);
|
||||||
|
closeVisitorMsg.setVisitorId(visitorId);
|
||||||
|
channel.writeAndFlush(closeVisitorMsg);
|
||||||
|
}
|
||||||
|
|
||||||
|
super.channelInactive(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void channelWritabilityChanged(ChannelHandlerContext ctx) throws Exception {
|
||||||
|
if (ctx.channel().isWritable()) {
|
||||||
|
log.debug("Channel is writable again");
|
||||||
|
// 恢复之前暂停的操作,如写入数据
|
||||||
|
} else {
|
||||||
|
log.debug("Channel is not writable");
|
||||||
|
// 暂停写入操作,等待可写状态
|
||||||
|
}
|
||||||
|
log.info("channelWritabilityChanged!");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
|
||||||
|
super.exceptionCaught(ctx, cause);
|
||||||
|
}
|
||||||
|
}
|
@ -8,6 +8,7 @@ import io.netty.handler.codec.socksx.v5.Socks5AddressType;
|
|||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.framework.lazy.cloud.network.heartbeat.client.config.NettyClientProperties;
|
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.NettySocksClientProxyClient;
|
||||||
|
import org.framework.lazy.cloud.network.heartbeat.client.netty.proxy.socks.filter.NettySocksClientProxyClientVisitorTransferFilter;
|
||||||
import org.framework.lazy.cloud.network.heartbeat.client.netty.proxy.socks.filter.NettySocksClientProxyServerTransferFilter;
|
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.adapter.ChannelTypeAdapter;
|
||||||
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg;
|
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg;
|
||||||
@ -37,7 +38,7 @@ public class NettySocksClientProxyClientVisitorTransferSocket {
|
|||||||
.option(ChannelOption.SO_SNDBUF, 1024 * 1024)
|
.option(ChannelOption.SO_SNDBUF, 1024 * 1024)
|
||||||
.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 1000 * 60)//连接超时时间设置为 60 秒
|
.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 1000 * 60)//连接超时时间设置为 60 秒
|
||||||
.option(ChannelOption.WRITE_BUFFER_WATER_MARK, new WriteBufferWaterMark(1024 * 1024, 1024 * 1024 * 2))
|
.option(ChannelOption.WRITE_BUFFER_WATER_MARK, new WriteBufferWaterMark(1024 * 1024, 1024 * 1024 * 2))
|
||||||
.handler(new NettySocksClientProxyServerTransferFilter(new ChannelTypeAdapter(nettySocksClientProxyClient.getHandleChannelTypeAdvancedList())))
|
.handler(new NettySocksClientProxyClientVisitorTransferFilter(new ChannelTypeAdapter(nettySocksClientProxyClient.getHandleChannelTypeAdvancedList())))
|
||||||
;
|
;
|
||||||
NettyClientProperties nettyClientProperties = nettySocksClientProxyClient.getNettyClientProperties();
|
NettyClientProperties nettyClientProperties = nettySocksClientProxyClient.getNettyClientProperties();
|
||||||
String inetHost = nettyClientProperties.getInetHost();
|
String inetHost = nettyClientProperties.getInetHost();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user