爱意满满的作品展示区。
stevenkinwjg

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

  •  1
     
  •   stevenkinwjg · May 26, 2023 · 6301 views
    This topic created in 1258 days ago, the information mentioned may be changed or developed.

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

    wormhole

    功能特性

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

    项目结构

    • server 运行在公网的服务端,接受内网代理的连接,并把内网的端口映射到公网服务器上,客户端通过访问公网端口来访问内网服务
    • proxy 运行在内网,与公网服务建立连接,发送配置,把来自公网的流量转发到内网服务
    • serialize 提供公网服务与内网代理数据的序列化和反序列化功能

    使用

    1. 在公网服务器运行 server
    java -jar server-1.0.0-SNAPSHOT-jar-with-dependencies.jar --port 8090
    
    • --port 接受内网代理连接请求的端口
    1. 在内网服务器运行 proxy
    java -jar proxy-1.0.0-SNAPSHOT-jar-with-dependencies.jar --serverHost 127.0.0.1 --serverPort 8090 --configPath ./config.json
    
    • --serverHost 公网服务的 ip
    • --serverPort 公网服务的端口
    • --configPath 内网服务配置文件
    1. 内网服务配置
    {
      "mysql": {
        "ip": "127.0.0.1",
        "port": "3306",
        "mappingPort": "3307"
      },
      "ssh": {
        "ip": "127.0.0.1",
        "port": "22",
        "mappingPort": "2200"
      }
    }
    

    运行实例

    这是图片

    40 replies  •  2023-12-26 18:33:17 +08:00
    lhbc
    lhbc
    May 26, 2023 via Android
    1
    用 Java 来写这个有点……
    stevenkinwjg
    stevenkinwjg
    OP
    May 26, 2023
    2
    @lhbc 怎么说?
    privil
    privil
    May 26, 2023
    3
    @stevenkinwjg #2 还要装个 jdk 太不环保了,要不你用那个能编译成原生程序的来写
    stevenkinwjg
    stevenkinwjg
    OP
    May 26, 2023
    4
    @privil 其实这是我学习 netty 的练手项目,会改进的
    stevenkinwjg
    stevenkinwjg
    OP
    May 26, 2023
    5
    @privil 用 go 重写一下也行
    yaott2020
    yaott2020
    May 26, 2023 via Android
    6
    只是个内网穿透,java 太重了。。
    oldshensheep
    oldshensheep
    May 26, 2023
    7
    看了以下开在用 Java8 ,还在用 fastjson 。

    不过你这个可以用 GraalVM 编译成 Native 。

    用 Vertx 写会好受一些。学 Netty 学一半放弃了,日了狗了一样。
    xe2vforesu
    xe2vforesu
    May 26, 2023
    8
    点赞,对学习 netty 有帮助,能有详细的文档说明就更好了
    littlewing
    littlewing
    May 27, 2023
    9
    看出来是 “为了练手” 了,加油
    hotsymbol
    hotsymbol
    May 27, 2023
    10
    用 Java 实现。是需要每个人都有一台 4C16G 的云服务器吗
    noahliaszn
    noahliaszn
    May 27, 2023
    11
    可以学习一下 这个 tunel 工具 https://github.com/ekzhang/bore
    npe
    npe
    May 27, 2023❤️1
    12
    人家是在学习 Netty ,用 Java 写咋了?那你用 Rust 写一个呗
    stevenkinwjg
    stevenkinwjg
    OP
    May 27, 2023
    13
    @npe 哈哈,就是
    rekulas
    rekulas
    May 27, 2023❤️2
    14
    这不算啥,阿里有个监控都是 java 写的,你安到 1h1g 服务器,监控自己先占个 80%资源 🤣
    stevenkinwjg
    stevenkinwjg
    OP
    May 27, 2023
    15
    @oldshensheep 确实比较老了,现在流行啥技术?
    lizhian
    lizhian
    May 27, 2023
    16
    作为一个学习项目来说挺好的~
    JustSong
    JustSong
    May 28, 2023 via Android
    17
    我也有一个类似的练手项目,不过是 Go 写的,仅单个可执行文件: https://github.com/songquanpeng/go-public
    StevenQAQ
    StevenQAQ
    May 29, 2023
    18
    能看出非常深厚的 Java 功底
    ycvk
    ycvk
    May 29, 2023
    19
    vertx 或者 quarkus 了解下,按楼上说的,用 GraalVM 编译成 Native 更好些
    bugfan
    bugfan
    May 31, 2023
    20
    意思用你这东西,还得先在机器上装个 jvm 啊,,,

    话说之前 v2 上也有个哥们用 java 写了一个穿透

    但是都没有我的方便哇😄
    https://www.i996.me
    yazinnnn
    yazinnnn
    Aug 19, 2023
    21
    🤔测试了一下, 感觉没有并发的能力?

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

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

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

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




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


    限制后, 堆内存快速耗尽
    yazinnnn
    yazinnnn
    Sep 7, 2023
    34

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

    还有一个问题想咨询一下 ackHandle 是干啥的 ?
    是在服务器关闭的时候等待数据读写完毕之后再关闭 channel 吗
    stevenkinwjg
    stevenkinwjg
    OP
    Dec 26, 2023
    38
    @yeyang5211 最近优化了一下,主要是防止服务端活客户端关闭时数据还没有完全发给对端就关闭导致的错误
    stevenkinwjg
    stevenkinwjg
    OP
    Dec 26, 2023
    39
    性能优化了一下,qps 过 1k 了
    ![我的头像](/https://github.com/wandererex/wormhole/blob/optimize-20231013/test.png)
    stevenkinwjg
    stevenkinwjg
    OP
    Dec 26, 2023
    40
    性能优化了一下,qps 过 1k 了
    ![我的头像]( https://github.com/wandererex/wormhole/blob/optimize-20231013/test.png)
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1600 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 77ms · UTC 23:34 · PVG 07:34 · LAX 15:34 · JFK 18:34
    ♥ Do have faith in what you're doing.