codingmiao
V2EX  ›  Java

今天整了个活,用纯 http post 做了一个反向代理/内网穿透的工具

  •  3
     
  •   codingmiao · Dec 22, 2023 · 13976 views
    This topic created in 1047 days ago, the information mentioned may be changed or developed.

    事情是这样子的,我在 A 市工作,我们的 web 应用部署在 B 市,由于用户那边不允许远程访问服务器运维,所以有点事就要飞过去现场处理,超级烦。好在 web 应用只要有网就能访问。

    反正不管 ssh 还是访问 web ,都是把字节传发送到服务器嘛,于是我整了个活,本机用 netty 写个客户端把 ssh 请求发出的字节接住,转成 http post 发到 web 应用的 nginx ,再转发给服务器上的 netty 服务端还原出字节,转到 ssh 端口,大致就是这么个架构:

    示例 1

    然后,我就不用飞来飞去了,坐办公室里用 http 端口连服务器了 O(∩_∩)O 。。

    你问为什么不用 websocket ,因为用户不给在 nginx 上加相关配置。。

    忍不住要分享下,项目地址是 https://github.com/codingmiao/hppt

    Supplement 1  ·  Dec 23, 2023
    听楼下各位大佬的建议,楼主已将服务器还原,不作死,各位用的时候也注意遵纪守法^_^
    Supplement 2  ·  Jun 16, 2024

    大半年过去了,发现这玩意除了钻空子,还是有点其它用的,于是我翻新了一波,现在支持编写两个实现类,就能以任意的通讯媒介(比如mq、数据库,甚至聊天软件)来打通两台机器间的网络交互。

    比如这个例子,A、B两台机器没法通信,但通过一个kafka服务就能让A访问B上的端口了:

    kafka

    41 replies  •  2024-06-16 01:25:19 +08:00
    laminux29
    laminux29
    Dec 22, 2023❤️4
    1
    用户不允许远程访问服务器运维,然后你搞技术对抗。

    不出事还好,出事后,用户直接给服务器断电,报警,网监带走硬盘,你还能保住自己吗?
    uh
    uh
    Dec 22, 2023 via iPhone
    2
    恭喜你实现了: http 代理
    uh
    uh
    Dec 22, 2023 via iPhone
    3
    有些支持 ws 的协议是不是也可以满足这个需求
    codingmiao
    codingmiao
    OP
    Dec 22, 2023
    4
    @laminux29 好可怕,不敢玩了不敢玩了,这就去把服务器还原回来
    yolee599
    yolee599
    Dec 22, 2023 via Android
    5
    好家伙,你这种行为用专业术语叫“留后门”,出事了会蹲监狱的
    wenyifancc
    wenyifancc
    Dec 22, 2023
    6
    著名隧道工具 gost 满足一切流量转发需求
    Archeb
    Archeb
    Dec 22, 2023❤️4
    7
    这是内网渗透的经典需求,reGeorg 、reduh 、tunna 、phpsocks……等无数前辈向你投来了关爱的目光
    Lentin
    Lentin
    Dec 23, 2023 via iPhone
    8
    用这是不是就能白嫖不支持 ws 的 cdn 了…
    cctv6
    cctv6
    Dec 23, 2023
    9
    还好你不是把这功能集成在你的 web 应用里面,要不然这就是真留后门了。
    keepRun
    keepRun
    Dec 23, 2023 via Android
    10
    有意思
    rming
    rming
    Dec 23, 2023
    11
    这不就是 webshell ?!
    coffeesun
    coffeesun
    Dec 23, 2023 via Android
    12
    给你的工资包括了来回跑的辛苦钱,你这样有法律风险。再者,也有些不可预知的需现场操作你却不在的处境。就比如:在线问诊和去医院看病不是一个价
    Features
    Features
    Dec 23, 2023
    13
    一身冷汗了吧
    还好甲方有问题的时候你没说:我已经远程帮你处理好了
    不然就露馅了。。。
    roycestevie6761
    roycestevie6761
    Dec 23, 2023
    14
    这不就是挂马?
    roycestevie6761
    roycestevie6761
    Dec 23, 2023
    15
    内网访问为了安全,现在反而代出来暴露在公网,666
    SenLief
    SenLief
    Dec 23, 2023
    16
    老哥 隔壁出差属于好事
    yazinnnn0
    yazinnnn0
    Dec 23, 2023
    17
    想了解一下 http 短链接是咋实现代理 tcp 双工的🤨
    weeei
    weeei
    Dec 23, 2023
    18
    大家不用较真,当成 OP 对这个项目的宣传就行,毕竟 OP 说的事情真伪都没有证实。
    Dongxiaohao
    Dongxiaohao
    Dec 23, 2023 via Android
    19
    当初我也是嫌跑机房麻烦,在机房某个服务器放了个 nps 客户端,内网穿过去,但是被甲方那边的什么玩意扫到了,最后被领导叼了,自此之后服务器的远程桌面都不允许开了,有问题直接去机房调试😂
    ashuai
    ashuai
    Dec 23, 2023
    20
    嫌出差麻烦找甲方临时开远程协助类的东西,用完还原。不要自己偷偷挂马
    codingmiao
    codingmiao
    OP
    Dec 23, 2023
    21
    @yazinnnn0 发送方和接收方产生的字节都丢进缓冲池里,定期发起一个 post 请求,post body 把发送方缓冲池里的字节带走,response body 把接收方池子里的字节带回来
    Hopetree
    Hopetree
    Dec 23, 2023
    22
    技术是牛的,但是这个技术感觉不实用
    proxytoworld
    proxytoworld
    Dec 23, 2023
    23
    如果能做成 native binary 就更好了,jar 包还是太大了,得有 jre
    zkwang
    zkwang
    Dec 23, 2023❤️1
    24
    按 github 教程搭了一遍,运行正常。纯 http post 实现还是有特色的。很多年前有个叫自助冲浪的工具软件,是用 CGI 表单实现了 http 代理。
    lemonrfx
    lemonrfx
    Dec 23, 2023
    25
    不提合规性的话,看起来不错,10 毫秒一次重试的流畅性不成问题。个人觉得还可以考虑一下断线自动重连,毕竟几个请求没发过去也是常事。
    devliu1
    devliu1
    Dec 23, 2023 via Android
    26
    tcp over http?
    stimulate1797
    stimulate1797
    Dec 23, 2023
    27
    frp 不是现成的吗
    roundgis
    roundgis
    Dec 23, 2023 via Android
    28
    pagekite
    likooo125802023
    likooo125802023
    Dec 23, 2023❤️1
    29
    能飞积累飞行积分不香么?
    vincent7245
    vincent7245
    Dec 23, 2023
    30
    “由于用户那边不允许远程访问服务器运维“ 你已经违反公司规定了,我觉得你应该看看你的劳动合同,或者你们公司的规章制度,这种设计信息安全的违规应该都是 T0 级别的,开春都不用付违约金
    yinmin
    yinmin
    Dec 24, 2023 via iPhone
    31
    @codingmiao 这题“甲方不给远程,跑现场又太麻烦”,去现场成本太高,找个甲方同事装一个向日葵或类似软件,需要远程的时候让对方开一下向日葵,你连上去维护一下。

    疫情 3 年期间,甲方基本都能接受上面的方案。
    arloor
    arloor
    Dec 24, 2023
    32
    @devliu1 http connect tunnel 就是这个东西,没毛病的
    devliu1
    devliu1
    Dec 24, 2023 via Android
    33
    @arloor 是啊 直接实现 http proxy 就够了😂
    anjingdexiaocai
    anjingdexiaocai
    Dec 24, 2023 via Android
    34
    个人觉得这个方案不够通用
    snoopygao
    snoopygao
    Dec 24, 2023 via iPhone
    35
    让对方提供 vp@啊,费这个劲,还不安全
    aqua02
    aqua02
    Dec 24, 2023
    36
    咋回事啊 ,工作不饱和 ,扣工资,扣绩效
    Ironpan
    Ironpan
    Dec 24, 2023
    37
    为啥要区分 ss 和 cs, 不合并成一个吗
    codingmiao
    codingmiao
    OP
    Dec 25, 2023❤️1
    38
    @Ironpan 两个包依赖的第三方库不一样,比如 ss 里有 servlet 相关包,所以分开尽量精简一点,frp 之类的工具都是这么玩的。
    fengpan567
    fengpan567
    Dec 26, 2023
    39
    服务器:坏了,我成肉鸡了
    stevenkinwjg
    stevenkinwjg
    Feb 13, 2024
    40
    @laminux29 可以直接远程注入了,黑客给你点了个赞
    codingmiao
    codingmiao
    OP
    Jun 16, 2024
    41
    @itning 是的,但是 frp 必须开一个单独 TCP 端口,有时候两台机器间没有空余且可达的 TCP 端口。
    于是大半年后我发现这玩意除了主题里的在违法的边缘试探的玩法,还可以改造一下,让它能以任意媒介来打通两台机器间的网络。于是就有了 2.0 版的[自定义通信方式的玩法]( https://github.com/codingmiao/hppt?tab=readme-ov-file#%E7%A4%BA%E4%BE%8B3-%E7%BC%96%E5%86%99%E8%87%AA%E5%AE%9A%E4%B9%89%E5%8D%8F%E8%AE%AE),比如拿 kafka 中介打通两台不互通的机器:

    ![kafka]( https://raw.githubusercontent.com/codingmiao/hppt/main/_doc/img/kafkademo.jpg)
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1387 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 86ms · UTC 21:21 · PVG 05:21 · LAX 13:21 · JFK 16:21
    ♥ Do have faith in what you're doing.