Skip to content

Commit 9ec5b35

Browse files
committed
feat: 模拟暴力攻击单元测试
1 parent 00300b4 commit 9ec5b35

File tree

2 files changed

+54
-4
lines changed

2 files changed

+54
-4
lines changed

src/test/java/top/meethigher/proxy/tcp/tunnel/ReverseTcpProxyTunnelClientTest.java

Lines changed: 47 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package top.meethigher.proxy.tcp.tunnel;
22

33
import io.vertx.core.Vertx;
4+
import io.vertx.core.buffer.Buffer;
45
import io.vertx.core.net.NetClient;
56
import io.vertx.core.net.NetSocket;
67
import org.junit.Before;
@@ -34,6 +35,24 @@ public void setUp() throws Exception {
3435
*/
3536
@Test
3637
public void testErrorMsg() {
38+
// netClient.connect(44444, "127.0.0.1")
39+
// .onComplete(ar -> {
40+
// if (ar.succeeded()) {
41+
// NetSocket socket = ar.result();
42+
// socket.pause();
43+
// socket.closeHandler(v -> {
44+
// log.error("连接被关闭");
45+
// System.exit(1);
46+
// });
47+
// socket.write("hello world");
48+
// socket.resume();
49+
// } else {
50+
// ar.cause().printStackTrace();
51+
// System.exit(1);
52+
// }
53+
// });
54+
55+
// 模拟故意制造错误的请求头长度。服务端可以配置闲时超时参数解决。注意要大于客户端心跳的频率
3756
netClient.connect(44444, "127.0.0.1")
3857
.onComplete(ar -> {
3958
if (ar.succeeded()) {
@@ -43,7 +62,34 @@ public void testErrorMsg() {
4362
log.error("连接被关闭");
4463
System.exit(1);
4564
});
46-
socket.write("hello world");
65+
66+
// 模拟暴力攻击
67+
vertx.setPeriodic(500, id -> {
68+
byte[] byteArray = TunnelMessage.OpenDataPort.newBuilder()
69+
.setDataProxyName("ssh-proxy")
70+
.setDataProxyPort(2222)
71+
.setSecret("0123456789")
72+
.build().toByteArray();
73+
int totalLength = 4 + 2 + byteArray.length;
74+
// 模拟恶意制造消息长度
75+
totalLength += 100;
76+
Buffer buffer = Buffer.buffer();
77+
buffer.appendInt(totalLength);
78+
buffer.appendShort(TunnelMessageType.OPEN_DATA_PORT.code());
79+
buffer.appendBytes(byteArray);
80+
socket.write(buffer);
81+
});
82+
83+
// socket.write(buffer).onComplete(ar1 -> {
84+
// // 发送一条正常消息
85+
// socket.write(new TunnelMessageCodec().encode(TunnelMessageType.OPEN_DATA_PORT.code(),
86+
// TunnelMessage.OpenDataPort.newBuilder()
87+
// .setSecret("0123456789")
88+
// .setDataProxyName("ssh-proxy")
89+
// .setDataProxyPort(2222)
90+
// .build().toByteArray()
91+
// ));
92+
// });
4793
socket.resume();
4894
} else {
4995
ar.cause().printStackTrace();
@@ -83,7 +129,6 @@ public void client() {
83129
ReverseTcpProxyTunnelClient.create(vertx, netClient).connect("127.0.0.1", 44444);
84130

85131

86-
87132
LockSupport.park();
88133
}
89134
}

src/test/java/top/meethigher/proxy/tcp/tunnel/ReverseTcpProxyTunnelServerTest.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,23 @@
11
package top.meethigher.proxy.tcp.tunnel;
22

33
import io.vertx.core.Vertx;
4+
import io.vertx.core.VertxOptions;
45
import io.vertx.core.net.NetServer;
6+
import io.vertx.core.net.NetServerOptions;
57
import org.junit.Test;
68

9+
import java.time.Duration;
10+
import java.util.concurrent.TimeUnit;
711
import java.util.concurrent.locks.LockSupport;
812

913
public class ReverseTcpProxyTunnelServerTest {
1014

1115

1216
@Test
1317
public void server() {
14-
Vertx vertx = Vertx.vertx();
15-
NetServer netServer = vertx.createNetServer();
18+
Vertx vertx = Vertx.vertx(new VertxOptions().setMaxEventLoopExecuteTime(Duration.ofDays(1).toNanos()));
19+
// 设置空闲超时,注意该超时参数,应该大于客户端的心跳时间
20+
NetServer netServer = vertx.createNetServer(new NetServerOptions().setIdleTimeout(10).setIdleTimeoutUnit(TimeUnit.SECONDS));
1621
ReverseTcpProxyTunnelServer.create(vertx, netServer)
1722
.start();
1823
LockSupport.park();

0 commit comments

Comments
 (0)