mirror of
https://gitee.com/wujiawei1207537021/wu-lazy-cloud-network.git
synced 2025-06-06 13:27:55 +08:00
【fix】 bug fix
This commit is contained in:
parent
394dfdf337
commit
e4c33f34c1
@ -1,92 +0,0 @@
|
||||
package org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.http.socket;
|
||||
|
||||
|
||||
import io.netty.bootstrap.Bootstrap;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import io.netty.channel.*;
|
||||
import io.netty.channel.nio.NioEventLoopGroup;
|
||||
import io.netty.channel.socket.nio.NioSocketChannel;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.http.NettyHttpClientProxyClientTransfer;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.http.NettyHttpClientProxyServerTransfer;
|
||||
import org.framework.lazy.cloud.network.heartbeat.server.netty.proxy.http.filter.NettyHttpClientProxyServerRealFilter;
|
||||
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
/**
|
||||
* 服务端渗透服务端 传输通道
|
||||
*/
|
||||
@Slf4j
|
||||
public class NettyHttpClientProxyClientTransferSocket {
|
||||
private static final EventLoopGroup eventLoopGroup = new NioEventLoopGroup();
|
||||
|
||||
|
||||
/**
|
||||
* @param nettyHttpClientProxyClientTransfer 访客信息
|
||||
* @param proxyTransferChannel 代理传输通道
|
||||
* @param visitorId 请求ID
|
||||
*/
|
||||
public static void buildRealServer(NettyHttpClientProxyClientTransfer nettyHttpClientProxyClientTransfer,
|
||||
Channel proxyTransferChannel, String visitorId) {
|
||||
try {
|
||||
String clientTargetIp = nettyHttpClientProxyClientTransfer.getTargetIp();
|
||||
Integer clientTargetPort = nettyHttpClientProxyClientTransfer.getTargetPort();
|
||||
byte[] data = nettyHttpClientProxyClientTransfer.getData();
|
||||
|
||||
Bootstrap bootstrap = new Bootstrap();
|
||||
bootstrap.group(eventLoopGroup).channel(NioSocketChannel.class)
|
||||
// 设置读缓冲区为2M
|
||||
.option(ChannelOption.SO_RCVBUF, 2048 * 1024)
|
||||
// 设置写缓冲区为1M
|
||||
.option(ChannelOption.SO_SNDBUF, 1024 * 1024)
|
||||
// .option(ChannelOption.TCP_NODELAY, false)
|
||||
.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 1000 * 60)//连接超时时间设置为 60 秒
|
||||
// .option(ChannelOption.SO_BACKLOG, 128)//务端接受连接的队列长度 默认128
|
||||
// .option(ChannelOption.RCVBUF_ALLOCATOR, new NettyRecvByteBufAllocator(1024 * 1024))//用于Channel分配接受Buffer的分配器 默认AdaptiveRecvByteBufAllocator.DEFAULT
|
||||
.option(ChannelOption.WRITE_BUFFER_WATER_MARK, new WriteBufferWaterMark(1024 * 1024, 1024 * 1024 * 2))
|
||||
.handler(new NettyHttpClientProxyServerRealFilter(nettyHttpClientProxyClientTransfer))
|
||||
|
||||
;
|
||||
|
||||
|
||||
bootstrap
|
||||
.connect(clientTargetIp, clientTargetPort)
|
||||
.sync()
|
||||
.addListener((ChannelFutureListener) channelFuture -> {
|
||||
if (channelFuture.isSuccess()) {
|
||||
// 客户端链接真实服务成功 设置自动读写false 等待访客连接成功后设置成true
|
||||
Channel realChannel = channelFuture.channel();
|
||||
// realChannel.config().setOption(ChannelOption.AUTO_READ, false);
|
||||
realChannel.config().setOption(ChannelOption.AUTO_READ, true);
|
||||
|
||||
log.info("客户端代理服务端,绑定本地服务,IP:{},端口:{} channelID:{} 新建通道成功", clientTargetIp, clientTargetPort, realChannel.id().asLongText());
|
||||
// 缓存当前端口对应的通道、通道池
|
||||
ChannelAttributeKeyUtils.buildNextChannel(realChannel, proxyTransferChannel);
|
||||
ChannelAttributeKeyUtils.buildNextChannel(proxyTransferChannel, realChannel);
|
||||
|
||||
ChannelAttributeKeyUtils.buildVisitorId(realChannel, visitorId);
|
||||
|
||||
proxyTransferChannel.config().setOption(ChannelOption.AUTO_READ, true);
|
||||
// 发送数据
|
||||
ByteBuf buf = realChannel.config().getAllocator().buffer(data.length);
|
||||
buf.writeBytes(data);
|
||||
realChannel.writeAndFlush(buf);
|
||||
|
||||
|
||||
} else {
|
||||
log.error("客户端代理服务端 无法连接当前网络内的目标IP:【{}】,目标端口:【{}】", clientTargetIp, clientTargetPort);
|
||||
eventLoopGroup.schedule(() -> {
|
||||
buildRealServer(nettyHttpClientProxyClientTransfer, proxyTransferChannel, visitorId);
|
||||
}, 2, TimeUnit.SECONDS);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user