最近一直有个比较烦的问题:
我自己经常在 iPhone、Mac 和 Windows 之间传文件、复制文本。
AirDrop 只在苹果生态里比较舒服,Windows 和手机之间又得换别的工具;一些跨平台方案要么需要账号,要么依赖第三方服务器。
所以干脆自己做了一个:
Neloa
GitHub:
https://github.com/kure29/Neloa
文档:
https://kure29.github.io/Neloa/
目前版本是 0.1.13,还属于比较早期的阶段,不过基本的文件传输已经可以正常使用了。
它现在能做什么
目前支持:
- macOS
- Windows
- Android
- iOS
设备之间配对一次之后,就可以互传文件和纯文本剪贴板。
在同一个局域网时,设备之间会通过 QUIC 直接传输,文件不会先上传到服务器。
如果设备不在同一个局域网,也可以自己部署一个 Neloa Relay,通过自己的中继服务器跨网络传输。
两种情况下传输内容都会使用 Noise XX 进行端到端加密。
简单来说就是:
同一局域网:
设备 A <------ QUIC ------> 设备 B
或者:
不同网络:
设备 A <----> 自建 Relay <----> 设备 B
我比较在意的一点是:
Neloa 不需要注册账号,也没有官方中心服务器。
局域网能直连就直接传,需要跨网络的话,中继也可以完全由自己部署。
设备配对
第一次连接两台设备时,会显示一个 六位验证码。
确认两边数字一致之后分别确认,之后设备就会记住彼此。
即使通过 Relay 配对,也仍然需要双方确认验证码,不会因为经过中继就跳过设备验证。
文件传输
目前支持发送单个文件以及批量文件。
Mac 和 Windows 可以直接把文件拖进窗口发送。
接收方确认之后才会正式开始传输。
传输完成之后还会检查:
剪贴板
现在也做了纯文本剪贴板同步。
桌面端使用起来比较自然。
不过 iOS / Android 对后台读取剪贴板限制比较多,所以移动端暂时没有强行做成后台自动同步,而是以前台操作为主。
这部分后面还会继续优化。
关于 Relay
Relay 可以自己部署。
比如:
家里的 Windows
↓
自己的 VPS
↓
外面的 iPhone
这样就可以跨网络传文件。
Relay 本身主要负责转发数据,加密是在设备之间完成的。
我自己平时也比较喜欢折腾 VPS,所以这部分从一开始就决定做成 自托管,而不是提供一个强依赖官方服务器的方案。
目前的一些不足
项目还比较新,所以先把目前的问题说在前面。
macOS / Windows
目前安装包没有商业代码签名,所以系统第一次安装时可能会出现安全提示。
iOS
现在提供的是 unsigned IPA,需要自己签名安装。
移动端
还有不少体验需要继续优化,尤其是:
- 系统后台限制
- 文件分享入口
- 剪贴板同步
- 不同 Android 厂商系统的兼容性
目前主要还是我自己的设备在测试,所以肯定还有不少奇怪的兼容性问题没有发现。
技术栈
客户端目前主要使用:
- Rust
- Tauri 2
- TypeScript
- QUIC
- Noise Protocol
Relay 也是自己实现的,相关协议和部署方式都放在仓库里面了。
项目使用 Apache-2.0 License。
最开始其实只是想解决自己几个设备之间传文件的问题。
后来越写越多,就干脆整理成一个完整项目开源出来了。
现在 UI、局域网发现、设备配对、文件传输、剪贴板、Relay、跨平台打包这些基本都已经跑起来了,不过离真正成熟肯定还有距离。
如果坛友手上正好有:
Mac / Windows / Android / iPhone
欢迎帮忙测试一下。
尤其想知道不同网络环境、路由器、Windows 防火墙、Android 厂商系统下面有没有比较奇怪的问题。
有 Bug、建议,或者觉得哪里设计得不合理,都可以直接在 GitHub 提 Issue。
GitHub:
https://github.com/kure29/Neloa
文档:
https://kure29.github.io/Neloa/
如果觉得项目有点意思,也欢迎顺手点个 Star