首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
V2EX  ›  分享创造

又做了一个工具 MoeTransfer,更方便地在两台没有公网的服务器之间传输文本

  •  
  •   KasuganoSoras · 27 天前 · 1900 次点击

    受到论坛里另一位大佬的启发 /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 服务器:

    • 先在 B 服务器输入 mg 启动接收端
    • 然后在 A 服务器输入 msf B 服务器 IP test.sh

    例如 B 服务器 IP 是 12.34.56.78 ,则发送的命令就是:

    msf 12.34.56.78 test.sh
    

    服务器搭建

    可以自己搭建传输服务器,源码在仓库里,具体使用方法可以看 README

    感谢阅读

    10 回复  |  直到 2019-11-09 15:57:32 +08:00
        1
    4ier   27 天前 via Android
    没看懂三个 sh 和 server 之间怎么交互的
        2
    KasuganoSoras   27 天前
    @4ier #1 moeget.sh 是接收端,在 A 服务器运行,它会跟中转服务器建立一个长连接,此时去 B 服务器运行 moesend.sh ,它会把你的数据发给中转服务器,然后中转服务器再发回给 A 服务器,就完成了数据传输。交互是用 curl 来进行的。
        3
    ahhui   27 天前 via iPhone
    @KasuganoSoras 楼主这是没有公网 IP 的机器之间通过公网中转服务器传输数据的意思吧?主贴标题有歧义啊,没公网访问权限,哪里连得上中转服务器呢
        4
    love   27 天前 via Android
    为啥发送的时候还要指定一个 Ip 呢,太不方便了,直接像剪贴复制那样不指定实现不了吗
        5
    momocraft   27 天前
    以前用过个叫 piping-server 的
        6
    wdv2ly   27 天前 via Android
    没有公网 IP 的服务器,输入的 ip 难道是内网 ip 吗?
        7
    dtsdao   27 天前
    @KasuganoSoras #2
    不懂有何实际意义,不如用 frp 转发个 ssh/ftp
    而且 php 效率不大行啊
        8
    KasuganoSoras   27 天前
    @ahhui #3 先写标题再写内容的坏处( 怕标题太长所以删了又删

    @love #4 原本我的想法是,B 服务器运行接收端,获得一个随机 ID,然后 A 服务器直接输入这个 ID 发送,但是后来考虑到这样可能存在安全问题(比如别人可以一个一个 ID 试,然后就可以往你机器发数据了),而使用 IP 地址的话,相比起 ID 就安全很多了。

    @wdv2ly #6 输入的是出口 IP

    @dtsdao #7 纯个人研究学习文件传输……我原本想做个好玩点的功能,就是可以两边实时同步,A 写一点内容 B 那边就显示,但是后来发现貌似是因为服务器的 buffer 还是什么限制了,两边不能同步,只有服务器 close 了连接之后客户端才能显示出收到的内容。
        9
    ahhui   27 天前
    @KasuganoSoras [只有服务器 close 了连接之后客户端才能显示出收到的内容] 这肯定是你的实现有问题啊,感觉是有缓冲里的数据没读取完
        10
    54xavier   27 天前
    [大师球] 捕捉,不明觉厉!!!
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4049 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 33ms · UTC 09:34 · PVG 17:34 · LAX 01:34 · JFK 04:34
    ♥ Do have faith in what you're doing.