V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
codingmiao
V2EX  ›  Java

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

  •  3
     
  •   codingmiao · 314 天前 · 7975 次点击
    这是一个创建于 314 天前的主题,其中的信息可能已经有所发展或是发生改变。

    事情是这样子的,我在 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

    第 1 条附言  ·  314 天前
    听楼下各位大佬的建议,楼主已将服务器还原,不作死,各位用的时候也注意遵纪守法^_^
    第 2 条附言  ·  138 天前

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

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

    kafka

    41 条回复    2024-06-16 01:25:19 +08:00
    laminux29
        1
    laminux29  
       314 天前   ❤️ 4
    用户不允许远程访问服务器运维,然后你搞技术对抗。

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

    疫情 3 年期间,甲方基本都能接受上面的方案。
    arloor
        32
    arloor  
       313 天前
    @devliu1 http connect tunnel 就是这个东西,没毛病的
    devliu1
        33
    devliu1  
       312 天前 via Android
    @arloor 是啊 直接实现 http proxy 就够了😂
    anjingdexiaocai
        34
    anjingdexiaocai  
       312 天前 via Android
    个人觉得这个方案不够通用
    snoopygao
        35
    snoopygao  
       312 天前 via iPhone
    让对方提供 vp@啊,费这个劲,还不安全
    aqua02
        36
    aqua02  
       312 天前
    咋回事啊 ,工作不饱和 ,扣工资,扣绩效
    Ironpan
        37
    Ironpan  
       312 天前
    为啥要区分 ss 和 cs, 不合并成一个吗
    codingmiao
        38
    codingmiao  
    OP
       311 天前   ❤️ 1
    @Ironpan 两个包依赖的第三方库不一样,比如 ss 里有 servlet 相关包,所以分开尽量精简一点,frp 之类的工具都是这么玩的。
    fengpan567
        39
    fengpan567  
       310 天前
    服务器:坏了,我成肉鸡了
    stevenkinwjg
        40
    stevenkinwjg  
       261 天前
    @laminux29 可以直接远程注入了,黑客给你点了个赞
    codingmiao
        41
    codingmiao  
    OP
       138 天前
    @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)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1290 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 23:26 · PVG 07:26 · LAX 16:26 · JFK 19:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.