This commit is contained in:
wujiawei 2024-09-28 19:01:41 +08:00
parent fb086d6e95
commit 600706ccc1
10 changed files with 113 additions and 35 deletions

View File

@ -56,4 +56,9 @@ public class InternalNetworkClientPermeateClientVisitor implements InternalNetwo
* 访客ID
*/
private String visitorId;
/**
* 是否是ssl
*/
private boolean isSsl;
}

View File

@ -38,4 +38,10 @@ public class InternalNetworkPermeateServerVisitor implements InternalNetworkPerm
*/
private List<HandleChannelTypeAdvanced> handleChannelTypeAdvancedList;
/**
* 是否是ssl
*/
private boolean isSsl;
}

View File

@ -51,5 +51,17 @@ public interface InternalNetworkPermeate {
*/
void setVisitorPort(Integer visitorPort);
/**
* 是否是ssl
*
* @return
*/
boolean isSsl();
/**
* 设置ssl
*/
void setSsl(boolean ssl);
}

View File

@ -13,7 +13,7 @@ import lombok.experimental.Accessors;
@Builder
@Data
@Accessors(chain = true)
public class InternalNetworkPermeateRealServer {
public class InternalNetworkServerPermeateServerRealServer {

View File

@ -0,0 +1,31 @@
package org.framework.lazy.cloud.network.heartbeat.server.netty;
import lombok.Data;
import org.framework.lazy.cloud.network.heartbeat.common.InternalNetworkPermeate;
@Data
public class InternalNetworkServerPermeateServerConf implements InternalNetworkPermeate {
/**
* 目标地址
*/
private String targetIp;
/**
* 目标端口
*/
private Integer targetPort;
/**
* 访问端口
*/
private Integer visitorPort;
/**
* 是否是ssl
*/
private boolean isSsl;
}

View File

@ -3,12 +3,27 @@ package org.framework.lazy.cloud.network.heartbeat.server.netty.filter;
import io.netty.channel.Channel;
import io.netty.channel.ChannelPipeline;
import io.netty.channel.socket.SocketChannel;
import io.netty.handler.ssl.SslContext;
import io.netty.handler.ssl.SslContextBuilder;
import io.netty.handler.ssl.util.InsecureTrustManagerFactory;
import lombok.extern.slf4j.Slf4j;
import org.framework.lazy.cloud.network.heartbeat.common.InternalNetworkServerPermeateServerRealServer;
import org.framework.lazy.cloud.network.heartbeat.common.decoder.TransferDecoder;
import org.framework.lazy.cloud.network.heartbeat.common.encoder.TransferEncoder;
import org.framework.lazy.cloud.network.heartbeat.common.filter.DebugChannelInitializer;
import org.framework.lazy.cloud.network.heartbeat.server.netty.handler.NettyServerPermeateServerRealHandler;
import java.net.URI;
import java.net.URISyntaxException;
@Slf4j
public class NettyServerPermeateServerRealFilter extends DebugChannelInitializer<SocketChannel> {
private final InternalNetworkServerPermeateServerRealServer internalNetworkServerPermeateServerRealServer;
public NettyServerPermeateServerRealFilter(InternalNetworkServerPermeateServerRealServer internalNetworkServerPermeateServerRealServer) {
this.internalNetworkServerPermeateServerRealServer = internalNetworkServerPermeateServerRealServer;
}
/**
* 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}.
@ -18,14 +33,21 @@ public class NettyServerPermeateServerRealFilter extends DebugChannelInitializer
@Override
protected void initChannel0(SocketChannel ch) {
ChannelPipeline pipeline = ch.pipeline();
// // 适配https
// try {
// SslContext sslContext = SslContextBuilder.forClient()
// .trustManager(InsecureTrustManagerFactory.INSTANCE).build();
// ch.pipeline().addLast(sslContext.newHandler(ch.alloc(), "https://juno.shuhan-juno.com", 443));
// } catch (SSLException e) {
// throw new RuntimeException(e);
// }
Boolean isSsl = internalNetworkServerPermeateServerRealServer.getIsSsl();
if(isSsl){
log.info("init channel0 ssl");
String targetIp = internalNetworkServerPermeateServerRealServer.getClientTargetIp();
Integer targetPort = internalNetworkServerPermeateServerRealServer.getClientTargetPort();
// 适配https
try {
SslContext sslContext = SslContextBuilder.forClient()
.trustManager(InsecureTrustManagerFactory.INSTANCE).build();
pipeline.addLast("ssl", sslContext.newHandler(ch.alloc(),targetIp,targetPort));
} catch (Exception e) {
throw new RuntimeException(e);
}
}
// 解码编码
pipeline.addLast(new TransferDecoder(Integer.MAX_VALUE, 1024 * 1024*10));
pipeline.addLast(new TransferEncoder());

View File

@ -5,17 +5,17 @@ import io.netty.channel.ChannelDuplexHandler;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelPipeline;
import io.netty.channel.socket.SocketChannel;
import org.framework.lazy.cloud.network.heartbeat.common.InternalNetworkPermeateRealServer;
import org.framework.lazy.cloud.network.heartbeat.common.InternalNetworkServerPermeateServerRealServer;
import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelFlowAdapter;
import org.framework.lazy.cloud.network.heartbeat.common.filter.DebugChannelInitializer;
import org.framework.lazy.cloud.network.heartbeat.server.netty.handler.NettyServerPermeateServerVisitorHandler;
public class NettyServerPermeateServerVisitorFilter extends DebugChannelInitializer<SocketChannel> {
private final InternalNetworkPermeateRealServer internalNetworkPermeateRealServer;
private final InternalNetworkServerPermeateServerRealServer internalNetworkServerPermeateServerRealServer;
private final ChannelFlowAdapter channelFlowAdapter;
public NettyServerPermeateServerVisitorFilter(InternalNetworkPermeateRealServer internalNetworkPermeateRealServer, ChannelFlowAdapter channelFlowAdapter) {
this.internalNetworkPermeateRealServer = internalNetworkPermeateRealServer;
public NettyServerPermeateServerVisitorFilter(InternalNetworkServerPermeateServerRealServer internalNetworkServerPermeateServerRealServer, ChannelFlowAdapter channelFlowAdapter) {
this.internalNetworkServerPermeateServerRealServer = internalNetworkServerPermeateServerRealServer;
this.channelFlowAdapter = channelFlowAdapter;
}
@ -32,6 +32,6 @@ public class NettyServerPermeateServerVisitorFilter extends DebugChannelInitiali
protected void initChannel0(SocketChannel ch) throws Exception {
ChannelPipeline pipeline = ch.pipeline();
pipeline.addLast(new ChannelDuplexHandler());
pipeline.addLast(new NettyServerPermeateServerVisitorHandler(internalNetworkPermeateRealServer, channelFlowAdapter));
pipeline.addLast(new NettyServerPermeateServerVisitorHandler(internalNetworkServerPermeateServerRealServer, channelFlowAdapter));
}
}

View File

@ -7,10 +7,11 @@ import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelOption;
import io.netty.channel.SimpleChannelInboundHandler;
import lombok.extern.slf4j.Slf4j;
import org.framework.lazy.cloud.network.heartbeat.common.InternalNetworkPermeateRealServer;
import org.framework.lazy.cloud.network.heartbeat.common.InternalNetworkServerPermeateServerRealServer;
import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelFlowAdapter;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ChannelFlowEnum;
import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils;
import org.framework.lazy.cloud.network.heartbeat.server.netty.InternalNetworkServerPermeateServerConf;
import org.framework.lazy.cloud.network.heartbeat.server.netty.flow.ServerChannelFlow;
import org.framework.lazy.cloud.network.heartbeat.server.netty.socket.NettyServerPermeateServerConnectRealSocket;
@ -18,12 +19,12 @@ import java.util.UUID;
@Slf4j
public class NettyServerPermeateServerVisitorHandler extends SimpleChannelInboundHandler<ByteBuf> {
private final InternalNetworkPermeateRealServer internalNetworkPermeateRealServer;
private final InternalNetworkServerPermeateServerRealServer internalNetworkServerPermeateServerRealServer;
private final ChannelFlowAdapter channelFlowAdapter;// 流量适配器
// private final NettyChannelPool nettyChannelPool = new DefaultNettyChannelPool(10);
public NettyServerPermeateServerVisitorHandler(InternalNetworkPermeateRealServer internalNetworkPermeateRealServer, ChannelFlowAdapter channelFlowAdapter) {
this.internalNetworkPermeateRealServer = internalNetworkPermeateRealServer;
public NettyServerPermeateServerVisitorHandler(InternalNetworkServerPermeateServerRealServer internalNetworkServerPermeateServerRealServer, ChannelFlowAdapter channelFlowAdapter) {
this.internalNetworkServerPermeateServerRealServer = internalNetworkServerPermeateServerRealServer;
this.channelFlowAdapter = channelFlowAdapter;
}
@ -42,9 +43,10 @@ public class NettyServerPermeateServerVisitorHandler extends SimpleChannelInboun
// 判断是否有可用的通道 如果没有创建新的通道
log.info("开始准备绑定渗透真实通道: {}", internalNetworkPermeateRealServer.getVisitorPort());
log.info("开始准备绑定渗透真实通道: {}", internalNetworkServerPermeateServerRealServer.getVisitorPort());
// 创建这是客户端通道池
NettyServerPermeateServerConnectRealSocket.buildRealServer(internalNetworkPermeateRealServer, visitorChannel, visitorId);
NettyServerPermeateServerConnectRealSocket.buildRealServer(internalNetworkServerPermeateServerRealServer, visitorChannel, visitorId);
log.info("内网渗透 服务端访客端口连接成功了");
@ -56,7 +58,7 @@ public class NettyServerPermeateServerVisitorHandler extends SimpleChannelInboun
// 访客通道
Channel visitorChannel = ctx.channel();
Integer visitorPort = internalNetworkPermeateRealServer.getVisitorPort();
Integer visitorPort = internalNetworkServerPermeateServerRealServer.getVisitorPort();
byte[] bytes = new byte[buf.readableBytes()];
buf.readBytes(bytes);
// 获取客户端通道而后进行数据下发

View File

@ -6,7 +6,7 @@ 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.InternalNetworkPermeateRealServer;
import org.framework.lazy.cloud.network.heartbeat.common.InternalNetworkServerPermeateServerRealServer;
import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils;
import org.framework.lazy.cloud.network.heartbeat.server.netty.filter.NettyServerPermeateServerRealFilter;
@ -22,23 +22,23 @@ public class NettyServerPermeateServerConnectRealSocket {
/**
* 连接真实服务
*
* @param internalNetworkPermeateRealServer 访客信息
* @param internalNetworkServerPermeateServerRealServer 访客信息
*/
public static void buildRealServer(InternalNetworkPermeateRealServer internalNetworkPermeateRealServer,Channel visitorChannel ,String visitorId) {
buildNewRealServer(internalNetworkPermeateRealServer,visitorChannel,visitorId);
public static void buildRealServer(InternalNetworkServerPermeateServerRealServer internalNetworkServerPermeateServerRealServer, Channel visitorChannel , String visitorId) {
buildNewRealServer(internalNetworkServerPermeateServerRealServer,visitorChannel,visitorId);
}
/**
* @param internalNetworkPermeateRealServer 访客信息
* @param internalNetworkServerPermeateServerRealServer 访客信息
* @param visitorChannel
* @param visitorId
*/
private static void buildNewRealServer(InternalNetworkPermeateRealServer internalNetworkPermeateRealServer,
private static void buildNewRealServer(InternalNetworkServerPermeateServerRealServer internalNetworkServerPermeateServerRealServer,
Channel visitorChannel, String visitorId) {
try {
String clientTargetIp = internalNetworkPermeateRealServer.getClientTargetIp();
Integer clientTargetPort = internalNetworkPermeateRealServer.getClientTargetPort();
Integer visitorPort = internalNetworkPermeateRealServer.getVisitorPort();
String clientTargetIp = internalNetworkServerPermeateServerRealServer.getClientTargetIp();
Integer clientTargetPort = internalNetworkServerPermeateServerRealServer.getClientTargetPort();
Integer visitorPort = internalNetworkServerPermeateServerRealServer.getVisitorPort();
Bootstrap bootstrap = new Bootstrap();
bootstrap.group(eventLoopGroup).channel(NioSocketChannel.class)
// 设置读缓冲区为2M
@ -50,7 +50,7 @@ public class NettyServerPermeateServerConnectRealSocket {
// .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 NettyServerPermeateServerRealFilter())
.handler(new NettyServerPermeateServerRealFilter(internalNetworkServerPermeateServerRealServer))
;
@ -77,7 +77,7 @@ public class NettyServerPermeateServerConnectRealSocket {
} else {
log.error("服务端内网渗透 无法连接当前网络内的目标IP【{}】,目标端口:【{}】", clientTargetIp, clientTargetPort);
channelFuture.channel().eventLoop().schedule(() -> {
buildNewRealServer(internalNetworkPermeateRealServer, visitorChannel, visitorId);
buildNewRealServer(internalNetworkServerPermeateServerRealServer, visitorChannel, visitorId);
}, 2, TimeUnit.SECONDS);
}
});

View File

@ -7,7 +7,7 @@ import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioServerSocketChannel;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.framework.lazy.cloud.network.heartbeat.common.InternalNetworkPermeateRealServer;
import org.framework.lazy.cloud.network.heartbeat.common.InternalNetworkServerPermeateServerRealServer;
import org.framework.lazy.cloud.network.heartbeat.common.NettyPermeateVisitorContext;
import org.framework.lazy.cloud.network.heartbeat.common.NettyVisitorPortContext;
import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelFlowAdapter;
@ -200,7 +200,7 @@ public class NettyServerPermeateServerConnectVisitorSocket {
if (permeateVisitorPort == null) {
throw new IllegalArgumentException("visitorPort must not null");
}
InternalNetworkPermeateRealServer internalNetworkPermeateRealServer = InternalNetworkPermeateRealServer
InternalNetworkServerPermeateServerRealServer internalNetworkServerPermeateServerRealServer = InternalNetworkServerPermeateServerRealServer
.builder()
.clientTargetIp(clientTargetIp)
.clientTargetPort(clientTargetPort)
@ -208,7 +208,7 @@ public class NettyServerPermeateServerConnectVisitorSocket {
.isSsl(isSsl)
.build();
NettyServerPermeateServerVisitorFilter nettyServerPermeateServerVisitorFilter = new NettyServerPermeateServerVisitorFilter(internalNetworkPermeateRealServer, channelFlowAdapter);
NettyServerPermeateServerVisitorFilter nettyServerPermeateServerVisitorFilter = new NettyServerPermeateServerVisitorFilter(internalNetworkServerPermeateServerRealServer, channelFlowAdapter);
return new NettyServerPermeateServerConnectVisitorSocket(nettyServerPermeateServerVisitorFilter, permeateVisitorPort);
}