LocalSend 意大利语文档技术解读:局域网安全文件传输的部署、排障与从源码构建指南
本文以 LocalSend 仓库中的意大利语版官方 README(support/readme/README_IT.md)为主体,完整覆盖其介绍的所有实战要素——多平台下载与兼容性、首次运行的防火墙配置、便携模式与最小化启动、协议工作原理、从源码编译的完整步骤、故障排查对照表以及翻译贡献流程——并结合当前仓库的 Rust 核心源码与构建配置(端口常量、自签名证书生成、Flutter/Rust 工具链版本等)逐项验证与扩充,帮助读者既能在各操作系统上正确部署 LocalSend,也能深入理解其"无互联网依赖"的本地安全传输机制。
项目定位:免费、开源、不依赖互联网的本地传输
意大利语版 README 对 LocalSend 的核心定义是:一款免费且开源的应用,允许用户在本地网络上通过安全方式与邻近设备共享文件和消息,无需任何互联网连接。
原文(support/readme/README_IT.md)在 "Panoramica"(概览)一节进一步说明:LocalSend 是一个跨平台应用,设备之间通过 REST API 与 HTTPS 加密通信;与依赖外部服务器的即时通讯类应用不同,它不需要互联网连接,也不依赖任何第三方服务器,是一种快速、可靠的本地通信方案。
这一"纯局域网"定位在仓库结构中得到了直接印证:核心传输逻辑位于 packages/core 这个 Rust 包中,包含 discovery(设备发现)、multicast(组播广播)、http(客户端/服务端)等模块,均面向局域网内的直连通信设计。
工作原理:REST API + 每设备动态生成的自签名证书
文档 "Come funziona"(工作原理)一节指出:LocalSend 使用一种安全的通信协议,使设备之间能通过 REST API 互相通信;所有数据都通过 HTTPS 传输,且 TLS/SSL 证书是在每台设备上即时生成的,以确保安全。
这一描述在当前仓库源码中可以找到精确对应:
- 自签名证书的生成实现位于 packages/core/src/crypto/cert.rs。其中
generate_self_signed()函数负责在本地生成密钥对并签发自签名证书;源码注释明确说明该证书的 SHA-256 指纹用于标识设备("self-signed certificate whose SHA-256 fingerprint identifies the device"),即每台设备都拥有独立的加密身份。 - 默认通信端口为 53317,在 packages/core/src/http/client/url.rs 的测试用例中可以直接看到完整的目标地址形态,例如
https://192.168.1.1:53317/api/localsend/v2/register——HTTPS 路径前缀/api/localsend/v2/对应文档所说的 REST API 端点。
由于每台设备的证书是本地即时生成而非由统一 CA 签发,设备间在首次连接时需要交换并校验证书信息(这在 App 界面中体现为安全校验页),这正是"无需外部服务器却依然保持加密传输"的实现基础。
下载渠道与各平台兼容性
文档 "Download" 一节建议优先通过应用商店或包管理器下载,因为应用本身没有自动更新机制。文档给出的渠道矩阵如下:
| Windows | macOS | Linux | Android | iOS | Fire OS |
|---|---|---|---|---|---|
| Winget | App Store | Flathub | Play Store | App Store | Amazon |
| Scoop | Homebrew | Nixpkgs | F-Droid | ||
| Chocolatey | DMG 安装包 | Snap | |||
| EXE 安装器 | AUR | ||||
| ZIP 便携版 | TAR / DEB / AppImage |
各分发渠道的维护仓库列表在 CONTRIBUTING.md 的 "Distribution" 一节中有更详细的说明(含各渠道的维护者与仓库来源)。
文档同时给出了最低版本兼容性表,这是部署前必须核对的硬性前提:
| 平台 | 最低版本 | 备注 |
|---|---|---|
| Android | 5.0 | — |
| iOS | 12.0 | — |
| macOS | 11 Big Sur | 旧机型需借助 OpenCore Legacy Patcher 2.0.2(参见文档引用的 issue #1005) |
| Windows | 10 | 最后一个支持 Windows 7 的版本是 v1.15.4,后续可能视情况 backport |
| Linux | N.A. | — |
兼容性声明与仓库中的构建配置相互印证:
- macOS 的
MACOSX_DEPLOYMENT_TARGET在 app/macos/Podfile 中被显式设置为11.0,与文档表格中的 "macOS 11 Big Sur" 完全一致; - Android 侧 app/android/app/build.gradle 使用
minSdkVersion flutter.minSdkVersion(即 Flutter SDK 默认的 API 21,对应 Android 5.0),targetSdkVersion 37,同样与文档声明吻合。
首次运行配置:防火墙规则与路由器 AP 隔离
文档 "Installazione"(安装)一节的结论是:大多数情况下 LocalSend 装完即用,但如果发送或接收文件失败,通常需要配置防火墙放行本地流量。文档给出的防火墙规则表为:
| 流量方向 | 协议 | 端口 | 动作 |
|---|---|---|---|
| 入站 | TCP, UDP | 53317 | 允许 |
| 出站 | TCP, UDP | 任意 | 允许 |
这里的端口号 53317 并非文档凭空规定——它在 Rust 核心代码的测试与常量中反复出现(如 packages/core/src/http/client/url.rs 与 packages/core/src/model/discovery.rs),是设备发现与文件传输共用的固定端口,因此防火墙必须对 TCP 和 UDP 同时放行:UDP 用于组播发现,TCP 承载 HTTPS 数据传输。
文档还特别提醒:务必确认路由器上禁用了 AP 隔离(AP Isolation)。它默认通常是关闭的,但部分路由器(尤其是访客网络)会将其打开,开启后同一网段内的设备之间会被禁止直接通信,LocalSend 将完全无法发现彼此。
桌面端高级用法:便携模式与最小化启动
意大利语版 README 记录了两项仅对桌面端(Windows 为主)有意义的实用配置:
1. 便携模式(Modalità portatile,v1.13.0 引入)
在可执行文件所在目录创建一个名为 settings.json 的文件(内容可以为空)。创建后,应用会把设置写入该文件,而不是默认的系统配置位置,从而实现"整个程序连同配置一起拷贝到 U 盘即可用"的便携形态。
2. 最小化启动(Avvio minimizzato,v1.15.0 更新)
通过命令行参数 --hidden 让应用直接以最小化形式启动(仅驻留系统托盘/任务栏),例如:
localsend_app.exe --hidden
文档同时说明:在 v1.14.0 及更早版本中,行为由 autostart 标志配合"隐藏启动"设置项控制(二者同时满足时应用才会最小化启动),而 v1.15.0 起改由显式的 --hidden 参数控制,行为更直接。
从源码构建:完整的 Primi passi(起步)步骤
文档 "Primi passi" 一节给出了从源码编译 LocalSend 的六步流程。结合当前仓库的实际工具链配置,可以将其补充为更精确的版本:
- 安装 Flutter。仓库通过 .fvmrc 锁定版本,当前要求为 Flutter 3.41.9。文档特别注明(引用块 NOTE):LocalSend 目前要求的是较旧版本的 Flutter,如果系统安装的 Flutter 版本与项目要求不匹配,很可能就是编译报错的原因;项目统一使用 fvm 管理项目级 Flutter 版本(该说明在文档中出现,外部服务名 fvm 为文档原文引用),安装
fvm后应改用fvm flutter代替flutter执行所有命令,以保证开发环境一致。 - 安装 Rust。当前仓库通过 rust-toolchain.toml 将工具链固定在 Rust 1.97.1(并附带
clippy组件用于代码检查)。 - 克隆 LocalSend 仓库。
- 进入应用目录:
cd app。 - 执行
flutter pub get拉取 Dart 侧依赖。 - 执行
flutter run启动应用。
仓库根目录的 pubspec.yaml 声明 Dart SDK 约束为 ^3.11.0,与 Flutter 3.41.x 配套;Rust 工作区则由根 Cargo.toml 管理,涵盖 packages/core、packages/localsend_isolates、cli、server 等 crate。
此外,文档目录(意大利语版 README 的 TOC)列出了 Android、iOS、macOS、Windows、Linux 五套平台级的编译流程;当前仓库在 support/scripts/ 目录下确实保留了与各平台一一对应的官方构建脚本,例如 compile_android_apk.sh、compile_ios.sh、compile_linux_appimage.sh、compile_windows_exe.ps1、compile_mac_dmg.sh 等,需要产出对应平台安装包时可以直接对照这些脚本了解各平台的打包方式。
故障排查对照表
文档 "Risoluzione dei problemi"(故障排查)一节给出了一张按"现象 × 平台"组织的排查矩阵,是排查连接问题的第一手依据:
| 现象 | 发送方平台 | 接收方平台 | 解决方案 |
|---|---|---|---|
| 设备不可见 | 任意 | 任意 | 确认已禁用路由器的 AP 隔离;若开启,设备间通信会被禁止 |
| 设备不可见 | 任意 | Windows | 确认网络配置为"专用网络(Private)";Windows 对"公用网络(Public)"的限制更严格 |
| 设备不可见 | macOS / iOS | 任意 | 可尝试在系统设置的"隐私"中关闭"本地网络(Local Network)"授权项 |
| 速度过慢 | 任意 | 任意 | 改用 5 GHz 频段;在两台设备上同时关闭加密 |
| 速度过慢 | 任意 | Android | 已知问题(文档指向 flutter-cavalry/saf_stream 的 issue #4) |
这张表与本文前面两节是一体的:AP 隔离与 Windows 网络配置文件影响的是设备发现(组播/广播能否到达对方),5 GHz 与关闭加密影响的是传输吞吐。若设备能互相发现但传输失败,则应回到防火墙一节,核对 53317 端口的 TCP/UDP 放行。
贡献指南:翻译与代码改进
文档 "Come contribuire"(如何贡献)一节将贡献途径分为两类:
翻译(Traduzione)
- 推荐方式:通过 Weblate 平台协作翻译(文档以 Weblate 的 localsend/app 项目为入口,README 顶部的 "Translations" 徽章即指向该平台的翻译进度统计);
- 替代方式:fork 仓库后手动添加翻译文件。
翻译文件位于 app/assets/i18n/ 目录,当前包含 ar、de、fr、ja、pt-BR、zh-CN、zh-TW 等 60 余种语言的 strings_<locale>.i18n.json 文件;文档说明应修改 _missing_translations_<locale>.json 或 strings_<locale>.i18n.json 来新增或更新译文(本仓库快照中保留了 app/assets/i18n/_missing_translations_it.json 等缺失译文清单文件,即用于标记尚未翻译的词条)。文档特别警示:以 @ 开头的字段不要翻译——它们不用于 App 运行,只是给译者提供的上下文注释。仓库中生成的 app/lib/gen/strings_it.g.dart 等 *.g.dart 文件则是由翻译 JSON 自动生成的 Dart 代码,无需手工维护。
Bug 修复与功能改进
- 修复 Bug:提交 Pull Request 时需清晰描述问题及修复方式;
- 功能改进:先提交 issue 讨论改进的必要性,再着手实现。
完整的规范(包括分发渠道维护、安全漏洞上报方式——安全类问题应直接发邮件给 support@localsend.org 而非公开 issue)见 CONTRIBUTING.md。
小结:从意大利语 README 到可验证的工程细节
这篇意大利语版 README 虽然篇幅不长,却完整覆盖了 LocalSend 使用者需要的全部关键路径:它说明了项目"REST API + 每设备即时生成的 HTTPS 自签名证书"这一无外网依赖的安全模型(对应 packages/core/src/crypto/cert.rs),给出了 53317 端口 TCP/UDP 的防火墙放行规则(与 packages/core/src/http/client/url.rs 中的端口常量一致)、AP 隔离与 Windows 网络配置这两个最常见的发现失败原因、macOS 11.0 / Android 5.0 等与构建配置严格对应的兼容性边界(见 app/macos/Podfile、app/android/app/build.gradle),以及"Flutter 3.41.9 + Rust 1.97.1"的从源码构建组合(见 .fvmrc、rust-toolchain.toml)。将文档声明与仓库源码、构建配置逐项对照后可以看出,该 README 提供的每一条运维建议都有明确的代码依据,可直接作为本地网络部署 LocalSend 的操作手册使用。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0622
Hy4-previewHy4 preview 是由腾讯混元团队研发的新一代混合专家(MoE)旗舰模型。模型总参数量 770B,每个 token 激活 49B,主干共包含78层,第一层采用标准 FFN,其余 77 层均为 MoE 结构,每层包含 256 个路由专家与 1 个共享专家,每个 token 激活 top-8 路由专家及共享专家。主干之外原生内置 1 层 MTP(总参数量 10B,激活 0.7B)以支持投机解码。Python00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
GLM-5.3-FlashGLM-5.3-Flash (320B-A18B),是GLM-5系列的首个原生多模态模型。320B总参数,能力超过GLM-5.2Jinja00
Spark-X2.5-4BSpark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体工作流,并在同等规模的开源模型中取得领先成绩。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00