写了一个内网穿透工具,大家来看看

353 天前
 stevenkinwjg

最近学习 netty ,为了练手写了这个内网穿透工具 https://github.com/wandererex/wormhole

wormhole

功能特性

将内网的端口映射到公网,从而达到内网穿透的目的

项目结构

使用

  1. 在公网服务器运行 server
java -jar server-1.0.0-SNAPSHOT-jar-with-dependencies.jar --port 8090
  1. 在内网服务器运行 proxy
java -jar proxy-1.0.0-SNAPSHOT-jar-with-dependencies.jar --serverHost 127.0.0.1 --serverPort 8090 --configPath ./config.json
  1. 内网服务配置
{
  "mysql": {
    "ip": "127.0.0.1",
    "port": "3306",
    "mappingPort": "3307"
  },
  "ssh": {
    "ip": "127.0.0.1",
    "port": "22",
    "mappingPort": "2200"
  }
}

运行实例

3784 次点击
所在节点    分享创造
40 条回复
yazinnnn
269 天前
🤔测试了一下, 感觉没有并发的能力?

用 wrk 测试了一下代理的 nginx, rps 只有个位数....

简单看了眼代码, server 这边每个 proxy server 都会创建一个 event loop group?
stevenkinwjg
265 天前
@yazinnnn 感谢测试,这个我是为了学习 netty 写的,有很多要优化的地方
stevenkinwjg
265 天前
@yazinnnn 能把测试的结果贴到 GitHub 上吗?我看看
yazinnnn
265 天前
@stevenkinwjg #23

简单总结一下
单个连接连 proxy server 貌似木有问题, 多个连接去连会出错(没有在代理端口->被代理端口那里区分每个 client?)
单个连接传输大数据量的文件有 bug
proxy 和 server 貌似都没有热更新能力, proxy 程序关闭之后, server 也没有关掉开启的 proxy server

https://gist.github.com/yazinnnn/8e8529fab8eb93ba81ad68e1767a2965
stevenkinwjg
265 天前
@yazinnnn 好的,我看看
stevenkinwjg
250 天前
@yazinnnn 大佬,我测试了一下并发连接。结果还好
![微信截图_20230907105048.png]( http://tva1.sinaimg.cn/large/00779OZ0ly1hhntyokefkj30r107ydi5.jpg)
能复现一下你的测试吗
stevenkinwjg
250 天前
@yazinnnn ![微信截图_20230907105048.png]( https://x.imgs.ovh/x/2023/09/07/64f93dcb31d5f.png)
stevenkinwjg
250 天前
@yazinnnn 为啥 v 站发不了图片啊
stevenkinwjg
250 天前
![微信截图_20230907105048.png]( https://x.imgs.ovh/x/2023/09/07/64f93dcb31d5f.png)
stevenkinwjg
250 天前
stevenkinwjg
250 天前
<img src="https://x.imgs.ovh/x/2023/09/07/64f93dcb31d5f.png" alt="微信截图_20230907105048.png" title="微信截图_20230907105048.png" />
stevenkinwjg
250 天前
yazinnnn
250 天前
@stevenkinwjg #26




跑一下测试堆内存就爆炸了


限制后, 堆内存快速耗尽
yazinnnn
250 天前

之前用 quarkus 套 vertx 上写了一个类似功能的工具, 用 graal 构建称 native 成品后性能还算 ok
stevenkinwjg
248 天前
@yazinnnn 图挂了,发个链接
stevenkinwjg
243 天前
@yazinnnn https://github.com/wandererex/wormhole 加了测试,现在可以并发连接 了,但 rps 只有几百
yeyang5211
145 天前
@stevenkinwjg 最近在学习 netty 跟着这个项目写了一遍, 每次转发数据的时候都要去 map 里找一下 channel 这样并发起来效率是会变差 ,

还有一个问题想咨询一下 ackHandle 是干啥的 ?
是在服务器关闭的时候等待数据读写完毕之后再关闭 channel 吗
stevenkinwjg
139 天前
@yeyang5211 最近优化了一下,主要是防止服务端活客户端关闭时数据还没有完全发给对端就关闭导致的错误
stevenkinwjg
139 天前
性能优化了一下,qps 过 1k 了
![我的头像](/https://github.com/wandererex/wormhole/blob/optimize-20231013/test.png)
stevenkinwjg
139 天前
性能优化了一下,qps 过 1k 了
![我的头像]( https://github.com/wandererex/wormhole/blob/optimize-20231013/test.png)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/943282

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX