LocalSend 局域网文件分享实战:网络配置、工作原理、源码构建与故障排查指南
2026/9/5 20:19:15 网站建设 项目流程

LocalSend 局域网文件分享实战:网络配置、工作原理、源码构建与故障排查指南

【免费下载链接】localsendAn open-source cross-platform alternative to AirDrop项目地址: https://gitcode.com/GitHub_Trending/lo/localsend

本文基于 LocalSend 项目的菲律宾语(Tagalog)官方 README(support/readme/README_PH.md)整理扩充,覆盖其局域网安全分享的完整使用路径:防火墙与路由器配置、HTTPS + 自签证书的工作原理(含源码级验证)、Portable Mode 与--hidden启动参数、从源码编译的步骤,以及官方故障排查表,帮助你把一个“开箱即用”的本地 AirDrop 替代品真正部署到生产环境。

LocalSend 是什么:无互联网依赖的安全本地分享

LocalSend 是一款免费、开源的跨平台应用,允许你在本地网络内的设备之间安全地分享文件与消息,不需要互联网连接,也不依赖任何第三方服务器。其核心设计是:

  • 设备之间通过REST API通信;
  • 所有数据经由HTTPS 加密传输;
  • 每个设备本地自行生成TLS/SSL 证书,不经过任何外部 CA 或中转服务器。

这与依赖外部消息服务器的方案有本质区别:数据始终留在你的局域网内,隐私与速度都由本地网络条件决定。

分发渠道与系统兼容性

官方建议从应用商店或包管理器下载应用,因为 LocalSend没有自动更新功能。各平台可选的分发渠道(详见 README.md 的 Download 一节):

平台分发渠道
WindowsWinget、Scoop、Chocolatey、EXE 安装包、便携 ZIP(Releases 页)
macOSApp Store、Homebrew、DMG 安装包
LinuxFlathub、Nixpkgs、Snap、AUR、DEB、AppImage、TAR
AndroidPlay Store、F-Droid、APK(Releases 页)
iOSApp Store
Fire OSAmazon 应用商店

其中 Windows 二进制文件经过代码签名,签名策略可参阅 CODE_SIGNING.md;各分发包的打包细节见 CONTRIBUTING.md 的 Distribution 章节。

最低版本兼容性(继承自 support/readme/README_PH.md 的 Pagkakatugma 表):

平台最低版本备注
Android5.0
iOS12.0
macOS11 Big Sur老机型可借助 OpenCore Legacy Patcher 2.0.2 运行
Windows10最后一个支持 Windows 7 的版本是 v1.15.4
LinuxN.A.Gnome 依赖xdg-desktop-portalxdg-desktop-portal-gtk;KDE 依赖xdg-desktop-portalxdg-desktop-portal-kde

网络配置:防火墙端口与 AP 隔离

在大多数场景下 LocalSend 开箱即用。但如果发送或接收文件失败,通常需要两类网络配置。

防火墙规则

流量类型协议端口动作
入站(Incoming)TCP、UDP53317允许
出站(Outgoing)TCP、UDP任意允许

端口 53317 并非任意值——从源码可以确认它是全项目统一的默认端口:核心库 packages/core/src/multicast/mod.rs 中定义DEFAULT_PORT: u16 = 53317,注释明确写着“与默认 HTTP 服务器端口相同”;命令行工具的 cli/src/storage/config.rs 同样以DEFAULT_PORT: u16 = 53317作为config.toml缺省值。也就是说,UDP 组播发现与 TCP HTTPS 服务复用同一个 53317 端口,防火墙只需放行这一个端口即可覆盖发现与传输两条链路。

路由器 AP 隔离

务必确认路由器的AP 隔离(AP Isolation)已关闭。它默认通常是关闭的,但部分路由器——尤其是访客网络(guest network)——会默认开启。AP 隔离开启后,同一 Wi-Fi 下的设备彼此无法直连通信,LocalSend 的组播发现与点对点传输都会失败。

工作原理源码剖析:从组播发现到 HTTPS 传输

官方 README 对原理的表述是:“LocalSend 使用安全的通信协议,让设备通过 REST API 相互通信;所有数据经 HTTPS 安全发送,TLS/SSL 证书在每台设备上即时生成”。结合当前仓库源码,这套机制的具体实现如下:

1. 组播发现(UDP, 53317)发现模块 packages/core/src/multicast/mod.rs 定义了:

  • IPv4 组播组224.0.0.167DEFAULT_MULTICAST_GROUP)。选择224.0.0.0/24网段是有原因的:源码注释指出,在某些 Android 设备上只有该网段的 IP 能接收 UDP 组播消息;
  • IPv6 组播组ff12::fd3a:e420DEFAULT_MULTICAST_GROUP_V6),这是 LocalSend 在协议 v2.2 之上自行扩展的 IPv6 发现能力,IPv4 仍是基线;
  • 设备加入网络后会发送“通告”(announce),且为避免单条数据报丢失、以及刚上线的设备尚未就绪,通告会按 100ms / 500s 2000ms 的延迟序列重复三次(ANNOUNCE_DELAYS);
  • UDP 只用于“广播自己存在”,实际握手是收到通告的一方主动向宣告方发起 HTTP register 请求——这与防火墙规则表中的出站放行相呼应。

2. 自签证书与设备指纹证书生成实现在 packages/core/src/crypto/cert.rs。从源码注释可以看到关键设计:

  • 每台设备生成RSA-2048密钥对与自签名证书(CN=LocalSend User,无 SAN);
  • 设备之间仅凭证书的 SHA-256 指纹相互识别,因此证书名不携带任何信息;
  • 证书有效期沿用 rcgen 默认区间(1975–4096 年),实际上永不过期,也无需因时间原因轮换。

这套“本地生成证书 + 指纹互认”的设计,正是 README 所说“generated on the fly on each device, ensuring maximum security”的工程落地:没有任何中心化信任源,安全边界完全由设备自身密钥对保证。

3. HTTPS 服务与传输HTTPS 侧由 packages/core/src/http/server/ 下的服务端实现承载(含 v2/v3 协议版本、web 下载页等),而 packages/core/src/http/client/url.rs 的测试用例如https://192.168.1.1:53317/api/localsend/v2/register展示了注册请求的最终 URL 形态。项目整体的模块依赖关系可用 support/docs/dependency-hierarchy.d2 描述的层次图来理解。协议细节的权威文档在独立的 LocalSend Protocol 仓库中(README 外链,此处不展开)。

实用特性:Portable Mode 与隐藏启动

支持文档 的 Setup 一节给出了两个桌面端实用特性,二者均可在源码中验证。

Portable Mode(v1.13.0 引入)

在可执行文件同一目录下创建一个名为settings.json的文件(可以为空文件),应用就会改用该文件存储设置,而不是默认位置。源码依据:app/lib/util/shared_preferences/shared_preferences_portable.dart 注释即写明“使用可执行文件旁的 settings.json 文件”;对照 app/lib/provider/persistence_provider.dart,默认的 Windows 存储位置是%APPDATA%\LocalSend\settings.json。Portable Mode 的价值在于:设置随可执行文件一起放在 U 盘里即可携带,无需在系统配置目录留下痕迹。

隐藏启动--hidden(v1.15.0 更新)

localsend_app.exe --hidden启动,应用只驻留在系统托盘、不显示主窗口。注意版本行为差异:v1.14.0 及更早版本是“设置了 autostart 且隐藏设置开启”时才隐藏启动;v1.15.0 起改为直接监听--hidden命令行参数(该变更亦记录在 app/assets/CHANGELOG.md)。实现上,app/lib/util/native/autostart_helper.dart 定义了startHiddenFlag = '--hidden',而 Linux 原生侧 app/linux/my_application.cc 会逐一检查入口参数中是否包含--hidden来决定是否最小化到托盘。

从源码编译运行:Getting Started

官方给出的编译步骤(继承自 support/readme/README_PH.md 的 Pagsisimula 章节):

  1. 安装 Flutter——直接安装,或使用 [fvm] 管理版本(所需版本见仓库根的 .fvmrc);
  2. 克隆 LocalSend 仓库(如需克隆可使用git clone https://gitcode.com/GitHub_Trending/lo/localsend);
  3. cd app进入应用目录;
  4. flutter pub get下载依赖;
  5. flutter run启动应用。

注意(原文档 NOTE 原文翻译):LocalSend 当前要求较旧的 Flutter 版本(在 .fvmrc 中指定,当前值为3.41.9),系统级安装的 Flutter 版本若不匹配可能导致构建问题。为保持开发一致性,项目使用fvm管理 Flutter 版本——安装fvm后,用fvm flutter替代flutter命令。

补充说明:当前仓库中 Flutter 应用(app/)通过 Rust 核心库(packages/core/、packages/localsend_isolates/)完成发现与传输,Rust 工具链版本由根目录 rust-toolchain.toml 锁定,工作区定义见 Cargo.toml。菲律宾语 README 未单独列出安装 Rust 的步骤,而英文版 README.md 的 Getting Started 中包含该步骤,完整编译时请以英文版为准。

贡献指南:翻译与 Bug 修复

翻译

  • 推荐方式:使用 Weblate 协作翻译平台管理翻译(平台地址见 README.md 外链);
  • 替代方式:fork 仓库后手动添加翻译。

翻译文件位于 app/assets/i18n/,编辑_missing_translations_<locale>.jsonstrings_<locale>.i18n.json即可新增/更新词条;生成的 Dart 字符串类在 app/lib/gen/ 下(如strings_*.g.dart)。

重要提示(原文档原文翻译):@前缀的字段不需要翻译。它们不被应用在任何地方使用,只是关于文件本身的说明文本,或为译者提供上下文。

Bug 修复与改进

  • Bug 修复:发现 bug 后,创建包含清晰问题描述与修复方案的 pull request;
  • 改进建议:先创建 issue 讨论改进的必要性,再动手实现。

更多细节见 CONTRIBUTING.md。

故障排查表(官方)

继承自 support/readme/README_PH.md 的 Pag-troubleshoot 表,五条官方排查项:

问题发送端平台接收端平台解决方案
设备不可见任意任意确认路由器 AP 隔离已关闭;开启时设备间连接会被禁止
设备不可见任意Windows将网络配置为“专用(private)”网络;Windows 对公网(public)网络的限制更严格
设备不可见macOS / iOS任意尝试在系统设置的“隐私”中切换“本地网络(Local Network)”权限
速度过慢任意任意改用 5GHz 频段;并在两台设备上均关闭加密
速度过慢任意Android已知问题,根因在 Flutter Android 侧的saf_stream插件(issue 见原文档外链)

从源码结构看,“设备不可见”类问题基本都对应发现链路的某一环:路由器 AP 隔离会阻断组播(224.0.0.167)或点对点 TCP 连接;Windows 公网模式与 macOS/iOS 的本地网络权限则会限制系统的网络发现能力。发现与传输复用 53317 端口的单端口设计,使得“只开 TCP 忘了 UDP”这类配置错误会成为典型故障点——建议按前文的防火墙规则表同时放行 TCP 与 UDP。

小结

LocalSend 菲律宾语 README 的核心价值在于给出了一个可落地的部署清单:以 53317 单端口放行 TCP/UDP、关闭 AP 隔离为网络基线;以 Portable Mode(可执行文件旁建settings.json)和--hidden托盘启动为桌面端实用特性;以 fvm 锁定 Flutter 版本保证源码可编译。再结合 packages/core/ 中组播发现与 RSA-2048 自签证书的源码实现,这套“组播广播 + HTTP 注册 + 证书指纹互认 + HTTPS 传输”的链路就完全可验证、可复现了。

【免费下载链接】localsendAn open-source cross-platform alternative to AirDrop项目地址: https://gitcode.com/GitHub_Trending/lo/localsend

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询