LocalSend基于 Rust 与 Flutter 的局域网文件共享方案——协议原理、网络配置与源码构建全解【免费下载链接】localsendAn open-source cross-platform alternative to AirDrop项目地址: https://gitcode.com/GitHub_Trending/lo/localsendLocalSend 是一款开源的跨平台“隔空投送”替代应用允许设备在本地网络上通过 REST API 与 HTTPS 加密安全地互传文件和消息全程无需互联网连接或第三方服务器。本文以仓库根目录的 README.md 为核心骨架结合packages/core的 Rust 源码、Cargo feature 配置与构建脚本深入讲解它的通信原理、端口与防火墙配置、各平台兼容性、从源码编译到产物构建的完整流程以及常见问题排查方法。读完本文你将能够独立部署 LocalSend、正确配置网络放行规则并理解其“证书指纹识别设备”的安全设计。项目定位为什么需要 LocalSend从 README.md 的 About 章节可以确认 LocalSend 的核心定位跨平台覆盖 Android、iOS、macOS、Windows、Linux 与 Fire OS安全通信基于 REST API HTTPS 加密TLS/SSL 证书在每台设备上动态生成on the fly无外网依赖不依赖任何外部服务器或互联网连接完全在局域网内点对点工作。这一设计使它区别于依赖云端中转的常规传输方式设备之间直接发现、直接握手、直接传输速度与可靠性只取决于局域网本身。整体架构与依赖层级仓库根目录下的 依赖层级图由 dependency-hierarchy.d2 用 D2 语言生成展示了项目的分层结构这是理解整个代码库的地图从 dependency-hierarchy.d2 的源文件看架构分为两层层模块语言职责消费者层app/Dart/Flutter跨平台图形应用消费者层cli/Rust命令行界面消费者层server/RustWebRTC 信令服务器适配层packages/localsend_isolates/Dart Rust后台线程与 Rust 绑定Flutter-Rust-Bridge核心层packages/core/Rust实现 LocalSend 协议的基础库关键调用关系是app不直接依赖core而是经由localsend_isolatesDart 层通过隔离线程 Rust 绑定间接使用核心协议库cli与server则直接依赖core。这种设计让图形应用的重活协议、加密、传输都在 Rust 隔离线程中执行避免阻塞 Dart 的 UI 事件循环。根目录的 pubspec.yaml 表明这是一个 Dart workspace聚合了app、packages/localsend_isolates与packages/typed_isolates三个成员包。工作原理REST API 动态自签名证书README.md 的 “How It Works” 指出LocalSend 使用一套安全通信协议设备间通过 REST API 交互所有数据经 HTTPS 传输且TLS/SSL 证书在每台设备上即时生成。在 packages/core/src/crypto/cert.rs 中可以印证并深化这一机制设备身份是一个RSA-2048 密钥对 自签名证书generate_self_signed()私钥以 PKCS#8 PEM 编码保存证书CNLocalSend User且不含 SAN由于不依赖 CA对端设备完全通过证书的 SHA-256 指纹DER 编码、大写十六进制来识别和配对彼此证书名字不携带任何身份信息证书有效期取 rcgen 默认值1975–4096 年实际上永不过期无需因时间轮换校验逻辑verify_cert_from_cert会检查签名、时间有效性与公钥匹配。换言之LocalSend 的“信任”不是 CA 体系而是设备指纹配对首次连接时用户确认对方指纹之后凭指纹建立信任——这与 AirDrop 式的“确认设备”体验一致。协议核心库的功能模块划分packages/core/Cargo.toml 通过 Cargo feature 将协议拆成可裁剪的模块Feature依赖的关键 crate职责cryptorsa、rcgen、ed25519-dalek、sha2证书/密钥生成、哈希multicastif-addrs、socket2组播网络广播用于设备发现httphyper、reqwest、rustls、tokio-rustlsREST API 服务与客户端HTTPS 传输discovery依赖httpmulticast组合能力发现对端并建立通信webrtcwebrtc、flate2WebRTC 通道可用于 NAT 后/组播受限场景full以上全部完整协议栈默认 feature 为空default []各消费方按需开启——例如 CLI 只取所需子集App 走full。从源码结构看discovery对http与multicast的依赖关系Cargo.toml正体现了“先组播发现、再 HTTPS 传输”的协议流程packages/core/src/discovery/store.rs 中默认端口常量即为53317与 README 的防火墙配置表一致。下载与平台兼容性README.md 的 Download 章节提供了各平台分发渠道的完整清单并给出明确的兼容性下限平台最低版本备注Android5.0—iOS12.0—macOS11 Big Sur更老系统可尝试 OpenCore Legacy Patcher 2.0.2Windows10最后一个支持 Windows 7 的版本为 v1.15.4LinuxN.A.GNOME 需xdg-desktop-portal与xdg-desktop-portal-gtkKDE 需xdg-desktop-portal-kDE变体分发渠道按平台组织README 中为链接表格此处仅列名称WindowsWinget、Scoop、Chocolatey、EXE 安装包、便携式 ZIPmacOSApp Store、Homebrew、DMG 安装包LinuxFlathub、Nixpkgs、Snap、AUR、TAR/DEB/AppImageAndroidPlay Store、F-Droid、APK 直装iOSApp StoreFire OSAmazon 商店。README 同时强调两点工程事实由于应用没有自动更新推荐通过应用商店或包管理器安装Windows 二进制文件经过签名签名策略见 CODE_SIGNING.md。网络配置端口、防火墙与路由器README.md 的 Setup 章节给出了部署 LocalSend 最常被忽略的网络要求。大多数情况下开箱即用但发送/接收失败时通常出在防火墙或路由器上防火墙规则流量方向协议端口动作入站 (Incoming)TCP, UDP53317允许出站 (Outgoing)TCP, UDP任意允许端口53317在仓库中多处可验证CLI 配置默认值cli/src/storage/config.rs 中DEFAULT_PORT: u16 53317、CLI 帮助文本cli/src/main.rs “[default: config.toml, else 53317]”、发现模块测试数据packages/core/src/discovery/store.rs。路由器 AP 隔离必须确保路由器关闭 AP 隔离AP Isolation。该选项默认通常关闭但部分路由器尤其访客网络会开启它一旦开启接入同一 Wi-Fi 的设备之间将禁止互通LocalSend 自然无法发现彼此。便携式模式Portable Modev1.13.0 引入在可执行文件同级目录创建一个settings.json内容可为空应用即改用该文件存储设置而非系统默认位置。适合放在 U 盘里跨机器携带配置使用。隐藏启动Start hiddenv1.15.0 更新使用--hidden标志启动例如localsend_app.exe --hidden应用将仅驻留系统托盘而不弹出窗口。v1.14.0 及更早版本的行为不同当设置了autostart标志且隐藏选项开启时才会隐藏启动——升级后需注意这一变化。故障排查手册README.md 的 Troubleshooting 表格按“发送端平台 × 接收端平台”维度归纳了五类典型问题是排障的第一入口问题发送端接收端解决方案设备不可见任意任意关闭路由器 AP 隔离开启后设备间连接被禁止设备不可见任意Windows将网络类型设为“专用 (private)”Windows 对“公用”网络的限制更严格设备不可见macOS、iOS任意在系统设置的“隐私”中切换“本地网络”权限速度过慢任意任意改用 5 GHz Wi-Fi双端同时关闭加密速度过慢任意Android已知问题与 SAF 流式文件访问的实现相关仓库还提供了一个专门的故障排查界面入口app/lib/pages/troubleshoot_page.dart说明这些问题在应用内也有对应的诊断引导。从源码编译环境与步骤README.md 的 Getting Started 给出了六步流程结合仓库实际文件补齐版本约束安装 Flutter直接安装或借助 fvm 管理所需版本见 .fvmrc。从 app/pubspec.yaml 看要求Flutter ^3.41.0 / Dart ^3.11.0安装 Rust。根目录 rust-toolchain.toml 锁定Rust 1.97.1并附带 clippy 组件跨平台编译目标Android aarch64/armv7/x86_64、macOS aarch64/x86_64在 packages/localsend_isolates/rust-toolchain.toml 中声明克隆 LocalSend 仓库cd app进入应用目录flutter pub get下载依赖flutter run启动应用。README 附有一条重要 NOTELocalSend 当前要求一个特定版本的 Flutter系统级 Flutter 版本不匹配会造成构建问题项目用fvm统一管理版本安装后请用fvm flutter替代flutter命令执行。仓库采用 Dart workspacepubspec.yaml因此依赖解析覆盖整个工作区。各平台产物构建命令README.md 的 Building 章节声明以下命令面向维护者且必须从app目录执行Android# 传统 APK flutter build apk # Google Play 用的 AppBundle flutter build appbundleiOSflutter build ipamacOSflutter build macosWindows# 传统 EXE flutter build windows # 本地 MSIX 包 flutter pub run msix:create # 应用商店就绪的 MSIX flutter pub run msix:create --storeLinux# 传统构建 flutter build linux # AppImage appimage-builder --recipe AppImageBuilder.yml # Snap见上游 snap 仓库的说明仓库的 support/scripts/ 目录提供了对应的 CI 级构建脚本可作为上述命令的自动化参考实现如 compile_android_apk.sh、compile_mac_dmg.sh、compile_windows_exe.ps1、compile_linux_appimage.sh 等。此外 app/linux/packaging/ 下有 deb/rpm 的 make 配置app/macosos/ 与 app/ios/ 则包含原生壳工程含 ShareExtension、托盘/状态栏集成等平台特定能力。多语言支持与贡献路径README.md 的 Contributing 章节说明了两条主要贡献路径翻译使用 Weblate 平台协作或 fork 后手工提交。翻译文件位于 app/assets/i18n/ 目录需要编辑strings_locale.i18n.json或_missing_translations_locale.json。该目录当前已覆盖中文zh-CN.json、zh-TW.json、zh-HK.json、日文、韩文、法文等 70 语言。README 特别提醒带前缀的字段仅作上下文说明不参与翻译Bug 修复与改进Bug 修复直接提 PR 并附清晰说明改进类建议先开 issue 讨论必要性。更完整的规范见 CONTRIBUTING.md。本地生成的字符串 Dart 代码如 app/lib/gen/strings_zh_CN.g.dart由 app/lib/util/i18n.dart 等运行时模块消费说明翻译文件会经代码生成环节注入应用。延伸阅读仓库内可继续深入的位置主题路径协议核心库发现/HTTP/加密/WebRTCpackages/core/src/自签名证书实现packages/core/src/crypto/cert.rs协议集成测试v2 服务、TLS pinning、Web 下载等packages/core/tests/隔离线程与 Rust 绑定层packages/localsend_isolates/命令行客户端cli/src/WebRTC 信令服务器server/src/Windows 代码签名策略CODE_SIGNING.md版本变更记录CHANGELOG.md其他语言 READMEsupport/readme/README_ZH.md 等综合来看LocalSend 的工程价值在于用一套 Rust 核心协议库可 feature 裁剪同时支撑 Flutter 图形应用、CLI 与信令服务器三种形态用“动态自签名证书 指纹配对”替代 CA 体系完成设备间信任并靠 53317 端口的组播发现 HTTPS REST 传输实现了无云、可控、跨平台的局域网文件共享。以上每一点都能在当前仓库的文档与源码中找到对应证据。【免费下载链接】localsendAn open-source cross-platform alternative to AirDrop项目地址: https://gitcode.com/GitHub_Trending/lo/localsend创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考