事情是这样子的,我在 A 市工作,我们的 web 应用部署在 B 市,由于用户那边不允许远程访问服务器运维,所以有点事就要飞过去现场处理,超级烦。好在 web 应用只要有网就能访问。
反正不管 ssh 还是访问 web ,都是把字节传发送到服务器嘛,于是我整了个活,本机用 netty 写个客户端把 ssh 请求发出的字节接住,转成 http post 发到 web 应用的 nginx ,再转发给服务器上的 netty 服务端还原出字节,转到 ssh 端口,大致就是这么个架构:
然后,我就不用飞来飞去了,坐办公室里用 http 端口连服务器了 O(∩_∩)O 。。
你问为什么不用 websocket ,因为用户不给在 nginx 上加相关配置。。
忍不住要分享下,项目地址是 https://github.com/codingmiao/hppt
大半年过去了,发现这玩意除了钻空子,还是有点其它用的,于是我翻新了一波,现在支持编写两个实现类,就能以任意的通讯媒介(比如mq、数据库,甚至聊天软件)来打通两台机器间的网络交互。
比如这个例子,A、B两台机器没法通信,但通过一个kafka服务就能让A访问B上的端口了:
1
laminux29 362 天前 4
用户不允许远程访问服务器运维,然后你搞技术对抗。
不出事还好,出事后,用户直接给服务器断电,报警,网监带走硬盘,你还能保住自己吗? |
2
titanhw 362 天前 via iPhone
恭喜你实现了: http 代理
|
3
titanhw 362 天前 via iPhone
有些支持 ws 的协议是不是也可以满足这个需求
|
4
codingmiao OP @laminux29 好可怕,不敢玩了不敢玩了,这就去把服务器还原回来
|
5
yolee599 362 天前 via Android
好家伙,你这种行为用专业术语叫“留后门”,出事了会蹲监狱的
|
6
wenyifancc 362 天前
著名隧道工具 gost 满足一切流量转发需求
|
7
Archeb 362 天前 4
|
8
Lentin 362 天前 via iPhone
用这是不是就能白嫖不支持 ws 的 cdn 了…
|
9
cdlnls 362 天前
还好你不是把这功能集成在你的 web 应用里面,要不然这就是真留后门了。
|
10
keepRun 362 天前 via Android
有意思
|
11
rming 362 天前
这不就是 webshell ?!
|
12
coffeesun 362 天前 via Android
给你的工资包括了来回跑的辛苦钱,你这样有法律风险。再者,也有些不可预知的需现场操作你却不在的处境。就比如:在线问诊和去医院看病不是一个价
|
13
Features 362 天前
一身冷汗了吧
还好甲方有问题的时候你没说:我已经远程帮你处理好了 不然就露馅了。。。 |
14
roycestevie6761 362 天前
这不就是挂马?
|
15
roycestevie6761 362 天前
内网访问为了安全,现在反而代出来暴露在公网,666
|
16
SenLief 362 天前
老哥 隔壁出差属于好事
|
17
yazinnnn0 362 天前
想了解一下 http 短链接是咋实现代理 tcp 双工的🤨
|
18
weeei 362 天前
大家不用较真,当成 OP 对这个项目的宣传就行,毕竟 OP 说的事情真伪都没有证实。
|
19
Dongxiaohao 362 天前 via Android
当初我也是嫌跑机房麻烦,在机房某个服务器放了个 nps 客户端,内网穿过去,但是被甲方那边的什么玩意扫到了,最后被领导叼了,自此之后服务器的远程桌面都不允许开了,有问题直接去机房调试😂
|
20
ashuai 362 天前
嫌出差麻烦找甲方临时开远程协助类的东西,用完还原。不要自己偷偷挂马
|
21
codingmiao OP @yazinnnn0 发送方和接收方产生的字节都丢进缓冲池里,定期发起一个 post 请求,post body 把发送方缓冲池里的字节带走,response body 把接收方池子里的字节带回来
|
22
Hopetree 362 天前
技术是牛的,但是这个技术感觉不实用
|
23
proxytoworld 362 天前
如果能做成 native binary 就更好了,jar 包还是太大了,得有 jre
|
24
zkwang 362 天前 1
按 github 教程搭了一遍,运行正常。纯 http post 实现还是有特色的。很多年前有个叫自助冲浪的工具软件,是用 CGI 表单实现了 http 代理。
|
25
lemonrfx 361 天前
不提合规性的话,看起来不错,10 毫秒一次重试的流畅性不成问题。个人觉得还可以考虑一下断线自动重连,毕竟几个请求没发过去也是常事。
|
26
devliu1 361 天前 via Android
tcp over http?
|
27
itning 361 天前
frp 不是现成的吗
|
28
roundgis 361 天前 via Android
pagekite
|
29
likooo125802023 361 天前 1
能飞积累飞行积分不香么?
|
30
vincent7245 361 天前
“由于用户那边不允许远程访问服务器运维“ 你已经违反公司规定了,我觉得你应该看看你的劳动合同,或者你们公司的规章制度,这种设计信息安全的违规应该都是 T0 级别的,开春都不用付违约金
|
31
yinmin 361 天前 via iPhone
@codingmiao 这题“甲方不给远程,跑现场又太麻烦”,去现场成本太高,找个甲方同事装一个向日葵或类似软件,需要远程的时候让对方开一下向日葵,你连上去维护一下。
疫情 3 年期间,甲方基本都能接受上面的方案。 |
34
anjingdexiaocai 361 天前 via Android
个人觉得这个方案不够通用
|
35
snoopygao 361 天前 via iPhone
让对方提供 vp@啊,费这个劲,还不安全
|
36
aqua02 360 天前
咋回事啊 ,工作不饱和 ,扣工资,扣绩效
|
37
Ironpan 360 天前
为啥要区分 ss 和 cs, 不合并成一个吗
|
38
codingmiao OP @Ironpan 两个包依赖的第三方库不一样,比如 ss 里有 servlet 相关包,所以分开尽量精简一点,frp 之类的工具都是这么玩的。
|
39
fengpan567 358 天前
服务器:坏了,我成肉鸡了
|
40
stevenkinwjg 309 天前
@laminux29 可以直接远程注入了,黑客给你点了个赞
|
41
codingmiao OP @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) |