受到论坛里另一位大佬的启发 /t/616027,加上自己的骚想法,我做了一个这个玩意。
我的想法就是,服务器可以不需要保存数据,A 端传输给 B 端后数据立即销毁,不在服务器上储存。
纯粹是为了练手做的吧,传输文件的话效率很低,我自己测试大约只有 100KB/s 的速度。
项目地址: https://github.com/kasuganosoras/MoeTransfer
第一步是将项目 clone 到本地:
git clone https://github.com/kasuganosoras/MoeTransfer/ /usr/local/MoeTransfer/
接着为客户端设置可执行权限
chmod -R 755 /usr/local/MoeTransfer/*.sh
(可选)编辑 bashrc,增加快捷命令
alias mg='/usr/local/MoeTransfer/moeget.sh' # 接收端
alias ms='/usr/local/MoeTransfer/moesend.sh' # 从标准输入读取并发送数据
alias msf='/usr/local/MoeTransfer/moesendfile.sh' # 发送文件
然后就可以自由使用了,比如要在 A 服务器发送 test.sh 到 B 服务器:
mg
启动接收端msf B 服务器 IP test.sh
例如 B 服务器 IP 是 12.34.56.78 ,则发送的命令就是:
msf 12.34.56.78 test.sh
可以自己搭建传输服务器,源码在仓库里,具体使用方法可以看 README
感谢阅读
1
4ier 2019-11-09 07:15:56 +08:00 via Android
没看懂三个 sh 和 server 之间怎么交互的
|
2
KasuganoSoras OP @4ier #1 moeget.sh 是接收端,在 A 服务器运行,它会跟中转服务器建立一个长连接,此时去 B 服务器运行 moesend.sh ,它会把你的数据发给中转服务器,然后中转服务器再发回给 A 服务器,就完成了数据传输。交互是用 curl 来进行的。
|
3
0TSH60F7J2rVkg8t 2019-11-09 07:41:44 +08:00 via iPhone
@KasuganoSoras 楼主这是没有公网 IP 的机器之间通过公网中转服务器传输数据的意思吧?主贴标题有歧义啊,没公网访问权限,哪里连得上中转服务器呢
|
4
love 2019-11-09 08:19:12 +08:00 via Android
为啥发送的时候还要指定一个 Ip 呢,太不方便了,直接像剪贴复制那样不指定实现不了吗
|
5
momocraft 2019-11-09 08:27:28 +08:00
以前用过个叫 piping-server 的
|
6
wdv2ly 2019-11-09 08:29:58 +08:00 via Android
没有公网 IP 的服务器,输入的 ip 难道是内网 ip 吗?
|
7
dtsdao 2019-11-09 11:18:42 +08:00
|
8
KasuganoSoras OP @ahhui #3 先写标题再写内容的坏处( 怕标题太长所以删了又删
@love #4 原本我的想法是,B 服务器运行接收端,获得一个随机 ID,然后 A 服务器直接输入这个 ID 发送,但是后来考虑到这样可能存在安全问题(比如别人可以一个一个 ID 试,然后就可以往你机器发数据了),而使用 IP 地址的话,相比起 ID 就安全很多了。 @wdv2ly #6 输入的是出口 IP @dtsdao #7 纯个人研究学习文件传输……我原本想做个好玩点的功能,就是可以两边实时同步,A 写一点内容 B 那边就显示,但是后来发现貌似是因为服务器的 buffer 还是什么限制了,两边不能同步,只有服务器 close 了连接之后客户端才能显示出收到的内容。 |
9
0TSH60F7J2rVkg8t 2019-11-09 15:20:13 +08:00
@KasuganoSoras [只有服务器 close 了连接之后客户端才能显示出收到的内容] 这肯定是你的实现有问题啊,感觉是有缓冲里的数据没读取完
|
10
54xavier 2019-11-09 15:57:32 +08:00
[大师球] 捕捉,不明觉厉!!!
|